2016-07-07 127 views
5

我遇到了以下問題: 我實現的應用程序包含另一個項目作爲依賴項(類型爲aar)。這兩個項目共享同一個母團隊。依賴項包含應用程序正在使用的資源。要訪問庫項目中的資源,請通過調用context.getResources().getIdentifier(resourceKey, resourceType, packageName)來獲取資源ID。我通過在給定的context對象上調用getPackageName()來獲取包名。 使用

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

訪問圖書館資源改變項目的包名前工作的罰款。但重命名應用程序的包名後,我得到一個android.content.res.Resources$NotFoundException,因爲getIdentifier()調用仍然期望應用程序的舊包名稱並調用getPackageName()返回新的(如預期的那樣)。
現在我不知道我是否錯過了某些東西,或者如果這是android maven插件中的錯誤?

回答

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> 

現在你可以檢索資源包名如下:

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

幸得:http://www.piwai.info/renaming-android-manifest-package/

相關問題