【发布时间】:2014-03-24 16:57:39
【问题描述】:
我有一个将在两个(或多个)品牌中分发的 Android 应用。每个发行版的所有 Java 代码完全相同,只是资产/资源不同(如布局、可绘制对象、尺寸等)
组织项目的最佳方式是什么?我正在使用 Git 进行版本控制,并试图将所有发行版作为一个项目开发。因此,我可以在每次需要时轻松地为不同的品牌切换资产/资源集。
有什么好的方法吗?
【问题讨论】:
标签: android git android-assets
我有一个将在两个(或多个)品牌中分发的 Android 应用。每个发行版的所有 Java 代码完全相同,只是资产/资源不同(如布局、可绘制对象、尺寸等)
组织项目的最佳方式是什么?我正在使用 Git 进行版本控制,并试图将所有发行版作为一个项目开发。因此,我可以在每次需要时轻松地为不同的品牌切换资产/资源集。
有什么好的方法吗?
【问题讨论】:
标签: android git android-assets
一种好的方法是将您的主要项目代码放入库中,然后对于其他项目(品牌),导入该库并根据需要覆盖资产。
【讨论】:
Gradle Build Variants 允许您拥有一个共享的主代码库/资源和多个变体,其中每个变体都有自定义资源/代码 - 然后您可以为每个变体生成单独的 APK。当然,使用 Gradle 进行 Android 开发也需要使用 Android Studio(目前处于测试阶段)。
【讨论】:
如上所述,Gradle Build Variants 是处理此问题的最佳方式。我们有 11 个变体(并且还在增加),唯一的区别是一些配置值。我将项目组织如下:
app/src/configurations/
flavor1/
common/res/...
release/res/...
stage/res/...
common 目录保存该构建变体通用的配置,而 release 和 stage 保存我们的发布和暂存版本的自定义值(它们的配置也略有不同)。
所有构建变体共有的所有配置都位于普通的 app/src/main/res 文件夹中。
然后在应用程序的 build.grade 中,我定义了每种产品风格:
productFlavors {
flavor1 {
applicationId = "com.example.flavor1"
}
flavor1stage {
applicationId = "com.example.flavor1stage"
}
// etc. for each build flavor
}
android.sourceSets.flavor1 {
res {
srcDirs = ['src/configurations/flavor1/release/res', 'src/configurations/flavor1/common/res', 'src/res']
}
}
android.sourceSets.flavor1stage {
res {
srcDirs = ['src/configurations/flavor1/stage/res', 'src/configurations/flavor1/common/res', 'src/res']
}
}
【讨论】: