繁体   English   中英

使用Android Studio如何获得已签名,非调试和zip对齐的APK?

[英]Using Android Studio how do I get a signed, non-debug and zip aligned APK?

使用Android Studio如何获得已签名,非调试和zip对齐的APK?

到目前为止,我可以得到一个签名但它被拒绝,因为它已经调试。

我可以得到一个非调试版本的apk但它被拒绝,因为它不是拉链对齐。

我可以拉链对齐但是我无法上传它,因为那个没有签名。

编辑:我应该提到我在Windows上。 我所看到的大部分内容都是基于Linux的,很难将linux路径与配置路径分开。

编辑2:目前情况暂停。 我更新了Android Studio并杀死了所有内容,因为它带有gradle 1.9 dependancies,但没有正确安装gradle 1.9。 所以我想我会用gradle 1.9下载完整的安装程序,但是下载链接给了我开始的版本。 我知道。 我应该知道更新比更新,但考虑到我认为它可能实际上包含修复的问题。

编辑3:问题解决了。 我有一个完整的答案打印准备发布但是我不会让我发布到明天。

所有构建都是签名的,甚至是调试版(使用调试密钥签名)。 只需将其设置为使用正确的密钥签署发布版本即可。 您可以通过“项目结构”对话框设置签名配置,也可以按照“ Gradle插件用户指南”中的说明手动编辑build.gradle文件。

设置构建文件后,您可以使用命令从命令行生成发布APK

./gradlew assembleRelease

在Linux或Mac或Windows上:

gradlew.bat assembleRelease

或者在GUI中,您可以通过从Build Variants视图中选择它来生成发布版本:

IDE窗口显示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部分:这个线程帮助我设置源文件夹并理解风格。 gradle构建变体的文件夹命名约定

第4部分:只有一个AndroidManifest.xml我无法在包名上使用后缀。 使用后缀时,上传到设备时会被拒绝。 当build.gradle的每个例子都包含后缀时,这就成了一个问题。

第5部分:使用View-> Tool Windows-> BuildVariants来调出构建变体。 第二列实际上是一个下拉列表。 选择你想要在这里构建的内容,否则它将继续构建调试版本。 (为什么它不在构建菜单下或运行/调试配置是一个谜?)

第6部分:未来......我必须尝试解决这些问题以及如何设置它们,因为我最终希望在相同的代码库中部署免费和付费版本。 我将开始使用自己的密钥签署调试版本。

可以使用任何现有的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

来自classpath'com.android.tools.build:grad:2.2.0-alpha3'

classpath'com.android.tools.build:grad:2.1.2'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM