2015-01-15 3 views
16

मैं "abi" द्वारा "विभाजन" का उपयोग करना चाहता हूं, लेकिन केवल रिलीज निर्माण के लिए। क्या यह संभव है? मैं "चर" द्वारा एक्सटी वैरिएबल और वैरिएबल का उपयोग करने का प्रयास करता हूं जो डिफ़ॉल्ट रूप से गलत पर सेट होता है। यह चर रिलीजविथलॉग (और रिलीज) के लिए buildTypes में सत्य पर सेट है।एंड्रॉइड ग्रैडल - केवल रिलीज के लिए स्प्लिट का उपयोग संभव है?

लेकिन मुझे नहीं पता कि कैसे ग्रैडल काम करता है, क्योंकि जब मैं "डीबग", "रिलीज विथलॉग" और "रिलीज" और रन बिल्ड करने के लिए testeln() को जोड़ता हूं, तो सभी संदेश आउटपुट में होते हैं, इसलिए यह मुझे पुष्टि करता है वह वैरिएबल "splitsEnabled" सत्य पर सेट है हालांकि मैं डीबग के लिए निर्माण करता हूं - और मुझे डीबग के लिए "झूठी" मान की उम्मीद है (और इसलिए डीबग के लिए विभाजन का उपयोग नहीं करना)। एंड्रॉयड स्टूडियो में एक Gradle कार्य के लिए क्षेत्र:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 19 
    buildToolsVersion '20.0.0' 
    ext { 
     splitsEnabled = false 
    } 
    defaultConfig { 
    ... 
    } 
    buildTypes { 
     debug { 
      ... 
     } 
     releaseWithLog { 
      ... 
      splitsEnabled = true 
     } 
     release.initWith(releaseWithLog) 
     release { 
      ... 
     } 
    } 
    ... 
    splits { 
     abi { 
      println(splitsEnabled) 
      enable splitsEnabled 
      reset() 
      include 'x86', 'armeabi-v7a', 'armeabi' 
      exclude 'x86_64', 'mips64', 'arm64-v8a', 'mips' 
      universalApk true 
     } 
    } 
    ... 
+0

के बाद से 'splits' की एक सहकर्मी है' buildTypes', मुझे लगता है कि विभाजन प्रति-प्रकार के आधार पर नहीं किया जा सकता, लेकिन मैं गलत साबित किया जा करने में प्रसन्नता होगी। लेकिन कृपया ध्यान रखें कि 'बिल्ड सक्षम करें सक्षम' एक प्रकार का चयन करने से पहले अच्छी तरह से चलाया जाता है। 'Build.gradle' में बयान ज्यादातर ऑब्जेक्ट मॉडल बना रहे हैं। यह एक व्याख्या की गई स्क्रिप्ट नहीं है। ऑब्जेक्ट मॉडल के निर्माण के बाद ही ग्रैडल यह पता लगाना शुरू कर देता है कि कार्य (ओं) को चलाने के लिए किस प्रकार के निर्माण की आवश्यकता है। – CommonsWare

+0

मुझे भी रूचि है - बिल्ड समय बचाने के लिए और डीबग –

+0

में सिर्फ एक विभाजन का निर्माण करना अच्छा लगेगा, मैं इस मुद्दे को हल करने के लिए एबीआई बनाने के पुराने तरीके पर वापस लौट आया! https://twitter.com/silentnuke/status/619501266646003713 –

उत्तर

5

आप Gradle करने के लिए एक कमांड लाइन तर्क, या "स्क्रिप्ट पैरामीटर" के साथ आसानी से इस का समाधान कर सकते हैं। मैं -पी इस्तेमाल किया 'dbgBld' प्रतीक को परिभाषित करने और इसका इस्तेमाल डिबग, बनाता है के लिए उदाहरण के लिए:

gradle -PdbgBld installDebug 

मेरे build.gradle फ़ाइल निम्न विभाजन आदेश दिया है:

splits { 
    abi { 
     enable !project.hasProperty('dbgBld') 
     reset() 
     include 'armeabi', 'armeabi-v7a', 'x86', 'mips' 
     universalApk true 
    } 
} 

अब रिहाई मैं उपयोग के निर्माण के लिए :

gradle assembleRelease 

'dbgBld' प्रतीक परिभाषित नहीं है, तो विभाजन सक्षम क्षेत्र सच करने के लिए हल करता है और मैं 5 APK फ़ाइलों को मिलता है। डिबगिंग के लिए निर्माण करते समय, -PdbgBld पहले से ही मेरे एंड्रॉइड स्टूडियो कॉन्फ़िगरेशन में सहेजा गया है और मुझे डिबगिंग के लिए केवल एक "वसा" एपीके मिलता है, जिसके परिणामस्वरूप बहुत तेज डीबग बिल्ड होता है।

ग्रेग

+0

यह वास्तव में उपयोगी – speedynomads

+0

मिला है क्या एंड्रॉइड स्टूडियो रन/डीबग लॉन्च कॉन्फ़िगरेशन में इसे सेट करने का कोई तरीका है? – romulof

+0

@ ओआरबी मैं देखता हूं कि अब मेरा एंड्रॉइड स्टूडियो रन/डीबग लॉन्च कॉन्फ़िगरेशन "ग्रेड-जागरूक मेक" कमांड निष्पादित करता है। मुझे नहीं पता कि इस के लिए किसी भी विकल्प को संपादित करना है, लेकिन वास्तविक रिलीज बिल्ड बनाने के लिए, आपको अभी भी 'ग्रेबल इकट्ठा रिलीज' निष्पादित करने की आवश्यकता है। मैं बस स्थिति को उलट दूंगा और रिलीज की तरह कुछ परिभाषित करता हूं, धीरे-धीरे 'gradle -PreleaseBld इकट्ठा करें' और तदनुसार build.gradle को संशोधित करें। – gregko

संबंधित मुद्दे