我正在准备一个白色标签应用程序(在本文后面称为产品),我想建立一个非常好的架构。这将很容易和迅速地建立一个新的客户端通过改变设计,激活功能.
我有几个服务器(dev、prod、prod),所以flavorDimensions server在产品中,flavorDimension client在客户端。
--我想到了这个解决方案:为每个客户设置一个git,为产品设置一个git。
客户端可以通过git子模块访问产品代码。这允许我将特定的代码与我的客户端和产品的源代码分开。
Git -> Client 1
Submodule -> Product v1
Git -> Client 2
Submodule -> Product v1.2
...
Git -> Product v1.4但是我有一个问题,那就是如何正确地运行。flavorDimensions client的使用很难,因为在构建之前,我需要从子模块复制粘贴到应用程序模块。这种结构的产生打破了分级,因为它需要每一次同步。(现在总是在Android上标记Sync )
所以我问自己,好的建筑还是不好的?你觉得呢?
或者你有其他的想法,以及如何实现它们?
多谢你们的支持。
发布于 2017-09-29 20:01:09
嗯,有趣的事情。我也做过类似的事情,但不太像那样。我只在三角洲用香料。例如,主题、皮肤、app_icons和Strings.xml。在布局或活动中可能会有一些变化,但请尽量保持它的通用性,以尽量减少对各种客户部署的代码维护,因为每增加一次就会显著减缓CI过程。
但是,您所做的事情的一个关键区别是您没有构建一个平台(也就是每个人都使用相同的代码GIT和API Server本身,您正在构建独立的应用程序来为单个客户提供完整的代码和其他所有内容。
这听起来可能是一场维护噩梦,但如果您的情况需要客户访问代码库以获取他们的产品风格,那么我想这是有意义的。不知道为什么他们会访问代码,尽管这是您的产品,您正在为客户重新购买,对吗?
无论如何,你不是要我问你的推理哈哈,你是在问架构解决方案。这就是我的想法。
创建一个任务,将各自的文件夹复制到一个新的模块结构中,与现在的模块完全一样,但是修改包名,使它们都略有不同,然后运行GIT push。您可以从Gradle运行bash文件,因此可以编写脚本并从相对路径执行它们,也可以直接将其写入Gradle文件本身。
因此,我将更新我的Gradle,使其具有独立的依赖文件,如libs.gradle
该文件中的->Put依赖项,如ext.libs {gson:"com.whatever:version"} ->apply ./libs.gradle ->dependencies { libs.gson等.
因此,我假设您的构建任务将完成
通过正确复制文件,使用->Create服务器重新命名->if,从所有源复制一个新模块,然后为编译的新模块->Create部署aar或jar --一个新的动态Gradle文件libs.gradle,以取代当前的libs.gradle文件,该文件被更新为已部署工件的源指针或创建的模块->run gradlesync,当完成运行assembleRelease时,您可以执行git等操作。
所有这些都可以从终端同步完成,并本地化为命令。在这方面,口味可能帮不上什么忙,因为它们是构建过程的一部分,所以您需要一些预构建过程,您可以创建这些过程来执行预构建,但关键是打包依赖项和更新libs.gradle文件,并确保按口味替换它。或者,如果您有固定的口味,您只需为每种口味创建一个特定的libs.gradle,并根据编译后的依赖项更新它。
我不知道你的总体情况,但这都是可行的。希望这能有所帮助。祝你好运。
https://stackoverflow.com/questions/46495933
复制相似问题