original-package标签使用

需求

同”Git技巧–自动Merge逻辑(.gitattribute配置)”,为了生成多个逻辑一致但resource有些许差别的系列apps。利用original-package能够在不更改源码结构的条件下更改项目包名。

属性介绍

关于的original-package标签的资料大多如出一辙,这里简单讲讲我的看法。
AndroidManifest中的标签相似,其中package代表进程名,代表app唯一的标识,不同app的package必须不一样,另外package的值与R文件息息相关,R文件生成只依赖于package标签;original-package设置的是源码级别包名,也就是要与包结构一致。

使用方法

知道以上这些就足够,例如我这里有开发好的原app–“test”。这时需要发布的新的一套resouce的app–“other_test”,他们的package分别为“test”和“other_test”。使用Git版本控制,只需要从我们原分支test上拉一条新分支(或者从master),然后将其package标签更名为other_test(可利用全局替换replace in path)。此时项目肯定会因为R文件丢失而报错,因为包名和源码路径已经不一致,这时我们在新项目的Manifest文件中手工添加original-package标签,如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.other_test">

<original-package android:name="com.test"/>

...
</manifest>

由于R文件的生成只依赖于package标签的值,利用全局替换将import com.test.R 修改为 import com.other_test.R。此时两个branch代码结构一致,依赖于original-package所指向的com.test路径,但分明是两个app。后期做任何逻辑上的修改,都可以任意在master上操作,最后merge到其他两个分支即可。