我发现自己处于类似的境地。
我有一个应用程序,但为不同的客户构建(具有特定的自定义,如资源、属性......)。我最终决定使用 maven 来管理整个事情。
我所做的是在我的代码库中创建一个“配置”文件夹,并在其中添加了专业客户一个文件夹,其中包含与他相关的属性、字符串、图片。
我的结构是这样的:
MyAppBase
src/
build/
BaseAndroidManifest.xml
...
config/
customerA/
logo.png
customerA.xml
customerA.properties
customerB/
customerC/
...
使用 Maven 工件进行复制、移动、替换然后我设法通过以下方式构建客户特定的 apk:
1) 创建一个临时的客户特定源文件夹,所有代码都复制到其中
<copy todir="src_${customer}">
<fileset dir="src"/>
</copy>
2) 重命名包和导入
<!-- Rename main package -->
<move file="src_${customer}/ch/wizche/myapp" tofile="src_${customer}/ch/wizche/${customer}"/>
<!-- Replace package imports with the newly one -->
<replace dir="src_${customer}/" value="ch.wizche.${customer}">
<include name="**/*.java"/>
<replacetoken>ch.wizche.myapp</replacetoken>
</replace>
3)根据客户更换特定资源
<!-- Copy images icon to the drawable folder -->
<copy file="./configs/${customer}/ic_launcher_l.png" tofile="./res/drawable-ldpi/ic_launcher.png" overwrite="true" verbose="true"/>
<copy file="./configs/${customer}/ic_launcher_m.png" tofile="./res/drawable-mdpi/ic_launcher.png" overwrite="true" verbose="true"/>
4) 替换“模板”AndroidManifest 并注入客户版本、名称、...
<copy file="./BaseAndroidManifest.xml" tofile="./AndroidManifest.xml" overwrite="true" verbose="true"/>
<replace file="./AndroidManifest.xml" value="ch.wizche.${customer}" token="ch.wizche.myapp"/>
<replace file="./AndroidManifest.xml" value="android:versionCode="${versionCode}" token="android:versionCode="1"/>
5) 使用客户别名签名
6) 构建 APK
7) 删除临时客户文件夹
因此,要构建客户特定的应用程序,我只需要:
mvn install -Dcustomer=customerA -P release
希望这可以给你一些意见。