曂沅仴駦 发表于 2024-6-15 02:34:17

Android kotlin build.gradle.kts设置

1. 添加 maven 堆栈

1. 1. settings设置

1. 1.1. settings.gradle

repositories {
    maven {url 'https://maven.aliyun.com/repository/public/'}
    mavenCentral()
}
1. 1.2. settings.gradle.kts

repositories {
    maven {
      setUrl("https://maven.aliyun.com/repository/public/")
    }
    mavenCentral()
}
1. 2. gradle设置

1. 2.1. build.gradle

implementation 'com.github.bumptech.glide:glide:4.12.0'
1. 2.2. build.gradle.kts

    implementation(libs.glide)
  版本号在gradle文件夹下 libs.versions.toml文件中添加
https://img-blog.csdnimg.cn/direct/d4f16a34e87942fea4c0dea14ba8f6a2.png
1. 2.2.1. build.gradle.kts

  libs.versions.toml文件用来抽离依赖来加载,文件由 4 个主要部分构成:
  (1)部分用于声明可以被依赖项引用的版本
  (2)部分用于声明坐标的别名
  (3)部分用于声明依赖包
  (4)部分用于声明插件
  注意:不要利用驼峰命名方式,单词利用 - 分割:

groovy = "3.0.5"
checkstyle = "8.37"

groovy-core = { module = "org.codehaus.groovy:groovy", version.ref = "groovy" }
groovy-json = { module = "org.codehaus.groovy:groovy-json", version.ref = "groovy" }
groovy-nio = { module = "org.codehaus.groovy:groovy-nio", version.ref = "groovy" }
commons-lang3 = { group = "org.apache.commons", name = "commons-lang3", version = { strictly = "[3.8, 4.0[", prefer="3.9" } }

groovy = ["groovy-core", "groovy-json", "groovy-nio"]

versions = { id = "com.github.ben-manes.versions", version = "0.45.0" }
2. Android Studio 如何设置打包后的文件名称

  我们在新建一个项目然后直接进行Build apk,可以生成一个app_debug.apk的apk文件,那么文件是怎么产生的呢?
https://img-blog.csdnimg.cn/direct/9ecc4b0186cd47b0a40a8896e46d97a4.png
2.1. build.gradle

    //**********打包设置开始**********
    //自定义生成的apk的地址及名称
    def apkName;
    signingConfigs {
      release {
            v1SigningEnabled true
            v2SigningEnabled true
            storeFile file('./keystore/insour_szyj.keystore')
            storePassword 'insour_szyj'
            keyAlias 'insour_szyj'
            keyPassword 'insour_szyj'
      }
      debug {
            v1SigningEnabled true
            v2SigningEnabled true
            storeFile file('./keystore/insour_szyj.keystore')
            storePassword 'insour_szyj'
            keyAlias 'insour_szyj'
            keyPassword 'insour_szyj'
      }
    }
    buildTypes {
      debug {
//            minifyEnabled false//混淆
            minifyEnabled true
            shrinkResources true
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                  'proguard-rules.pro'
            aaptOptions.cruncherEnabled = false
            aaptOptions.useNewCruncher = false
            apkName = "szyj.apk"
            signingConfig signingConfigs.release
      }
      release {
//            minifyEnabled false//混淆
            minifyEnabled true
            shrinkResources true
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                  'proguard-rules.pro'
            aaptOptions.cruncherEnabled = false
            aaptOptions.useNewCruncher = false
            apkName = "szyj.apk"
            signingConfig signingConfigs.release
      }

    }
    android.applicationVariants.all { variant ->
      variant.outputs.all {
            if (outputFileName.endsWith('.apk')) {
                //这里使用之前定义apk文件名称
                outputFileName = apkName
            }
      }
    }
//    android.applicationVariants.all {
//      variant -> variant.outputs.all { output ->
//                def date = new Date().format("yyMMdd",
//                        TimeZone.getTimeZone("GMT+08"))
//                if (variant.buildType.name == 'debug'){
//                  output.outputFileName = "项目名称_" +
//                            "${android.defaultConfig.versionName}_${date}_debug.apk"
//                }else if (variant.buildType.name == 'release'){
//                  output.outputFileName = "项目名称_" +
//                            "${android.defaultConfig.versionName}_${date}_release.apk"
//                }
//            }
//    }
    //**********打包设置结束**********
2.2. build.gradle.kts

//**********打包设置开始**********
    signingConfigs {
//      create("release") {
//            storeFile = file("./keystore/insour_szyj.keystore")
//            storePassword = "insour_szyj"
//            keyAlias = "insour_szyj"
//            keyPassword = "insour_szyj"
//      }
      getByName("debug") {
            enableV1Signing =true
            enableV2Signing =true
            enableV3Signing =true
            enableV4Signing =true
            storeFile = file("./keystore/insour_szyj.keystore")
            storePassword = "insour_szyj"
            keyAlias = "insour_szyj"
            keyPassword = "insour_szyj"
      }
      register("release") {
            enableV1Signing =true
            enableV2Signing =true
            enableV3Signing =true
            enableV4Signing =true
            storeFile = file("./keystore/insour_szyj.keystore")
            storePassword = "insour_szyj"
            keyAlias = "insour_szyj"
            keyPassword = "insour_szyj"
      }
    }
    buildTypes {
      debug {
            isMinifyEnabled = false
            isShrinkResources = false
            proguardFiles(getDefaultProguardFile(
                  "proguard-android-optimize.txt"),
                  "proguard-rules.pro")
      }
      release {
            isMinifyEnabled = false
            isShrinkResources = false
            proguardFiles(getDefaultProguardFile(
                  "proguard-android-optimize.txt"),
                  "proguard-rules.pro")
      }
    }
    // 输出类型
    android.applicationVariants.all {
      // 编译类型
      val buildType = this.buildType.name
      val date = SimpleDateFormat("yyyyMMddHHmmss").format(Date())
      outputs.all {
            // 判断是否是输出 apk 类型
            if (this is com.android.build.gradle
                  .internal.api.ApkVariantOutputImpl) {
                this.outputFileName = "szyj" +
                        "_${android.defaultConfig.versionName}_${date}_${buildType}.apk"
            }
      }
    }
    //**********打包设置结束**********
