2013-08-26 8 views
5

इतिहास/प्रसंग मैं एक परियोजना [1] जहां आकार वास्तव में मायने रखती है - हाल ही में मैं सामान एक साझा lib [2] में ले जाया गया और सोचा कि ProGuard देखभाल और अप्रयुक्त वर्गों को हटा देगा क्योंकि मेरे पास एक कॉन्फ़िगर था जो आकार को बहुत कम कर रहा था लेकिन lib का उपयोग करके मैं जादू 100kb निशान पर आया था इसलिए मैंने जांच की: कक्षाएं जिन्हें मैं निश्चित रूप से उपयोग नहीं करता हूं परिणामस्वरूप डीएक्स फ़ाइल में हैं - और यहां तक ​​कि पूर्ण नाम के साथ (छोटा नहीं एकल-चार तक) - उदाहरण के लिए मैं डीईएक्स में स्क्वायरव्यू देखता हूं जिसे मैं ऐप में उपयोग नहीं करता हूं।Android के लिए ProGuard साथ अप्रयुक्त वर्गों को दूर

हैरानी की बात है मैं ProGuard दस्तावेज़ों में भी पाए निम्नलिखित प्रश्न:

The library jars themselves always remain unchanged. 

मैं किसी भी तरह बता सकते हैं/चाल ProGuard (में) उन्हें कार्रवाई करने के लिए? मैं यह वास्तव में अजीब विशेष रूप से, क्योंकि मैं अधिक सामग्री ऐप अपने आप में से lib में हटाने योग्य होने की उम्मीद लगता है ..

[1] https://github.com/ligi/FAST [2] https://github.com/ligi/AndroidHelper

उत्तर

8

The Eclipse/चींटी/Gradle Android SDK में प्रक्रियाओं का निर्माण स्वचालित रूप से विकल्प -injars साथ (bin/classes से) अपने कोड और (libs से) अपने पुस्तकालयों निर्दिष्ट करें। इसका मतलब है कि पूरा एप्लिकेशन कॉम्पैक्ट, अनुकूलित, और obfuscated (रिलीज बिल्ड में, ProGuard सक्षम है माना जाता है)।

निर्माण प्रक्रिया केवल -libraryjars विकल्प के साथ एंड्रॉइड रनटाइम android.jar निर्दिष्ट करती है। कोड को संसाधित करना आवश्यक है, लेकिन इसे संसाधित एपीके में समाप्त नहीं होना चाहिए, क्योंकि यह डिवाइस पर पहले से मौजूद है।

तो यह सब स्वचालित रूप से कार्य करना चाहिए। यदि आप कॉन्फ़िगरेशन proguard-project.txt में -keep class org.mylibrary.** { *; } जैसी लाइनें हैं, तो आप अभी भी संसाधित एपीक्स में अपने मूल नामों के साथ संपूर्ण पुस्तकालयों को देख सकते हैं। इस तरह की विन्यास आम तौर पर प्रतिबिंब के लिए खाते का एक रूढ़िवादी समाधान है। कुछ शोध और प्रयोग के साथ, आप अक्सर कॉन्फ़िगरेशन को परिष्कृत कर सकते हैं और बेहतर परिणाम प्राप्त कर सकते हैं। आप यह पता लगा सकते हैं कि -whyareyoukeeping विकल्प के साथ कक्षाओं को क्यों रखा जा रहा है।

3

मेरा मानना ​​है कि आप -injars उपयोग करने के लिए:

-injars class_path संसाधित होने के लिए इनपुट जार (या युद्ध, कान, ज़िप या निर्देशिका) निर्दिष्ट करता है। इन जारों में कक्षा फाइलें संसाधित और आउटपुट जार में लिखी जाएंगी। डिफ़ॉल्ट रूप से, किसी भी गैर-वर्ग फ़ाइलों को बिना परिवर्तन किए कॉपी किया जाएगा। किसी भी अस्थायी फ़ाइलों (उदा। आईडीई द्वारा निर्मित) के बारे में जागरूक रहें, खासकर यदि आप निर्देशिका से सीधे फ़ाइलों को पढ़ रहे हैं। फ़िल्टर अनुभाग में समझाया गया है, वर्ग पथ में प्रविष्टियां फ़िल्टर की जा सकती हैं। बेहतर पठनीयता के लिए, कक्षा पथ प्रविष्टियों को एकाधिक -ंजार विकल्पों का उपयोग करके निर्दिष्ट किया जा सकता है।

स्रोत:http://proguard.sourceforge.net/index.html#manual/usage.html

+0

धन्यवाद - यह सही लगता है - यही कारण है कि मैं स्वीकार करता हूं - अभी तक परीक्षण नहीं कर सका, क्योंकि अब मैं यहां फंस गया हूं http://stackoverflow.com/questions/18460982/how-to-specify-injars-for-proguard-within -android-Gradle-निर्माण फ़ाइलें-librari के लिए – ligi

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