बहुत से लोग -keep class com.myapp.customcomponents.** { *; }
एक रास्ते को संसाधित करने से बाहर करने के तरीके के रूप में सुझाते हैं। यहाँ देखें:
- पैकेज को प्रोगार्ड से बाहर करें
- पैकेज को पूरी तरह से अनदेखा करें
- एक निर्देशिका को पहरेदारी से रोकें
इस समाधान के साथ समस्या यह है कि अभी भी कुछ स्तर की गड़बड़ी हो रही है, जो आपके कोड को तोड़ सकती है। आप मैपिंग प्रिंट आउट में मैपिंग देख सकते हैं:
java.lang.String toString() -> toString
int getMemoizedSerializedSize() -> getMemoizedSerializedSize
void setMemoizedSerializedSize(int) -> setMemoizedSerializedSize
int getSerializedSize() -> getSerializedSize
boolean equals(java.lang.Object) -> equals
int hashCode() -> hashCode
समाधान मैंने चुना है एक दो कदम प्रक्रिया है। सबसे पहले, injars
पैकेज पथ का चयन करने के लिए एक फिल्टर के साथ उपयोग करना चाहूंगा। पुस्तकालयों के रूप में अन्य पैकेज पथों को जोड़ना संभव है।
-injars artifacts/in.jar(org/toprocess/**.class)
-outjars out/processed.jar
-libraryjars artifacts/in.jar(org/skipped/**.class)
-libraryjars artifacts/in.jar(org/moreskipped/**.class)
दूसरा, संसाधित जार को मूल जार के साथ मिलाएं, लेकिन केवल उन रास्तों को छोड़ दिया गया था जिन्हें छोड़ दिया गया था।
-injars out/processed.jar
-injars artifacts/in.jar(org/skipped/**.class)
-injars artifacts/in.jar(org/moreskipped/**.class)
-outjars out/merged.jar
-dontshrink
-dontoptimize
-dontobfuscate
परिणाम एक मर्ज किया गया जार है जो संसाधित पैकेज पथ और स्किप किए गए पथ का संयोजन है। यह अभ्यास अमान्य है, यदि कोई व्यक्ति कुछ रास्तों के प्रसंस्करण को पूरी तरह से छोड़ने का एक तरीका प्रदान कर सकता है (जो मुझे नहीं मिला है)।