背景
我发现在 Android 11 中有这些新的类 (ResourcesLoader 和 ResourcesProvider),我认为它们可以让你为整个应用程序提供自己的资源加载,这可以帮助您优先使用云端字符串(例如在 Lokalise 和 Crowdin 中),加载主题等...
问题
我找不到如何使用它们的任何示例,并且不确定我所发现的是否正确。
唯一与此相关的是来自“Taming Android Resources and LayoutInflater for string manipulation”文章中的缓存文章:
Android 11 引入了通过 ResourcesLoader 和 ResourcesProvider 动态加载资源的能力。这不仅限于字符串文件,还允许动态加载可绘制图像和其他资源文件。使用这些类的近似方法如下:
val provider = ResourcesProvider.loadFromDirectory("/somepath/", null) // or loadFromApk()
val loader = ResourcesLoader() loader.addProvider(provider) resources.addLoaders(loader) // Application resources
目前该API没有提供适当的样例,且仅在Android 11及以上版本可用,因此大部分应用程序要使用此API还需要很长时间。
我发现的
我想尝试使用Lokalise库,该库提供了资源实例(在此写有关其的文章)。
可惜,我卡在了最开始的阶段,无法找到如何使用它以向其提供此实例。
似乎这是一个罕见的用例和新类,几乎没有人写过有关它的内容。即使是2020年发表的一篇文章,也被删除了,我不得不使用其缓存版本...
问题
- 这些类可以用于提供动态资源(字符串/主题)的目的吗?
- 它可以与Lokalise配合使用,以便我提供其SDK的实例吗?
- 是否有这些类的支持库,以便在Android API 30之前使用它们?
编辑:在此处,他们使用加载APK文件以将其资源作为最高优先级使用的示例:
class App : Application() {
override fun onCreate() {
super.onCreate()
val file = File(cacheDir, "overrideResources")
unzip(ZipInputStream(assets.open("override.apk")), file)
val rl = ResourcesLoader()
rl.addProvider(ResourcesProvider.loadFromDirectory(file.path, null))
resources.addLoaders(rl)
}
}