Android maven 插件 : renameManifestPackage results in Resources$NotFoundException

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

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

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

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

最佳答案

答案是:我漏掉了什么。我在项目站点 ( https://github.com/simpligility/android-maven-plugin/issues/736 ) 开了一张关于这个问题的票。事实证明,我所看到的问题是 renameManifestPackage 配置的预期行为,因为不仅重命名 list 包而且重命名资源超出了此配置的范围。

但是,有一个不太丑陋的解决方法:

不是从 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/

关于Android maven 插件 : renameManifestPackage results in Resources$NotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38240851/

相关文章:

java - 父子引用的 Maven 依赖问题

android - 在 Android Studio 中创建 aar 文件

android - 创建新的 android 项目时不再显示默认模板

android - 请求许可时应用崩溃

java - .vscode 目录中的最小 launch.json 用于运行 Maven 项目的主类(带有 `F5` )

android - 如何将 Android 库发布到 Maven 存储库以方便使用?

android - 未找到属性 defaultNavHost

android - 构造函数 SimpleCursorAdapter(Context, int, Cursor, String[], int[]) 已弃用

java - 安卓服务未启动

maven - Spark 和 Cassandra Guava 使用 Maven 发生冲突