【发布时间】:2026-01-31 07:35:01
【问题描述】:
是否可以构建具有超过 1 种产品风格的 apk?
例如:
我有一个具有 3 种风格的项目(App1 - App2 - App3)。
并且每个app都有自己的applicationId等配置。
现在我想构建不同的模板(不同的 XML 布局),并且用户应该能够从应用程序内部从布局切换到另一个。
我的问题是 res 文件夹会很大而且很难维护,所以我试图找到一种方法来分离不同的布局并尽可能保持干净。
如果可以这样做,那么我如何打算或重新启动应用程序以构建其他风格?
我想到的另一件事是在主资源中构建所有 XML 文件并选择不同的限定符,就像我们在创建不同的屏幕尺寸(sm - larg - 等)时所做的那样,但我无论如何都找不到添加自定义限定符.
我的Gradle 代码是这样的:
flavorDimensions "default"
productFlavors {
demo {
applicationId "test.demo"
versionCode 2
versionName "1.1.2"
resValue "string", "backage_name_file", "test.demo.fileprovider"
resValue "string", "bc", "com.demo"
resValue "string", "bc_e", "extra_data.com.demo"
resValue "string", "default_hostname", "demo.test.com"
resValue "string", "default_username", "demo"
resValue "string", "default_password", "demo"
}
AppOne {
applicationId "test.AppOne"
versionCode 2
versionName "1.1.2"
resValue "string", "backage_name_file", "test.AppOne.fileprovider"
resValue "string", "bc", "com.AppOne"
resValue "string", "bc_e", "extra_data.com.AppOne "
resValue "string", "default_hostname", "AppOne.test.com"
resValue "string", "default_username", "AppOne"
resValue "string", "default_password", "AppOne"
}
AppTwo {
applicationId "test.AppTwo"
versionCode 2
versionName "1.1.2"
resValue "string", "backage_name_file", "test.AppTwo.fileprovider"
resValue "string", "bc", "com.AppTwo"
resValue "string", "bc_e", "extra_data.com.AppTwo"
resValue "string", "default_hostname", "demoAppTwotest.com"
resValue "string", "default_username", "AppTwo"
resValue "string", "default_password", "AppTwo"
}
}
【问题讨论】:
-
恕我直言,如果您只想根据用户输入切换布局,则不需要使用产品风味。可以简单地通过一些
if语句来实现。 -
我已经在使用多种风格的 apk,我不想使用 if 语句,因为如果我有 50 个 xml 文件并且每次我想制作新模板时都复制过去,那就太多了跨度>
-
我认为创建一个if语句比创建一个模块来切换布局更好。
-
好的,但我会遇到一些问题:首先,如果我有 2 个不同的布局 (xml) 文件,第一个将被称为 mainactivity.xml,第二个模板将被称为 mainactivity2,因为这将导致java数据绑定的问题。与活动风格相同。你觉得有更好的解决方案吗?
-
我发现了类似*.com/questions/28232261/… 的东西,您可以添加子风味,但如何在 java 中调用它?
标签: android android-layout gradle android-gradle-plugin android-productflavors