我遇到了以下问题:
我实现的应用程序包括另一个项目作为依赖项(类型为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
答案 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/