2013-07-11 101 views
14

它似乎Gradle zipAlign任務不適合我,不知道我做錯了什麼。我試過包括zipAlign任務,並沒有包括它,但似乎沒有什麼區別。我的gradle腳本吐出了一個「發佈」版本,但是當我嘗試上傳我的.apk文件時,根據開發人員控制檯從來沒有zipAligned。Gradle zipAlign任務不工作?

這裏是我的構建腳本:

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

任何幫助表示讚賞!

回答

28

您的發佈版本類型未配置爲簽名。

如果您手動簽名您的apk,您也需要手動運行ZipAlign。 ZipAlign在簽名後必須發生

Gradle將zipalign一個apk只有它也可以簽名。

要設置發佈配置的簽名,您需要先創建一個新的簽名配置,然後將其分配給構建類型。

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

    buildTypes { 
    release { 
     signingConfig signingConfigs.release 
    } 
    } 
} 

請注意,簽名配置中的所有4個參數都是必需的,否則會考慮一些值丟失,甚至不會嘗試簽名。

+0

感謝XAV。如何配置我的發佈版本以自動簽名?我只需要創建我的發佈密鑰庫並將其設置在signingConfigs下? –

+0

編輯添加此信息。 –

+2

構建期間是否可以使用gradle提示這些值?我真的不希望將密碼存儲爲純文本。 –

3

可以使用任何現有的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