Android 如何生成有符号和无符号APK';他在用gradle吗?
我需要使用gradle命令行生成未签名和签名的发布APK(Android 如何生成有符号和无符号APK';他在用gradle吗?,android,gradle,apk,android-gradle-plugin,Android,Gradle,Apk,Android Gradle Plugin,我需要使用gradle命令行生成未签名和签名的发布APK(gradlew assembleRelease是我现在使用的命令) APK必须对齐。我对此进行了检查:但这似乎是一种实现这一点的老方法,现在它不起作用了,而且在最新版本的android和gradle编译中发生了一些变化。而且我还需要同时生成两个APK,不仅是发布模式或未签名模式您链接到的答案是正确的-如果您选择的变体(即构建类型+风格组合)没有使用“签名准备”签名配置,gradle将创建一个未签名的APK 因此,您可以定义如下设置: an
gradlew assembleRelease
是我现在使用的命令)
APK必须对齐。我对此进行了检查:但这似乎是一种实现这一点的老方法,现在它不起作用了,而且在最新版本的android和gradle编译中发生了一些变化。而且我还需要同时生成两个APK,不仅是发布模式或未签名模式您链接到的答案是正确的-如果您选择的变体(即构建类型+风格组合)没有使用“签名准备”签名配置,gradle将创建一个未签名的APK 因此,您可以定义如下设置:
android {
signingConfigs {
release { ... }
}
productFlavors {
signed {
signingConfig signingConfigs.release // defined above
}
unsigned {} // use the default options
}
}
然后运行/gradlew:app:assembleerelease
将创建您的APK:
app/build/outputs/apk
├── app-signed-release.apk
├── app-signed-release-unaligned.apk
└── app-unsigned-release-unsigned.apk
我认为
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 assembleRelease
或
用于创建未签名(CI的引号,否则可能不需要)
该解决方案的缺点是,当您想要在一条生产线中装配多种口味时
即
assembleRelease检查命令行中的所有属性,因此第一个assembleRelease也将使用param'-Punsigned'调用
我通过使用两个命令解决了这个CI问题—一个用于已签名版本,另一个用于未签名版本
gradle assembleRelease assembleOtherFlavour '-Punsigned'
gradle assembleDebug assembleRelease assembleOtherFlavour
定义新的构建类型对我来说不起作用。但它适用于调试/发布:
buildTypes {
release {
signingConfig null
}
debug {
signingConfig null
}
}
这将产生未签名的APK为我的初始答案道歉,我误读了问题Run
gradle clean Assembly
(这将执行assembleDebug
和assembleRelease
。确保调试构建类型没有singingConfig,但发布构建类型有一个。那么,你解决了你的问题了吗?我认为签名配置应该在构建类型中进行,并且是应用程序逻辑的口味永远不会迟到,以帮助像我这样的其他人:D谢谢!这很轻松,我们比添加一个新的构建变量更合适。谢谢!在app/build.gradle中的任意位置,在依赖项{}或其他自定义任务之后,在哪里添加行assembleerelease.dependsOn assembleerelease unsigned
?@KhaledOsman。
gradle assembleRelease assembleDebug assembleRelease '-Punsigned'
gradle assembleRelease assembleOtherFlavour '-Punsigned'
gradle assembleDebug assembleRelease assembleOtherFlavour
buildTypes {
release {
signingConfig null
}
debug {
signingConfig null
}
}