Android将 build 配置从 Groovy 迁移到 KTS

1,023 阅读1分钟

引用一段官方原文:Kotlin 脚本 (KTS) 比 Groovy 更适合用于编写 Gradle 脚本,因为采用 Kotlin 编写的代码可读性更高,并且 Kotlin 提供了更好的编译时检查和 IDE 支持。Android Gradle 插件 4.0 支持在 Gradle build 配置中使用 KTS。具体概念参考官方文档。

ndk替换

ndk {
    // 设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
    abiFilters "armeabi-v7a", "arm64-v8a" , 'armeabi' , 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}

替换为

ndk {
    // 设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
    //noinspection ChromeOsAbiSupport
    abiFilters+= listOf("armeabi-v7a","arm64-v8a","armeabi","x86","x86_64")
}

设置发布apk名称

 android.applicationVariants.configureEach { variant ->
        variant.outputs.configureEach {
//            def date = new Date().format("yyyy-MM-dd hh.mm" , TimeZone.getTimeZone("Asia/Shanghai"))
            def dateFormat = new SimpleDateFormat("yyyyMMddHHmm")
            dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"))
            def date=dateFormat.format(new Date())
//            def date = new Date().format("yyyy-MM-dd hh.mm", TimeZone.getTimeZone("GMT+08"))
            if (variant.buildType.name == 'debug') {
                outputFileName = "你的应用名称-${versionName}-${date}-debug.apk"
            }
            if (variant.buildType.name == 'release') {
                outputFileName = "你的应用名称-${versionName}-${date}-release.apk"
            }
        }
    }

替换为

 applicationVariants.all {
        val variant = this
        variant.outputs
            .map { it as com.android.build.gradle.internal.api.BaseVariantOutputImpl }
            .forEach { output ->
                val dateFormat = SimpleDateFormat("yyyyMMddHHmm")
                dateFormat.timeZone = TimeZone.getTimeZone("Asia/Shanghai")
                val date=dateFormat.format(Date())
                val outputFileName = "你的应用名称-${variant.baseName}-${variant.versionName}-${variant.versionCode}-${date}.apk"
                output.outputFileName = outputFileName
            }
    }

signingConfigs

signingConfigs {
    release {
        //签名文件路径
        storeFile file("..\\key.jks")
        //签名文件密码
        storePassword "xxxxxx"
        //别名
        keyAlias "xxxxxx"
        //别名密码
        keyPassword "xxxxxx"
    }
}

替换为

signingConfigs {
    register("release") {
        //签名文件路径
        storeFile = file("..\\key.jks")
        //签名文件密码
        storePassword = "xxxxxx"
        //别名
        keyAlias = "xxxxxx"
        //别名密码
        keyPassword = "xxxxxx"
    }
}

buildTypes

buildTypes {

    release {
        signingConfig signingConfigs.release
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }

    debug {
        signingConfig signingConfigs.release
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }

}

替换为

buildTypes {
    release {
        signingConfig = signingConfigs.getByName("release")
        isMinifyEnabled = true
        proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
    }

    debug {
        signingConfig = signingConfigs.getByName("release")
        isMinifyEnabled = true
        proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
    }
}

compileOptions

compileOptions {
    sourceCompatibility JavaVersion.VERSION_17
    targetCompatibility JavaVersion.VERSION_17
}

替换为

compileOptions {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

参考:

1、developer.android.google.cn/studio/buil…

2、blog.csdn.net/lyabc123456…