使用Android Studio如何获得签名、非调试和zip对齐的APK?
使用Android Studio如何获得签名、非调试和zip对齐的APK 到目前为止,我可以得到一个签名的,但它被拒绝,因为它有调试 我可以得到一个非调试版本的apk,但是它被拒绝了,因为它不是zip对齐的 我可以压缩对齐它,但我不能上传它,因为它没有签名 编辑:我应该提到我在windows上。我看到的大部分内容都是基于linux的,很难将linux路径与配置路径分开 Edit2:事情目前暂时搁置。我更新了Android Studio,这扼杀了一切,因为它附带了gradle 1.9依赖项,但没有正确安装gradle 1.9。所以我想用Gradle1.9下载完整的安装程序,但下载链接给出了我开始使用的版本。我知道。我应该知道不应该更新,但考虑到问题,我认为它实际上可能包含修复使用Android Studio如何获得签名、非调试和zip对齐的APK?,android,android-studio,apk,android-gradle-plugin,Android,Android Studio,Apk,Android Gradle Plugin,使用Android Studio如何获得签名、非调试和zip对齐的APK 到目前为止,我可以得到一个签名的,但它被拒绝,因为它有调试 我可以得到一个非调试版本的apk,但是它被拒绝了,因为它不是zip对齐的 我可以压缩对齐它,但我不能上传它,因为它没有签名 编辑:我应该提到我在windows上。我看到的大部分内容都是基于linux的,很难将linux路径与配置路径分开 Edit2:事情目前暂时搁置。我更新了Android Studio,这扼杀了一切,因为它附带了gradle 1.9依赖项,但没有
编辑3:问题解决了。我已经打好了完整的答案,可以发布了,但是我明天才会发布。所有版本都已签名,甚至调试版本(使用调试密钥签名)。只需将其设置为使用正确的密钥对发布版本进行签名。您可以通过“项目结构”对话框设置签名配置,也可以按照中的说明手动编辑
build.gradle
文件
设置构建文件后,您可以使用以下命令从命令行生成发布APK
./gradlew assembleRelease
在Linux或Mac或Windows上:
gradlew.bat assembleRelease
或者在GUI中,您可以通过从build Variants视图中选择来生成发布版本:
生成APK,并使用向导对其进行签名。我已经解决了这个问题
第1部分:k3v1n4ud3的链接确实有助于整合信息。谢谢你。
这是我的整个build.gradle,位于项目文件夹下:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
signingConfigs {
debug {
storeFile file("debug.keystore")
}
release {
storeFile file("D:\\AndroidStudioProjects\\KeyStore\\Keystore_password1.jks")
storePassword "password"
keyAlias "MyAppName"
keyPassword "password"
}
}
productFlavors {
free {
packageName "com.mypackage.myappname"
}
paid {
packageName "com.mypackage.myappname"
}
}
buildTypes {
debug {
signingConfig signingConfigs.release
}
release {
signingConfig signingConfigs.release
debuggable false
zipAlign true
}
/*
alpha {
packageNameSuffix ".alpha"
}
beta {
packageNameSuffix ".beta"
}*/
}
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
}
}
android.applicationVariants.all { variant ->
if (variant.buildType.name == "release") {
switch (variant.name) {
case "FreeRelease":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/free")
}
break;
case "PaidDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/paid")
}
break;
}
}
else if (variant.buildType.name == "debug") {
switch (variant.name) {
case "FreeDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/debug/free")
}
break;
case "PaidDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/debug/paid")
}
break;
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:+'
}
第2部分:我使用了在最初使用Build->Generate Signed APK时创建的密钥库。。。男巫请注意使用的keyalias。半天后,我的头撞在墙上,我忘记了我键入的内容:-)
第3部分:这个线程帮助我设置了源文件夹并理解了它们的风格
第4部分:只有一个AndroidManifest.xml,我无法在包名上使用后缀。使用后缀,上载到设备时被拒绝。当几乎所有build.gradle示例都包含后缀时,这就成了一个问题
第5部分:使用视图->工具窗口->构建变体来显示构建变体。第二列实际上是一个下拉列表。在这里选择要构建的内容,否则它将继续构建调试版本。(到底为什么它不在构建菜单下,或者运行/调试配置是个谜?)
第六部分:未来。。。我必须尝试和解决的口味,以及如何设置它们,因为我最终想部署一个免费和付费版本的相同的代码基础。我也将开始用我自己的密钥对调试版本进行签名。可以从命令行获取任何现有的Android Studio gradle项目并构建/签名,而无需编辑任何文件。这非常适合将项目存储在版本控制中,同时将密钥和密码分开,而不是存储在build.gradle文件中:
./gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD
如果您使用的是不同的gradle构建版本,而不是在其中开发密钥库文件,那么此时可能会影响 我在项目中也遇到了这个问题,我做了以下更改: 设置类路径 来自classpath'com.android.tools.build:gradle:2.2.0-alpha3' 到
classpath'com.android.tools.build:gradle:2.1.2'嗨,也许你可以查看这个链接:希望它能帮助你!zipalign不是核心问题,但这个链接告诉我如何实现自动化。谢谢你。现在剩下的问题是得到一个apk,它没有调试功能,并且已经签名,这样我就可以在上面运行zipalign了。你不需要安装Gradle 1.9。大多数项目使用Gradle包装器,该包装器根据您在包装器属性中设置的分发URL自动下载正确版本的Gradle。@Scott Android studio下载了Gradle 1.9文件,但未正确配置其使用。我删除了整个安装并从头开始重新安装。我现在正在阅读用户指南“当附带的部署不起作用时,从头开始”。。。据我所知,默认情况下生成的唯一构建是使用调试密钥签名的调试构建,这完全没有意义,因为它们只能用于在您自己的设备上进行调试。使用Build->Generate signed APK可以帮助您设置不同的签名,但它会生成一个(可能)已签名的APK,其中包含大量调试信息,这也是无用的。这意味着剩余的核心问题是在不进行调试的情况下设置生成配置。您正在对调试生成进行签名,而不是对发布生成进行签名。我更新了我的答案。问题是没有发布版本选项可供选择。缺少该配置。最后,我发布了我的答案,并加入了我的整个build.gradle,以便其他新手可以看到完整的配置,而不是大多数线程中没有上下文的几个片段。