为了将我的游戏应用程序分解为即时和可安装版本,我开始使用动态模块拆分 API 交付。我一直在关注这里的 Codelabs 教程 https://codelabs.developers.google.com/codelabs/on-demand-dynamic-delivery/index.html#0 .不幸的是,它使用 Kotlin 来编写 MainActivity 代码,它不如 Java 特定,但如果你已经完成了 Kotlin 教程,仍然相当容易理解。该示例包括使用以下内容访问“ Assets ”功能模块中“ Assets ”文件夹中的文本图 block :
private const val packageName = "com.google.android.samples.dynamicfeatures.ondemand"
val assetManager = createPackageContext(packageName, 0).assets
// Now treat it like any other asset file.
val assets = assetManager.open("assets.txt")
val assetContent = assets.bufferedReader()
.use {
it.readText()
}
现在我只想访问动态功能模块的可绘制文件夹中的图形文件。我只会使用我的动态功能模块来存储大型图形,这将使我超过 10 MG 的即时应用程序下载限制。最干净的方法是什么?
主“应用程序”模块:
“应用程序”中的 Java 代码:
loadTexture(R.drawable.aaa_image);
Bitmap bitmap;
public void loadTexture(final int resourceId){
bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId, options);
***
动态交付的“installationassets”模块:
'app'中的Java代码仍然无法到达:
loadTexture(R.drawable.testgraphic);
cannot resolve symbol 'testgraphic'
最佳答案
我找到了一个从功能模块资源加载可绘制对象的有效解决方案。诀窍是为模块使用正确的包名称。
例子:
build.gradle
dynamicFeatures = [":FeatureModule"]
java
int drawableResId = context.getResources().getIdentifier("your_drawable_name", "drawable", "com.project.FeatureModule");
context.getDrawable(drawableResId);
Reference article
关于android - 从主模块访问动态功能模块的可绘制文件夹中的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57662892/