我有一个Android项目(使用Android Studio和Gradle)和一个构建此项目的 Jenkins CI服务器。
我要做的是生成完全未签名的证书。
事实上,当服务器构建应用程序时,它会生成 -unsigned.apk ,但似乎此 apk 已签名通过开发者证书。
事实上我通过下载apk并运行以下命令(阅读How do I verify that an Android apk is signed with a release certificate?之后)检查了这一点
jarsigner -verify -verbose -certs app-unsigned.apk | grep Android
所以输出就像
X.509, CN=Android Debug, O=Android, C=US
(有很多行)
为了它的价值,我构建了运行gradle任务的应用程序:
clean assemble lint
之后,我通过运行
来压缩所有apkszipalign -f -v 4 *.apk
我的 build.gradle 不包含任何签名选项
android {
compileSdkVersion 19
buildToolsVersion '19.0.1'
defaultConfig {
minSdkVersion 10
targetSdkVersion 19
}
buildTypes {
debug {
// proguard
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
// ZipAlign
zipAlign false
}
release {
// proguard
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
// ZipAlign
zipAlign true
}
}
productFlavors {
defaultFlavor {
proguardFile 'proguard-rules.txt'
}
}
lintOptions {
// Don't abort if Lint finds an error, otherwise the Jenkins build
// will be marked as failed, and Jenkins won't analyse the Lint output
abortOnError false
}
}
如果有人有想法生成一个完整的未签名的apk它会帮助我很多。 谢谢你的帮助。
答案 0 :(得分:5)
好的,我设法得到了结果。
事实是我正在为我的构建使用的任务。
我用过
clean assemble lint
然后我改为
clean assembleRelease lint
生成的apk现在是 app-release-unsigned.apk 但是当我运行命令时
jarsigner -verify -verbose -certs app-release-unsigned.apk | grep Android
输出 nothing 所以我猜它有效。
这对我来说是一个谜,因为我认为assemble
是assembleDebug
的一种快捷方式,然后是assembleRelease
like I read on gradle但似乎apk生成的具有相同的名称(app-release-unsigned.apk),但其中一个是签名的,另一个没有。
无论如何,使用assembleRelease
似乎有效。