2013-07-11 9 views
14

ऐसा प्रतीत होता है कि ग्रैडल ज़िप एलाइन कार्य मेरे लिए काम नहीं कर रहा है, यह सुनिश्चित नहीं है कि मैं क्या गलत कर रहा हूं। मैंने zipAlign कार्य सहित कोशिश की है, और इसमें शामिल नहीं है, लेकिन ऐसा कोई फर्क नहीं पड़ता है। मेरी ग्रेडल स्क्रिप्ट्स "रिहाई" निर्माण को थूकती हैं, लेकिन जब मैं अपना .apk अपलोड करने का प्रयास करता हूं तो डेवलपर कंसोल के अनुसार यह कभी भी ज़िप नहीं होता है।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

आपकी रिलीज बिल्ड प्रकार को हस्ताक्षर करने के लिए कॉन्फ़िगर नहीं किया गया है।

यदि आप मैन्युअल रूप से अपना एपीके साइन कर रहे हैं, तो आपको मैन्युअल रूप से ज़िप्लाइन को भी चलाने की आवश्यकता है। हस्ताक्षर के बाद ZipAlign होना चाहिए।

ग्रैडल केवल एक एपीके को ज़िपित करेगा यदि यह भी हस्ताक्षर कर सकता है।

रिलीज कॉन्फ़िगरेशन के लिए साइन अप करने के लिए, आपको पहले एक नई हस्ताक्षर कॉन्फ़िगरेशन बनाने की आवश्यकता होगी, फिर इसे बिल्ड प्रकार पर असाइन करें।

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

    buildTypes { 
    release { 
     signingConfig signingConfigs.release 
    } 
    } 
} 

ध्यान दें कि हस्ताक्षर करने config में सभी 4 पैरामीटर आवश्यक हैं, अन्यथा यह विचार करेंगे कुछ मान गुम हैं और यह और भी हस्ताक्षर करने के लिए प्रयास नहीं करेंगे।

+0

धन्यवाद Xav। स्वचालित रूप से साइन इन करने के लिए मैं अपने रिलीज बिल्ड को कैसे कॉन्फ़िगर कर सकता हूं? क्या मुझे बस अपना रिलीज कीस्टोर बनाना है और इसे कॉन्फिग पर हस्ताक्षर करने के तहत सेट करना है? –

+0

इस जानकारी को जोड़ने के लिए संपादित किया गया। –

+2

क्या निर्माण के दौरान उन मूल्यों के लिए ग्रेडल प्रॉम्प्ट होना संभव है? मैं वास्तव में पासवर्ड को सादे पाठ के रूप में संग्रहित नहीं करना चाहता हूं। –

3

किसी भी मौजूदा एंड्रॉइड स्टूडियो ग्रेडल प्रोजेक्ट को लेना संभव है और किसी भी फाइल को संपादित किए बिना कमांड लाइन से इसे साइन/साइन करना संभव है। यह आपकी प्रोजेक्ट को पासवर्ड नियंत्रण में संग्रहीत करने के लिए बहुत अच्छा बनाता है, जबकि आपकी चाबियाँ और पासवर्ड अलग-अलग होते हैं और आपके 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 
संबंधित मुद्दे