2016-07-07 6 views
5

मुझे निम्न समस्या का सामना करना पड़ा: जिस ऐप को मैंने कार्यान्वित किया है, उसमें एक अन्य प्रोजेक्ट शामिल है (प्रकार एआर)। दोनों परियोजनाएं एक ही पेरेंट पोम साझा करती हैं। निर्भरता में संसाधन शामिल हैं, जो ऐप उपयोग कर रहा है। लाइब्रेरी प्रोजेक्ट के भीतर संसाधनों तक पहुंचने के लिए, संसाधन आईडी context.getResources().getIdentifier(resourceKey, resourceType, packageName) पर कॉल करके लाई जाती है। मुझे ऑब्जेक्ट पर getPackageName() पर कॉल करके पैकेज का नाम मिलता है।

<renameManifestPackage>com.example.newpackagename</renameManifestPackage> 

का उपयोग कर पुस्तकालय संसाधनों तक पहुंच कर परियोजनाओं के पैकेज के नाम बदलने से पहले ठीक काम किया। लेकिन ऐप के पैकेज नाम का नाम बदलने के बाद मुझे android.content.res.Resources$NotFoundException मिल गया है क्योंकि getIdentifier() कॉल अभी भी ऐप के पुराने पैकेज नाम की अपेक्षा करता है और getPackageName() पर कॉल करने से पहले नया (अपेक्षित) लौटाता है।
अब मुझे आश्चर्य है कि मुझे कुछ याद आ रही है या अगर यह एंड्रॉइड मेवेन प्लगइन में एक बग है?

उत्तर

2

उत्तर है: मुझे कुछ याद आया। मैंने प्रोजेक्ट साइट पर इस समस्या के बारे में टिकट खोला (https://github.com/simpligility/android-maven-plugin/issues/736)। यह पता चला कि मैंने किसी समस्या के रूप में जो देखा है, उसे renameManifestPackage कॉन्फ़िगरेशन का व्यवहार करने की उम्मीद है, क्योंकि न केवल मैनिफेस्ट पैकेज का नामकरण करने के बाद भी संसाधन इस कॉन्फ़िगरेशन के दायरे से बाहर हैं।

वहाँ है, हालांकि, इस के लिए एक नहीं बहुत बदसूरत वैकल्पिक हल:

इसके बजाय Context वस्तु से पैकेज का नाम पुन: प्राप्त करने की, यह संभव Resources वस्तु से प्राप्त कर सकता है। यहाँ हिस्सा है जहां यह थोड़ा बदसूरत हो जाता है आता है: पैकेज का नाम पुन: प्राप्त करने का एक उद्देश्य के साथ एक संसाधन जोड़ना होगा के बाद से अन्य संसाधनों आम तौर पर बदलने के लिए विषय हैं:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <!-- The only purpose of this resource is to retrieve the resource package name --> 
    <item name="used_for_package_name_retrieval" type="id"/> 
</resources> 

अब आप संसाधन पैकेज का नाम प्राप्त कर सकते हैं इस प्रकार है: http://www.piwai.info/renaming-android-manifest-package/

:

Resources resources = context.getResources(); 
String packageName = resources.getResourcePackageName(R.id.used_for_package_name_retrieval); 

क्रेडिट को जाता है

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