簡體   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