2014-01-02 2 views
3

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

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

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

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

Редактировать: Я должен упомянуть, что я на окнах. Большинство всего, на что я смотрел, основано на Linux и сложно отделять пути Linux от конфигурационных путей.

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

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

+0

Привет, может быть, вы можете проверить эту ссылку из: http://stackoverflow.com/questions/17604448/gradle-zipalign- та sk-not-working Надеюсь, что может вам помочь! – k3v1n4ud3

+0

zipalign не является основной проблемой, но эта ссылка рассказывает мне, как ее автоматизировать. Спасибо за это. Теперь оставшаяся проблема - получить apk, который не имеет отладки в нем, и также был подписан, чтобы я мог запускать zipalign на нем. – m12lrpv

+0

Вам не нужно устанавливать Gradle 1.9. В большинстве проектов используется оболочка Gradle, которая автоматически загружает правильную версию Gradle на основе URL-адреса распространения, установленного в свойствах оболочки. –

ответ

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 
16

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

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

./gradlew assembleRelease 

на Linux или Mac, или на Windows:

gradlew.bat assembleRelease 

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

IDE window showing Build Variants view

строительство APK, и подписать его с помощью мастера.

+0

Теперь я работаю над этим руководством пользователя «Когда отправленное развертывание не работает, начните с нуля» ... Из того, что я понял, единственные сборки, созданные по умолчанию, - это отладочные сборки, подписанные с помощью отладочного ключа, который совершенно бессмысленно, потому что они не могут использоваться ни для чего, кроме отладки на вашем собственном устройстве. Использование Build-> Generate signed APK помогает вам настроить другое подписание, но оно генерирует (возможно) подписанный APK полный отладочной информации, что также бесполезно. Это означает, что основной проблемой остается настройка конфигурации сборки без отладки. – m12lrpv

+0

Вы подписываете сборку отладки, а не сборку выпуска. Я обновил свой ответ. –

+0

Проблема заключалась в том, что не было выбора варианта сборки для выбора. Эта конфигурация отсутствовала. SO наконец позволяет мне опубликовать мой ответ, и я включил весь файл build.gradle, чтобы другие новички могли видеть полную конфигурацию, а не только несколько фрагментов без контекста, который присутствует в большинстве потоков. – m12lrpv

5

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

Часть 3: Этот поток помог мне настроить исходные папки и понять ароматы. Folder naming convention for gradle build variants

Часть 4: Только с одним AndroidManifest.xml Я не мог использовать суффиксы в именах пакетов. С суффиксами он был отклонен при загрузке на устройство. Это становится проблемой, когда почти каждый пример build.gradle включает суффиксы.

Часть 5: Используйте View-> Tool Windows-> BuildVariants, чтобы вывести варианты сборки. Второй столбец на самом деле является ниспадающим. Выберите то, что вы хотите построить здесь, иначе он будет продолжать строить отладочную версию. (Почему на земле это не под меню сборки, или конфигурации запуска/отладки являются загадкой ???)

Часть 6: Будущее ... Я должен попробовать и выработать ароматы и как их настроить так как в конечном итоге мне захочется развернуть бесплатную и платную версию с той же базы кода. Я начну подписывать отладочные версии и своим собственным ключом.

0

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

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

набор путь к классам

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

в

классам 'com.android.tools.build:gradle:2.1.2'

Смежные вопросы