Android:根据用户设置以编程方式更改 SourceSet

标签 android gradle android-productflavors source-sets

我正在创建一个具有管理模式和用户模式的应用程序,每个模式都有自己的布局、字符串和可绘制资源文件。我想知道如何根据用户可以在运行时切换的应用程序模式更改资源 SourceSet。

目前,我使用 2 种产品口味来做到这一点。但是口味的问题是它是构建时间,我必须创建 2 个不同的 apk,每个口味一个。因此,能够在运行时更改 SourceSet 意味着我只能拥有 1 个 apk。

更新:我只是想让一个 TextView 调用 R.string.title,这将根据用户模式(管理员或用户)调用不同的字符串文件。这与更改 Locale 语言(例如 en vs fr)将调用适当的文件而无需更改代码相同。

最佳答案

I want to know how to change the resources SourceSet based on the app mode which can be toggled by the user at runtime.

那是不可能的。源集是一个编译时构造。 APK 包含基于您在编译 APK 时选择的构建变体的源集内容——其他源集的内容不在该 APK 中。

I am creating an app that has admin and user modes, and each mode has its own layouts, strings, and drawable resource files.

那么这要么是两个应用程序(和两个 APK),要么您需要将所有这些资源放在一个源集中并放入您的一个 APK。

通常,管理模式还涉及专用的 Java/Kotlin 代码(例如,专用的 fragment ),因此仅交换资源是不够的。

如果您仅通过 Play 商店进行分发,如果您担心包含用户和管理员代码/资源的 APK 的大小,则可以考虑使用动态功能模块。

关于Android:根据用户设置以编程方式更改 SourceSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56532014/

相关文章:

android - SurfaceView 或 TextureView 组合

android - 使用 AsyncTask 将图像下载到 AppWidget 中的 ListView

android - 在 Android 中删除 jcenter() 后找不到 org.apache.cordova :framework:7. 0.0

java - 在 Netbeans 中重命名 Gradle 项目

java - 在Android Studio中生成失败

android - 将口味配置保存在单独的 .gradle 文件中

android - 如何做一个传递复杂对象的http post?

android - Dagger 2 : NoClassDefFoundError: dagger/producers/ProducerModule

android - 文件 :///android_res/drawable not working when using flavor with other package name

android - Firebase 结合了免费和付费的分析和错误报告