5

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

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

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

4

1 回答 1

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/

于 2016-08-05T07:50:35.273 回答