无法访问动态特性模块的资源

10
我正在尝试将新的Android动态交付功能添加到我的应用程序中,但我尝试访问动态特性模块的资源时一直失败。
基本思想是加载一个没有代码但有一堆矢量文件作为可绘制资源的模块。
我能够加载该模块,甚至访问给定模块的资产,但我无法弄清楚如何访问资源。
         val res = context.createPackageContext(context.packageName, 0).also {
            SplitCompat.install(it)
         }.resources

         val assetsStream = res.assets.open("test.txt")
         val assetContent = assetsStream.bufferedReader()
                 .use {
                    it.readText()
                 }
         var iconResourceId = res.getIdentifier(stringIdentifier, IDENTIFIER_DRAWABLE, context.packageName)

如我所说,我能够读取资产txt文件中的文本,但是我似乎在资源中找不到任何可绘制项。

当我尝试获取我知道位于动态模块资源文件夹中的可绘制项时,我会遇到ResourcesNotFoundException错误。

我已经阅读了Google提供的Android文档,但是我无法找到有关如何访问下载的模块资源的详细信息。

https://developer.android.com/guide/app-bundle/playcore#access_installed_modules


请查看此答案:https://dev59.com/17Xna4cB1Zd3GeqPTPEI#60227903 - Goran Horia Mihail
你找到你想要的东西了吗?目前我面临着同样的问题。 - Hamza Khan
很遗憾,我们不得不放弃使用动态特性模块来解决我们的问题,因此自那以后我们就没有再尝试过了。 - 6rism0
1个回答

0

我通过将packageName替换为特征模块包名的方法res.getIdentifier(..., packageName)来解决了这个问题。

应用程序包名:com.example.my_app_package
特征资源包名:com.example.my_app_package.my_dynamic_feature

我不确定my_dynamic_feature的值确切来源于哪里,但完整的包名不会是您在模块的build.gradle applicationId或AndroidManifest package属性中定义的那个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接