2011-05-19 13 views
6

मुझे कोई समस्या है जो मुझे पागल कर रही है। मेरे पास एक स्थिर HTML फ़ाइल (संपत्ति/सहायता/index.html) है जिसमें कुछ छवियां शामिल करने की आवश्यकता है। मैं अलग घनत्व के लिए विभिन्न छवियों चाहते हैं और छवियों को पहले से ही drawable- में शामिल हैं के रूप में {ldpi, mdpi, hdpi} मैंने सोचा कि मैं निम्न HTML कोड का उपयोग करेंगे:फ़ाइल का उपयोग: /// android_res/drawable/url ग्रहण के तहत काम करता है लेकिन उत्पादन में नहीं

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

इस ग्रहण के तहत उत्कृष्ट काम करता है! दुर्भाग्य से उत्पादन संस्करण (मेवेन एंड्रॉइड प्लगइन के साथ निर्मित) में वेबव्यू जो एचटीएमएल पेज प्रदर्शित करता है टूटा हुआ छवि आइकन दिखाता है।

मैंने loadUrl और loadDataWithBaseUrl (पहले फ़ाइल को स्वयं पढ़ना) का उपयोग करके पृष्ठ खोलने का प्रयास किया है, बाद में फ़ाइल के मूल यूआरएल के साथ: /// android_res/drawable। दोनों प्रयास ग्रहण के तहत सफल होते हैं लेकिन मेवेन संस्करण में असफल होते हैं।

इसलिए मैंने एक्लिप्स उत्पन्न एपीके और मैवेन दोनों को अनपॅक किया और दोनों के बीच एक अंतर किया- क्योंकि स्पष्ट रूप से एक अंतर होना चाहिए।

मैं केवल कुछ मामूली मतभेदों को खोजने के लिए परेशान हूं (ज्यादातर ग्रहण एपीके को डीबग प्रमाण पत्र के साथ हस्ताक्षरित किया गया है और मेरे आधिकारिक प्रमाणपत्र के साथ मेवेन एक है)। इसके अलावा, apks की सामग्री समान हैं!

क्या किसी को पता है कि क्या हो रहा है या अधिक जानकारी को उजागर करने के लिए कैसे आगे बढ़ना है?

उत्तर

0

मैं AsssetManager एस को एप्लिकेशन के साथ बंडल की गई फ़ाइलों तक पहुंचने के तरीके के रूप में देखता हूं। एक ट्यूटोरियल (कोड उदाहरण के साथ) here पाया जा सकता है। वैकल्पिक रूप से आप फ़ाइल को res/raw में डाल सकते हैं और उन्हें openRawResource()

1

फ़ाइल का उपयोग करने के कारण हैं: फ़ाइल के बजाय /// android_res: /// android_asset। उनमें से एक यह है कि एंड्रॉइड पुस्तकालय परियोजनाओं में संपत्ति नहीं हो सकती है।

आप और android-Maven-प्लगइन के संबंधित विकल्प (जो बदले में कुछ Android एसडीके सुविधा पर निर्भर करता का उपयोग कर पैकेज का नाम का नाम बदलने के संसाधनों जो एक WebView से एक पुस्तकालय परियोजना में परिभाषित कर रहे हैं उपयोग करना चाहते हैं तो) तो आप एक अजीब बग मारा।

एंड्रॉयड android.webkit.BrowserFrame :: inputStreamForAndroidResource में यह करता है (कम से कम 4.1.2 में):

final Class<?> d = mContext.getApplicationContext().getClassLoader().loadClass(
mContext.getPackageName() + ".R$" + subClassName); 

यह आर वर्ग के एक गतिशील देखने है और यह के रूप में आवेदन के पैकेज का नाम का उपयोग करता है एक जावा पैकेज नाम। हालांकि यह काम नहीं करता है क्योंकि नामित पैकेज नाम में आर वर्ग मौजूद नहीं होगा।

एक संभावित कार्यप्रणाली निम्न है: अपनी रिलीज बिल्ड के दौरान, गतिशील रूप से अपनी वास्तविक आर कक्षा की एक प्रति बनाएं और इसे जावा पैकेज में रखें जो नामित एप्लिकेशन पैकेज नाम फिट बैठता है। प्रतिलिपि स्रोत में '' पैकेज '' कथन को भी अपडेट करना सुनिश्चित करें।

4

मुझे प्रोगार्ड का उपयोग करके एक ही समस्या थी और मुझे एक स्पष्टीकरण (और एक समाधान!) here मिला।

मेरे मामले में प्रोग्रार्ड obfuscated आर वर्ग और android_res/[...] अब और नहीं मिला।

मैंने प्रोजेगार्ड में एक नियम जोड़ने का हल किया।सीएफजी:

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

-keep class **.R$* 

मुझे मैवेन के बारे में पता नहीं है लेकिन उम्मीद है कि इससे मदद मिलती है।

+0

यह सही उत्तर है, @pieter इसे स्वीकार करना चाहिए। आईडीई प्रोजेवार्ड प्रोसेसिंग से जेनरेट कोड को बाहर करने के लिए प्रतीत होता है, जबकि मेवेन बिल्ड सीधे प्रोजेवार्ड इनवोकेशन का उपयोग करता है जो कि उचित नियम निर्दिष्ट किए जाने तक कक्षाओं को रोकता है। जेसी द्वारा दिए गए नियम काफी सटीक हैं, मेरी मदद की। – zysoft

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

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