如何为Android Signing Config指定自定义Keystore Provider配置
AGP 4.2版本的SigningConfig DSL确实没有直接暴露--ks-provider-name、--ks-provider-class、--ks-provider-arg对应的配置字段,你可以通过以下两种方案将自定义keystore的签名流程集成到gradlew assemble任务中,无需拆分构建、签名流程:
方案1:钩子修改AGP内置签名任务的apksigner参数
该方案无需修改原有构建流程,直接给AGP内置的签名任务追加自定义参数即可,适配AGP 4.1及以上版本,配置代码写入app模块的build.gradle文件:
android { // 原有常规签名配置正常填写 signingConfigs { release { storeFile file("你的keystore文件路径") keyAlias "你的密钥别名" keyPassword "你的密钥密码" storePassword "你的keystore密码" } } buildTypes { release { signingConfig signingConfigs.release } } // 追加自定义keystore所需的apksigner参数 applicationVariants.all { variant -> if (variant.signingConfig != null) { variant.signingTask.configure { apkSignerOptions.add("--ks-provider-name") apkSignerOptions.add("你自定义的Provider名称") apkSignerOptions.add("--ks-provider-class") apkSignerOptions.add("你自定义的Provider全类名") apkSignerOptions.add("--ks-provider-arg") apkSignerOptions.add("你需要传递的参数值") } } } }
配置完成后直接执行gradlew assembleRelease即可完成带自定义参数的自动签名。
方案2:自定义签名任务绑定构建流程
如果你的AGP版本不支持直接修改apkSignerOptions,可以禁用内置签名后自定义签名任务,绑定到assemble执行链路中:
android { buildTypes { release { // 禁用AGP内置签名逻辑 signingConfig null } } } // 注册自定义签名任务 tasks.register("customSignRelease", Exec) { // 依赖构建未签名APK的任务 dependsOn tasks.named("assembleRelease") // 自动读取SDK中对应buildTools版本的apksigner工具 def apksignerPath = "${android.sdkDirectory.absolutePath}/build-tools/${android.buildToolsVersion}/apksigner" def unsignedApk = file("build/outputs/apk/release/app-release-unsigned.apk") def signedApk = file("build/outputs/apk/release/app-release-signed.apk") // 组装完整的apksigner执行命令,支持所有官方参数 commandLine apksignerPath, "sign", "--ks", "你的keystore文件路径", "--ks-key-alias", "你的密钥别名", "--ks-pass", "pass:你的keystore密码", "--key-pass", "pass:你的密钥密码", "--ks-provider-name", "你自定义的Provider名称", "--ks-provider-class", "你自定义的Provider全类名", "--ks-provider-arg", "你需要传递的参数值", "--out", signedApk.absolutePath, unsignedApk.absolutePath doLast { println "自定义签名完成,输出路径:${signedApk.absolutePath}" } } // 配置assembleRelease执行完成后自动触发自定义签名任务 tasks.named("assembleRelease") { finalizedBy tasks.named("customSignRelease") }
该方案灵活性更高,支持所有apksigner官方提供的参数配置。
内容的提问来源于stack exchange,提问作者Mycotina
相关产品推荐
相关产品推荐

