मुझे ऐसा करने का एक नाजुक तरीका मिल सकता है, जो शायद किसी भी तरह से बेहतर नहीं है। कॉपी करके अपने मॉड्यूल के build.gradle फ़ाइल के नीचे करने के लिए निम्न पेस्ट, अपने Android SDK स्थापना का पथ और BUILD_TOOLS_VERSION
अपने android
ब्लॉक के buildToolsVersion
कल्पना में निर्दिष्ट एक ही संस्करण के साथ साथ ANDROID_HOME
की जगह:
buildscript {
dependencies {
classpath files("/Users/sbarta/sdk/build-tools/21.0.2/lib/dx.jar")
}
}
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
variant.assemble.doLast {
// Show the dex count after the assemble task is finished
showDexCount(
[filename: output.outputFile],
)
}
}
}
def showDexCount(Map... files) {
def maxReferences = (int) Math.pow(2, 16);
def buffer = 5000 // that's for safety, because you can't burn maxReferences
println "\n\n***********************************************************************************"
println "* DEX COUNTS *"
println "***********************************************************************************"
files.each {
def dex = new com.android.dex.Dex(it.filename)
def count = dex.tableOfContents.methodIds.size
if ((maxReferences - count - buffer) >= 0)
println String.format('* %1$5d (there are still %2$5d references to burn...) *',
count, maxReferences - count - buffer)
else
println String.format('* %1$5d !!!WARNING!!! Too many references, please decrease by %2$4d! *',
count, -(maxReferences - count - buffer))
}
println "***********************************************************************************\n"
}
यह डीईएक्स फाइलों का मूल्यांकन करने के लिए डीईएक्स कोड को लोड करता है और विधियों की संख्या गिनता है; यह बिल्ड स्क्रिप्ट में assemble
कार्य के अंत में अपना काम जोड़ता है, इसलिए आप इसे कमांड लाइन बिल्ड में देखेंगे या यदि आप इसे वास्तव में एंड्रॉइड स्टूडियो से चलाते हैं (जहां यह ग्रैडल कंसोल में दिखाई देगा)।
मैंने इसे अधिक लचीला बनाने और पथ को हार्डकोड करने की आवश्यकता के बजाय एंड्रॉइड_एचओएमई पर्यावरण चर का उपयोग करने की कोशिश की, लेकिन एंड्रॉइड स्टूडियो से निर्माण करते समय पर्यावरण चर का उपयोग करना समस्याग्रस्त है (हालांकि यह कमांड लाइन से काम करता है)। इसी तरह, मैंने निर्माण स्क्रिप्ट में दूसरी जगह से बिल्ड टूल्स संस्करण को खींचने की कोशिश की जहां इसे संदर्भित किया जा रहा है, और मैंने वैश्विक स्थिरता को परिभाषित करने का भी प्रयास किया, लेकिन निष्पादन कार्य को स्कॉइंग और ऑर्डर नहीं कर सका। अगर कोई इस पर सुधार कर सकता है, तो कृपया उत्तर टिप्पणी या संपादित करें।
यह कार्लोस सोब्रिंहो द्वारा लिखित कुछ चीज़ों से अनुकूलित है; मुझे मूल के लिए वेब-सुलभ संदर्भ नहीं मिल रहा है। https://github.com/mihaip/dex-method-counts
यह आप इस तरह सरल डेटा दिखाएगा:
1) कि तरीकों में गिना जाता है और विभिन्न संकुल में तरीकों की राशि से पता चलता सरल उपकरण:
स्रोत
2015-01-05 18:31:05
आप अपने प्रोजेक्ट में एंड्रॉइड स्टूडियो प्लगइन में प्रयुक्त प्रत्येक निर्भरता की विधि गणना की जांच कर सकते हैं, कृपया उत्तर दें http://stackoverflow.com/questions/30648172/gradle-library-duplicates-in-dependencies/36056607#36056607 – darwin
अच्छी तरह से निर्भरता की विधि को समझने का कोई तरीका है? – CoDe