两个项目功能高度相似,两份代码怎么同步?

atearsan 发布于 2016/08/23 12:35
阅读 615
收藏 0

1. 都是Android项目

2. 项目是公司产品,要长期维护

3. 包名不一样(因为有些第三方服务可能根据包名区分app,而不是applicationId)

先描述下情景:

    项目A已做完,项目B启动跟进项目A,前期功能高度相似,后期可能出现不同的业务功能。

已经尝试(放弃)的方案:

    1. 用applicationId/buildTypes/Flavors区分

            资源文件做异化处理很方便,但是java文件处理太麻烦,需要把main里的java文件冲突的移走到其他文件夹。

            包名一样,担心第三方服务只根据包名区分应用,不方便使用第三方服务(信鸽)。

    2. svn分支管理 ("Compare With Branch"合并代码)

            创建trunk空目录,然后创建两个分支存放不同的项目代码,代码逻辑同步用"Compare With Branch"快速合并逻辑。

            问题:包名不一样,文件对比只对比相同的包名路径下。 郁闷。

    3. 本地Beyond Compare进行文件夹对比

            还是老问题,包名不一样,所以文件路径不一样,批量对比处理太麻烦,只能选择单个文件对比


现在还是改一个文件的时候同时去改另一个文件。。。


想问下各位路过的大神有什么奇思妙想



补充: 2016年 8月24日 星期三 14时48分


根据@houjhouj 的提醒, 重新查了applicationId/buildTypes/flavors相关的一些资料, 发现程序代码获取到的包名与applicationId保持一致, 跟程序源代码路径中的包名无关.


现已基本保持一份代码可以包名不一样, 接入两套信鸽服务互不影响.

修改的配置见图: http://jietu.qq.com/upload/index.html?image=http://jietu-10024907.file.myqcloud.com/zhjzveeisjcblriiotsecjgdmbvqawkp.jpg

(图片太大影响文本内容阅读, 所以不直接上传了)


参考资料: 

如何使用Gradle构建不同版本的app: https://www.zhihu.com/question/22842123
Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道): http://www.jianshu.com/p/533240d222d3/comments/3768386#comment-3768386
Android官方技术文档翻译——ApplicationId 与 PackageName: http://blog.csdn.net/maosidiaoxian/article/details/41719357

加载中
2
h
houj

Android程序的包名只是一个标志,   不一定要与java源代码中的包同名或对应;

你可以让java源码, 资源等一样,  AndroidManifest.xml 不一样即可

atearsan
atearsan
多谢提醒. 测试发现程序获取到的包名确实是applicationId, 程序包名如何定义并没影响.
0
ked
ked
条件编译
atearsan
atearsan
多谢回答. 我查了下条件编译, 改动太大. 后来根据另一个回答者的提示, 发现了applicationId的值其实就是程序获取到的包名.
0
Joyzhou
Joyzhou
抽象出通用功能,细化功能代码
atearsan
atearsan
多谢回答. Android上的代码多数就是跟UI相关的业务代码, 为了两份代码抽象处理细节繁多. 根据applicationId的作用, 已经有更好的方式处理了.
返回顶部
顶部