Android maven插件:renameManifestPackage导致Resources $ NotFoundException

时间:2016-07-07 08:31:54

标签: android maven aar android-maven-plugin package-name

我遇到了以下问题: 我实现的应用程序包括另一个项目作为依赖项(类型为aar)。两个项目共享同一个父pom。依赖项包括应用程序正在使用的资源。要访问库项目中的资源,可以通过调用context.getResources().getIdentifier(resourceKey, resourceType, packageName)来获取资源ID。我通过在给定的getPackageName()对象上调用context来获取包名称。 在使用

更改项目的包名之前
<renameManifestPackage>com.example.newpackagename</renameManifestPackage> 

访问图书馆资源工作正常。但在重命名应用程序的程序包名称后,我得到android.content.res.Resources$NotFoundException,因为getIdentifier()调用仍然需要应用程序的旧程序包名称,并且调用getPackageName()会返回新的名称(如预期的那样)。
现在我想知道我是否遗漏了某些东西,或者这是android maven插件中的错误? https://github.com/simpligility/android-maven-plugin

1 个答案:

答案 0 :(得分: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/