背景
我发现了这些新的Android 11类(ResourcesLoader和ResourcesProvider),我认为他们可以让你提供自己的资源加载整个应用程序,这可以帮助你更喜欢从云(如Lokalise和Crowdin)加载主题等…
这个问题
我找不到任何如何使用它们的例子,以及我所发现的是否确实正确。
我发现的唯一一件事是从这篇缓存的文章“驯服Android资源和LayoutInflater的字符串操作”:
Android 11引入了动态加载资源的能力
ResourcesLoader ResourcesProvider。这不仅限于
字符串文件,但也允许动态加载绘图和其他
资源文件。这是使用这些类的一种近似方法
val provider = ResourcesProvider.loadFromDirectory("/somepath/", null) // or loadFromApk()
val loader = ResourcesLoader() loader.addProvider(provider) resources.addLoaders(loader) // Application resources
这里没有提供适当的API示例
现在,它只能在安卓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)
}
}