什么是白标应用的结构/架构

时间:2017-09-29 19:44:14

标签: android git

我正在准备一个白标应用程序(本文后面称为产品),我想建立一个非常好的架构。通过更改设计,激活功能,可以轻松快速地设置新客户端......

我有几个服务器(dev,pre-prod,prod),因此flavorDimensions server出现在产品中,flavorDimension client位于客户端。

我想到了这个解决方案: 为每个客户设置一个git,为产品设置一个git。

客户可以通过git submodule访问产品代码。这允许我将特定代码与客户端和产品的源代码分开。

Git -> Client 1
    Submodule -> Product v1
Git -> Client 2
    Submodule -> Product v1.2

...

Git -> Product v1.4

但我有一个问题如何正确运行它。使用flavorDimensions client很难,因为我需要在构建之前从子模块复制粘贴(使用gradle)到app模块。 这种结构的产生打破了Gradle,因为它需要每次都同步。 (Android Studio上始终立即同步标记)

所以我问自己,是不是一个好的建筑?你觉得怎么样?

或者你有其他想法以及如何实施它们?

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

嗯有趣的看法。 我做过类似的事情,但不太喜欢。我只使用味道作为增量。例如,themes,skins,app_icons和Strings.xml。可能在布局或活动方面有一些变化,但我会尽最大努力保持一致性,以最大限度地减少各种客户部署代码的维护,因为每种额外的风味都会大大减慢CI过程。

然而,您正在做的一个关键区别是您没有构建平台(也就是说每个人都使用相同的代码GIT repo和API Server本身,您正在构建独立的应用程序以提供完整的代码以及其他所有内容客户。

听起来这可能是一个维护噩梦,但如果您的情况要求客户可以访问代码库以获得他们的产品风格,那么我认为这是有道理的。不知道为什么他们会访问代码,因为这是你的产品,你正在为客户重新设计吗?

无论如何,你不是要求我问你的推理哈哈,你问的是建筑解决方案。所以这是我的想法。

创建一个将相应文件夹复制到新模块结构中的任务,就像您现在拥有的模块一样,但是对包名称进行更改以使它们略有不同,然后运行GIT推送。您可以从Gradle运行bash文件,因此您可以编写脚本并从相对路径执行它们,也可以直接在Gradle文件中编写它们。

所以我会更新我的Gradle,使其具有独立的依赖文件,如libs.gradle

  

- >将依赖项放在该文件中,如ext.libs {gson:" com.whatever:version"}    - >从../libs.gradle申请    - >依赖项{libs.gson等等}}

所以我假设你的构建任务会做

  

- >通过使用新名称正确复制文件(如有必要重命名),从所有来源创建新模块    - >如果使用maven服务器,则为已编译的新模块部署aar或jar    - >创建一个新的动态Gradle文件libs.gradle来替换当前的libs.gradle文件,该文件是已更新的指向已部署工件的源指针   或创建模块    - >运行gradlesync,当完成运行assembleRelease时,那么你可以做你的git push等。

所有这些都可以从终端同步完成并本地化为命令。 Flavors在这个领域可能无济于事,因为它们是构建过程的一部分,因此您需要预构建过程,您可以创建任务来进行预构建,但关键是依赖项的打包和更新libs.gradle文件并确保每种口味更换它。或者,如果你有固定的口味,你可以为每种口味制作一个特定的libs.gradle,并根据编译的依赖关系更新它。

我不了解你的整体情况,但这一切都是可行的。希望有所帮助。祝好运。