2011-06-08 29 views
13

मेरे एंड्रॉइड प्रोजेक्ट में, मेरे पास कुछ छवियों को res/drawable/में संग्रहीत किया गया है/जिन्हें केवल वेबव्यू में लोड की गई HTML फ़ाइल से एक्सेस किया गया है। उदाहरण के लिए (HTML में कोड):विशिष्ट ड्रॉबल्स को हटाने के लिए प्रोगार्ड को रोकें

<img src="file:///android_res/drawable/myfriend.png"> 

इन छवियों को ऑप्टिमाइज़ करने के दौरान apk से Proguard द्वारा हटा दिया जाता है।

क्या कोई इन फ़ाइलों को रखने के लिए एक तरीका जानता है (भले ही वे सीधे जावा कोड में उपयोग नहीं किए जाते हैं)?

<img src="file:///android_asset/myfriend.png"> 
+1

आप अपनी संपत्ति फ़ोल्डर में फ़ाइलों को उस प्रकार के रख दिया और mWebView.loadUrl तरह लोड ("फ़ाइल चाहिए:///android_asset/myfriend.png "); –

+0

आपका अधिकार सही है। मैंने छवियों को 'संपत्ति' फ़ोल्डर में स्थानांतरित कर दिया जिसने मेरी समस्या हल की। उपर्युक्त पंक्ति बन जाती है: Gilbou

उत्तर

1

मैं जो मेरी समस्या हल 'संपत्ति' फ़ोल्डर में छवियों ले जाया गया।

संसाधन ProGuard द्वारा नहीं हटाए गए हैं। यदि आप बस अपने एपीके को अनजिप करते हैं तो आप देखेंगे कि छवि फाइलें अभी भी वहां हैं।

समस्या यह है कि वेबकिट फ़ाइल लोडर प्रतिबिंब का उपयोग करके आपके आर $ ड्रॉइंग क्लास को आजमाएगा और लोड करेगा। यदि आप अपनी proguard.cfg फ़ाइल में कोई भी नियम नहीं जोड़ते हैं, तो कक्षा का नाम बदल दिया जाएगा, इसलिए वेबकिट आपके संसाधन को लोड करने में सक्षम नहीं होगा।

फ़ाइल को संपत्ति फ़ोल्डर में रखकर आप आर क्लास सिस्टम को छोड़ रहे हैं और सब कुछ काम करेगा।

यह कोई समाधान नहीं है, उदाहरण के लिए, यदि आप अलग-अलग घनत्व के लिए विभिन्न संसाधनों का उपयोग करना चाहते हैं।

मेरा सुझाव है तो आप बस आर भीतरी वर्गों और क्षेत्रों को संरक्षित करने के एक बहुत ही बुनियादी रखें नियम जोड़ने:

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keep class **.R$* 
22

मैं एक ऐसी ही समस्या हुई और कुछ ही बिट्स जोड़ना चाहते थे:

+0

हस्ताक्षरित एपीके उत्पन्न करते समय प्रोगार्ड सीएफजी में अपवाद देना –

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