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

6ri*_*sm0 8 android dynamic-feature dynamic-delivery

我正在尝试将新的 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)
Run Code Online (Sandbox Code Playgroud)

正如我所说,我能够阅读资产 txt 文件中的文本,但我似乎没有在资源中找到任何可绘制对象。

当我尝试获取我知道在动态模块的资源文件夹中的可绘制对象时,我得到一个 ResourcesNotFoundException

我已通读 Google 提供的 Android 文档,但找不到有关如何访问下载的模块资源的详细信息

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

Lea*_*oid 0

我能够通过替换packageName功能模块包名称的方法来解决这个问题res.getIdentifier(..., packageName)

应用程序包名称:com.example.my_app_package
功能的资源包名称:com.example.my_app_package.my_dynamic_feature

我不确定从哪里my_dynamic_feature获取该值,但完整的包不会是您在模块的 build.gradleapplicationId或 AndroidManifestpackage属性上定义的包。