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

时间:2019-06-10 18:54:43

标签: android gradle android-productflavors source-sets

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

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

更新:我只是想让textview调用R.string.title,这将根据用户模式(管理员或用户)调用不同的字符串文件。这与更改区域设置语言(例如,en和fr)将在不更改代码的情况下调用适当的文件相同。

2 个答案:

答案 0 :(得分:1)

  

我想知道如何根据应用程序模式更改资源SourceSet,该模式可以由用户在运行时进行切换。

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

  

我正在创建一个具有管理员和用户模式的应用程序,每种模式都有自己的布局,字符串和可绘制资源文件。

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

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

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

答案 1 :(得分:0)

在存在默认启动器被锁定且默认情况下用户启动的登录屏幕被锁定的企业应用程序中,有两个单独的应用程序可以根据用户角色进行切换的解决方案。在另一个apk应用程序中,我根据用户选择的角色使用自己的逻辑制作了不同的屏幕。 但这也可以帮助您Dynamically generating product flavors