是否可以构建具有超过 1 种产品 flavor 的 apk?
例如:
我有一个具有 3 种风格的项目(App1 - App2 - App3)。
每个app都有自己的applicationId等配置。
现在我想构建不同的模板(不同的 XML 布局),并且用户应该能够从应用程序内部从布局切换到另一个布局。
我的问题是 res 文件夹会很大并且很难维护,所以我试图找到一种方法来分离不同的布局并尽可能保持干净。
如果有可能这样做,那么我该如何 Intent 或重新启动应用程序以构建其他版本?
我想到的另一件事是在主资源中构建所有 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"
}
}
最佳答案
您无法构建具有多种风格的 APK,就像您无法在调试和发布 buildTypes 中构建一个 APK 一样。所选风格的配置/资源被提取到实际的 APK 元数据/ list 中,因此无法在运行时修改。
您需要将所有内容包含在 res
文件夹中,但有几种方法可能有助于简化管理。我会推荐前 3 个选项,如果您有大量具有不同行为的代码 + 布局文件,我会推荐第 4 个:
- Use Fragments以避免需要复制您的大部分 Java/Kotlin 代码。
- Include XML layouts而不是每次都重新定义一切以重用公共(public)元素。
- 仔细命名您的文件,例如
template1_background
、template2_background
。 - Use multiple modules ,每个"template"一个。然后,您将拥有多个合理的
res
文件夹。
我明白为什么 flavor 看起来像是解决方案,但由于您需要在一个应用程序中使用所有 flavors,因此很遗憾,这种方法行不通。您可能会发现第 2 步将删除几乎所有重复文件,从而完全避免该问题!
关于android - 使用多个模板/风格构建单个 Apk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56012816/