3. sourceSets设置

3.1. build.gradle

    sourceSets {
      main {
            jniLibs.srcDirs = ['libs']
      }
    }

3.2. build.gradle.kts

//jniLibs目录指向libs目录
    sourceSets {
      getByName("main") {
            jniLibs.srcDirs("libs")
      }
    }
4. BuildConfig不生成

  新建了一个demo,其依赖的AGP版本是8.0.0。但是在运行过程中报了一个错误就是找不到BuildConfig。
重新build了下代码,然后找编译后的代码,发现确实没有生成BuildConfig。清缓存,重启AS都没有用。之前代码相比,也就是AGP的版本升级了下,那猜测是不是跟AGP8.0.0的版本有关,于是在BuildType中手动添加了个buildConfigField,想以此方式强制生成下BuildConfig。
https://img-blog.csdnimg.cn/direct/ba7d38f574134abfae7e718813a4ad19.png
  运行报错
Build Type 'debug' contains custom BuildConfig fields, but the feature is disabled.
https://img-blog.csdnimg.cn/direct/a8cc5d2ebbe94745bca62d0a03b46031.png
  提示BuildConfig 处于禁用状态…看来是新版本的AGP默认禁用了生成BuildConfig。BuildFeatures源码看到了一个设置buildConfig的注释如下。
https://img-blog.csdnimg.cn/direct/f573afb6467a47538277e8825f79074a.png
  果然如此,默认是禁用状态。在buildFeatures设置中把buildConfig值手动设为true,重新build下就好了
    //开启dataBinding
    buildFeatures {
      dataBinding = true
      buildConfig=true
    }
https://img-blog.csdnimg.cn/direct/07bcff3e5c9246a3a8159782ea1ed1c4.png
5. Kotlin Build.gradle脚本编写(build.gradle.kts)

plugins {    id("com.android.application")    kotlin("android")    kotlin("kapt")}android {    compileSdkVersion(29)    defaultConfig {      applicationId = "com.xxx.xxxxx"      minSdkVersion(21)      targetSdkVersion(29)      versionCode = 27      versionName = "2.2.0"      resConfigs("zh")      ndk {            abiFilters += listOf("armeabi-v7a","arm64-v8a")      }    }    //开启dataBinding
    buildFeatures {
      dataBinding = true
      buildConfig=true
    }
    //图片已压缩 指定aapt不做图片压缩 因为可能会反而增长图片大小    aaptOptions {//      cruncherEnabled = false    }    //关闭lint检查    lintOptions {      disable("ResourceType")//      abortOnError= false    }    //jniLibs目录指向libs目录
    sourceSets {
      getByName("main") {
            jniLibs.srcDirs("libs")
      }
    }
    //优化transformClassDexBuilderForDebug的时间    dexOptions {      preDexLibraries = true      maxProcessCount = 8    }    //克制生成依赖元数据 不上play用不到    dependenciesInfo {      includeInApk = false    }    //jdk1.8支持    compileOptions {      sourceCompatibility = JavaVersion.VERSION_1_8      targetCompatibility = JavaVersion.VERSION_1_8    }    kotlinOptions {      jvmTarget = JavaVersion.VERSION_1_8.toString()    }    //署名设置    signingConfigs {      getByName("debug") {            storeFile = file("../xxx.jks")            storePassword = "xxx"            keyAlias = "xxx"            keyPassword = "xxx"      }    }    buildTypes {      getByName("debug") {            //署名            signingConfig = signingConfigs.getByName("debug")            //git提交次数 作为测试包版本后缀            buildConfigField("int", "GIT_COMMIT_COUNT", getGitCommitCount())      }      register("alpha") {            //继承debug设置            initWith(getByName("debug"))            //混淆            isMinifyEnabled = true            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")            //ZipAlignEnabled优化            isZipAlignEnabled = true            //移除无用的resource文件            isShrinkResources = true      }      getByName("release") {            //继承alpha设置            initWith(getByName("alpha"))            //关闭debug            debuggable(false)      }    }    //release打包时自界说apk名字、输出路径    android.applicationVariants.all {      outputs.all {            if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl) {                this.outputFileName = "xxxx.apk"            }      }    }}//获取git提交次数fun getGitCommitCount(): String {    val os = org.apache.commons.io.output.ByteArrayOutputStream()    project.exec {      commandLine = "git rev-list --count HEAD".split(" ")      standardOutput = os    }    return String(os.toByteArray()).trim()}//依赖库apply(from = "depends.gradle")
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android kotlin build.gradle.kts设置