我需要使用gradle命令行生成unsigned和signed release apks(gradlew assembleRelease
是我现在使用的命令)
apks必须对齐。我查了一下: 使用Gradle构建未签名的APK 但它似乎是一种实现这一目标的旧方法,现在它不起作用,并且在最新版本的android和gradle编译中发生了一些变化。而且我还需要同时生成两个apks,不仅仅是发布模式或无符号模式
我需要使用gradle命令行生成unsigned和signed release apks(gradlew assembleRelease
是我现在使用的命令)
apks必须对齐。我查了一下: 使用Gradle构建未签名的APK 但它似乎是一种实现这一目标的旧方法,现在它不起作用,并且在最新版本的android和gradle编译中发生了一些变化。而且我还需要同时生成两个apks,不仅仅是发布模式或无符号模式
我认为 buildTypes
是比一个更合适的地方 productFlavors
。
您可以使用替换signingConfig扩展发布版本。
buildTypes {
release {
....
signingConfig signingConfigs.release
}
releaseUnsigned.initWith(buildTypes.release)
releaseUnsigned {
signingConfig null
}
}
然后构建两个APK文件:
./gradlew assemble
或者,如果您只想要发布版本
./gradlew assembleRelease assembleReleaseUnsigned
or ./gradlew assR assRU
如果您确实只想使用assembleRelease任务,则可以使用此依赖项
assembleRelease.dependsOn assembleReleaseUnsigned
并且正确地构建
./gradlew assembleRelease
您链接的答案是正确的 - 如果您选择的变体(即构建类型+风味组合)未使用“签名就绪”签名配置,则gradle将创建未签名的APK。
所以你可以定义这样的设置:
android {
signingConfigs {
release { ... }
}
productFlavors {
signed {
signingConfig signingConfigs.release // defined above
}
unsigned {} // use the default options
}
}
然后跑 ./gradlew :app:assembleRelease
将创建您的APK:
app/build/outputs/apk
├── app-signed-release.apk
├── app-signed-release-unaligned.apk
└── app-unsigned-release-unsigned.apk
我知道这是一个非常古老的答案,但它仍然可以帮助某人在不增加额外味道的情况下实现目标(即使在我的情况下,由于项目中的许多依赖项,它可能具有挑战性)。
android {
signingConfigs {
release { ... }
}
productFlavors {
signed {
signingConfig (checkUnsigned() ? null : signingConfigs.release)
}
}
def checkUnsigned () {
return project.hasProperty("unsigned")
}
为了使用它只是使用
gradle assembleRelease
要么
gradle assembleRelease '-Punsigned'
用于创建无符号(CI的引号,否则可能不需要)
解决方案的缺点就在于您想要在一行中组装多种口味 即
gradle assembleRelease assembleDebug assembleRelease '-Punsigned'
assembleRelease检查命令行中的所有属性,所以首先使用param'-Punsigned'调用allocateRelease 我使用2个命令解决了这个CI问题 - 一个用于签名,另一个用于无符号版本
gradle assembleRelease assembleOtherFlavour '-Punsigned'
gradle assembleDebug assembleRelease assembleOtherFlavour