我需要使用Gradle命令行生成未签名和已签名的发布APK (gradlew assembleRelease
是我现在使用的命令)
这些apk必须对齐。 我查看了这个链接:使用Gradle构建无签名APK,但似乎这是一种旧的方法,现在不再适用于最新的Android和Gradle编译版本。并且我需要同时生成两个apk,而不仅仅是发布模式或未签名模式。
我需要使用Gradle命令行生成未签名和已签名的发布APK (gradlew assembleRelease
是我现在使用的命令)
这些apk必须对齐。 我查看了这个链接:使用Gradle构建无签名APK,但似乎这是一种旧的方法,现在不再适用于最新的Android和Gradle编译版本。并且我需要同时生成两个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检查命令行中的所有属性,因此首先将调用带有参数“-Punsigned”的assembleRelease。我通过使用两个命令解决了这个CI问题 - 一个用于签名版本,另一个用于未签名版本。
gradle assembleRelease assembleOtherFlavour '-Punsigned'
gradle assembleDebug assembleRelease assembleOtherFlavour
我认为buildTypes
比productFlavors
更适合。
你可以通过替换签名配置来扩展发布版本。
buildTypes {
release {
....
signingConfig signingConfigs.release
}
releaseUnsigned.initWith(buildTypes.release)
releaseUnsigned {
signingConfig null
}
}
./gradlew assemble
或者,如果您只需要发布版本
./gradlew assembleRelease assembleReleaseUnsigned
or ./gradlew assR assRU
如果您确实想要仅使用assembleRelease任务, 您可以创建以下依赖关系
assembleRelease.dependsOn assembleReleaseUnsigned
只需使用以下内容即可构建
./gradlew assembleRelease
assembleRelease.dependsOn assembleReleaseUnsigned
这行代码? - Khaled Osmanandroid {
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
对我来说,使用定义新的buildType不起作用。但是在debug/release模式下可以正常工作:
buildTypes {
release {
signingConfig null
}
debug {
signingConfig null
}
}
这将创建未签名的APK文件
gradle clean assemble
(这将执行assembleDebug
和assembleRelease
)。确保 debug buildType 没有 singingConfig,但 release buildType 有一个。 - Simon Marquis