Android maven插件:renameManifestPackage导致Resources $ NotFoundException

phi*_*155 5 android maven android-maven-plugin package-name aar

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

<renameManifestPackage>com.example.newpackagename</renameManifestPackage> 
Run Code Online (Sandbox Code Playgroud)

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

phi*_*155 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>
Run Code Online (Sandbox Code Playgroud)

现在您可以检索资源包名称,如下所示:

Resources resources = context.getResources();
String packageName = resources.getResourcePackageName(R.id.used_for_package_name_retrieval);
Run Code Online (Sandbox Code Playgroud)

信用转到: http: //www.piwai.info/renaming-android-manifest-package/