Задача Gradle zipAlign не работает?

Похоже, у меня не работает задача Gradle zipAlign, не знаю, что я делаю неправильно. Я пробовал включать задачу zipAlign и не включать ее, но, похоже, это не имеет значения. Мои сценарии Gradle выдают «выпускную» сборку, но она никогда не zipAligned в соответствии с консолью разработчика, когда я пытаюсь загрузить свой .apk.

Вот мой скрипт сборки:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }
}

apply plugin: 'android'

dependencies {
    compile project(':facebook-android-sdk-3.0.1:facebook')
    compile project(':google-play-services_lib')
    compile project(':nineoldandroids')
    compile project(':SlidingMenu-master:library')
    compile project(':ViewPagerIndicator')
    compile project(':volley')
    compile project(':windowed-seek-bar')
    compile files('compile-libs/androidannotations-2.7.1.jar', 'libs/Flurry_3.2.1.jar', 'libs/google-play-services.jar', 'libs/gson-2.2.4.jar', 'libs/picasso-1.1.1.jar', 'libs/crittercism_v3_0_11_sdkonly.jar', 'libs/gcm.jar', 'libs/apphance-library.jar')
}

android {
    buildToolsVersion "17.0"
    compileSdkVersion 17

    signingConfigs {
        debug {
            storeFile file('keystores/debug.keystore')
        }
    }

    buildTypes {
        debug {
            sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
            }
        }

        release {
            zipAlign true
            sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
            }
        }
    }
}

Любая помощь приветствуется!


person Karim Varela    schedule 11.07.2013    source источник


Ответы (2)


Ваш тип сборки выпуска не настроен для подписи.

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

Gradle заархивирует apk, только если он также может подписать.

Чтобы настроить подпись для конфигурации выпуска, вам нужно сначала создать новую конфигурацию подписи, а затем назначить ее типу сборки.

android {
  signingConfigs {
    release {
      storeFile file("/path/to/keystore")
      storePassword "??"
      keyAlias "??"
      keyPassword "??"
    }
  }

  buildTypes {
    release {
      signingConfig signingConfigs.release
    }
  }
}

Обратите внимание, что все 4 параметра в конфигурации подписи являются обязательными, в противном случае он будет считать, что некоторые значения отсутствуют, и даже не попытается подписать.

person Xavier Ducrohet    schedule 12.07.2013
comment
Спасибо, Ксав. Как мне настроить сборку выпуска для автоматической подписи? Мне просто нужно создать хранилище ключей выпуска и установить его в signingConfigs? - person Karim Varela; 12.07.2013
comment
Возможно ли иметь подсказку для этих значений во время сборки? Я действительно не хочу, чтобы пароли хранились в виде обычного текста. - person Mike G; 04.01.2015
comment
@MikeG, вы можете установить эти параметры как глобальные переменные, чтобы вы могли сохранить простую ссылку в исходном коде, и gradle автоматически возьмет их из вашей глобальной установки gradle (без запроса и без обмена одновременно)! - person andrea.rinaldi; 28.05.2015
comment
@MikeG - здесь обсуждаются некоторые способы скрыть пароль от vcs: stackoverflow.com/questions/19487576/ - person J.G.Sebring; 04.09.2015
comment
@MikeG, очевидно, должна быть возможность прочитать учетные данные с консоли (developer.android .com/tools/publishing/app-signing.html) - person Draško Kokić; 06.10.2015
comment
@XavierDucrohet Интересно, почему при подписании вашего приложения в Android Studio отсутствует шаг zipAlign ?! - person Draško Kokić; 06.10.2015

Можно взять любой существующий проект градиента 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