Используя Android Studio, как получить подписанный, не отлаживаемый и выровненный по zip APK?

Используя Android Studio, как получить подписанный, не отлаживаемый и выровненный по zip APK?

Пока я могу получить подписанный, но он отклонен, потому что в нем есть отладка.

Я могу получить apk без отладки, но он будет отклонен, потому что он не выровнен по zip.

Я могу заархивировать его, но потом не могу загрузить, потому что он не подписан.

Изменить: я должен упомянуть, что я нахожусь в Windows. Почти все, на что я смотрел, основано на Linux, и его трудно отделить от путей к конфигурации.

Edit2: На данный момент все приостановлено. Я обновил Android Studio, и это убило все, потому что оно поставляется с зависимостями Gradle 1.9, но не устанавливает Gradle 1.9 должным образом. Поэтому я подумал, что скачаю полный установщик с gradle 1.9, но ссылка для скачивания дает мне версию, с которой я начал. Я знаю. Я должен был знать лучше, чем обновлять, но, учитывая проблемы, я подумал, что это действительно может содержать исправление.

Редактировать 3: Проблема решена. У меня есть полный ответ, готовый к публикации, но SO не позволит мне опубликовать его до завтра.


person m12lrpv    schedule 02.01.2014    source источник
comment
Привет, может быть, вы можете проверить эту ссылку: stackoverflow.com /questions/17604448/ Надеюсь, это поможет вам!   -  person k3v1n4ud3    schedule 02.01.2014
comment
zipalign не является основной проблемой, но эта ссылка говорит мне, как ее автоматизировать. Спасибо за это. Теперь оставшаяся проблема заключается в том, чтобы получить apk, в котором нет отладки, а также он был подписан, чтобы я мог запустить на нем zipalign.   -  person m12lrpv    schedule 02.01.2014
comment
Вам не нужно устанавливать Gradle 1.9. Большинство проектов используют оболочку Gradle, которая автоматически загружает нужную версию Gradle на основе URL-адреса распространения, который вы задали в свойствах оболочки.   -  person Scott Barta    schedule 02.01.2014
comment
Студия @Scott Android загрузила файлы Gradle 1.9, но не настроила их использование должным образом. Я стер всю установку и переустановил с нуля.   -  person m12lrpv    schedule 02.01.2014


Ответы (4)


Можно взять любой существующий проект градиента Android Studio и создать/подписать его из командной строки без редактирования каких-либо файлов. Это очень удобно для хранения вашего проекта в системе контроля версий, сохраняя ваши ключи и пароли отдельно, а не в вашем файле 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
person Wayne Piekarski    schedule 11.08.2014

Все сборки подписаны, даже отладочные (которые подписаны ключом отладки). Это просто вопрос настройки, чтобы подписывать ваши выпуски с правильным ключом. Вы можете настроить конфигурацию подписи в диалоговом окне «Структура проекта» или отредактировать файл build.gradle вручную, следуя инструкциям в Руководство пользователя плагина Gradle

После того, как ваш файл сборки настроен, вы можете сгенерировать релизный APK из командной строки с помощью команды

./gradlew assembleRelease

в Linux или Mac или в Windows:

gradlew.bat assembleRelease

или в графическом интерфейсе вы можете создать сборку выпуска, выбрав ее в представлении «Варианты сборки»:

окно IDE с представлением вариантов сборки

создание APK и подписание его с помощью мастера.

person Scott Barta    schedule 02.01.2014
comment
Сейчас я работаю над этим руководством пользователя. Когда поставленное развертывание не работает, начните с нуля... Из того, что я понял, единственные сборки, сгенерированные по умолчанию, - это отладочные сборки, подписанные ключом отладки, что совершенно бессмысленно, потому что их нельзя использовать ни для чего, кроме отладки на вашем собственном устройстве. Использование Build->Generate signed APK поможет вам настроить другую подпись, но создаст (возможно) подписанный APK, полный отладочной информации, которая также бесполезна. Это означает, что основной оставшейся проблемой является настройка конфигурации сборки без отладки. - person m12lrpv; 02.01.2014
comment
Вы подписываете сборку отладки, а не сборку выпуска. Я обновил свой ответ. - person Scott Barta; 02.01.2014
comment
Проблема заключалась в том, что не было возможности выбрать вариант сборки выпуска. Эта конфигурация отсутствовала. SO, наконец, позволяет мне опубликовать свой ответ, и я включил весь свой build.gradle, чтобы другие новички могли видеть полную конфигурацию, а не несколько фрагментов без контекста, которые есть в большинстве потоков. - person m12lrpv; 03.01.2014

Я решил проблему. Часть 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: Будущее... Я должен попытаться разработать разновидности и способы их настройки, так как в конечном итоге я хотел бы развернуть бесплатную и платную версии с одной и той же кодовой базой. Я также начну подписывать отладочные версии своим ключом.

person m12lrpv    schedule 02.01.2014

Если вы используете другую версию сборки Gradle, а не ту, в которой вы разработали файл хранилища ключей, в то время это может повлиять.

Я также столкнулся с этой проблемой в своем проекте, я делаю следующие изменения:

установить путь к классам

из пути к классам 'com.android.tools.build:gradle:2.2.0-alpha3'

to

путь к классам 'com.android.tools.build: gradle: 2.1.2'

person Neel Mevada    schedule 09.07.2016