2013-07-11 4 views
14

Sembra che l'operazione Gradle zipAlign non funzioni per me, non so cosa sto facendo male. Ho provato a includere l'operazione zipAlign e non includerla, ma non sembra fare la differenza. I miei script gradle sputano una build di "rilascio", ma non è mai zipAligned secondo la console degli sviluppatori quando provo a caricare il mio .apk.Gradle zipAlign operazione non funzionante?

Ecco il mio script di build:

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'] 
       } 
      } 
     } 
    } 
} 

Qualsiasi aiuto apprezzato!

risposta

28

Il tipo di build di rilascio non è configurato per la firma.

Se si firma manualmente l'apk, è necessario eseguire anche manualmente ZipAlign. ZipAlign deve avvenire dopo la firma.

Gradle eseguirà un apk zip solo se è possibile firmare.

Per impostare la firma per la configurazione di rilascio, è necessario prima creare una nuova configurazione di firma, quindi assegnarla al tipo di build.

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

    buildTypes { 
    release { 
     signingConfig signingConfigs.release 
    } 
    } 
} 

Si noti che sono necessari tutti e 4 i parametri nella configurazione firma, altrimenti sarà in considerazione alcuni valori sono mancanti e non sarà nemmeno tentare di firmare.

+0

Grazie Xav. Come configuro il mio rilascio build per firmare automaticamente? Devo solo creare il mio keystore di rilascio e impostarlo su SigningConfigs? –

+0

Modificato per aggiungere queste informazioni. –

+2

È possibile avere gradle prompt per quei valori durante la compilazione? Io davvero non voglio avere le password memorizzate come testo normale. –

3

È possibile prendere qualsiasi progetto gradle di Android Studio esistente e creare/firmarlo dalla riga di comando senza modificare alcun file. Questo lo rende molto piacevole per immagazzinare il progetto in controllo di versione, mantenendo le chiavi e password diverse e non nel file 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