我正在努力寻找为6个以上不同客户构建/打包Android应用程序的最佳方法。我可以在SVN中为所有客户使用不同的分支,但应用程序之间的唯一区别是资源文件夹中的一些值(drawables、string等)。
我写了一个ant脚本,它导入标准的Androidbuild.xml
- 从属性文件中读取客户名称
- 为每位客户完成以下操作:
- AndroidManifest.xml中的包名称已更改(通过挂接到-预构建目标)
- 自定义资源被复制到构建中的res目录中(通过挂接到-预编译目标)
- 包名称更改回默认值(通过挂接-编译后目标)
- APK被复制到一个特定的位置,命名为类似客户版本no.APK的东西
这似乎很有效,直到我刚刚写了更改包名称的部分。由于包名称的更改,R类的位置也发生了更改,这意味着当Java类从标准包中导入R类时,构建失败。
我不想有一个改变代码的构建脚本。我希望能够在对任何文件进行最小更改的情况下做到这一点。
Soo。。真正的问题是:
- 我的问题有什么好的/简单的解决方案吗
- 我处理这个问题的方式不对吗?有没有更好的方法可以轻松地将同一应用程序打包给6+不同的客户
您真的需要更改包名称吗?自动更改程序包名称是一件很痛苦的事情。话虽如此,以下是我对问题的解决方案:
我的场景是,我有一个应用程序,它被部署到30-200个不同的已签名APK文件,其中文件之间的唯一区别是一些资源(可提取项、字符串、值等)和包名称。
我通过开发作为模板项目的应用程序的通用版本来实现这一点。一旦这项工作成功并且我准备好部署,我就会调用一个bash脚本,为每个目标循环执行以下步骤:
- 彻底清理项目
- 使用sed交换res目录和包名称
- 建立并签署APK
这平衡了可怕的deply时间和快速发展的时间。我真的看不到比这更优雅/更强大的解决方案了。
最后一个小提示:在android清单中,使用相对的包名称,如".Application",而不是"com.mycompany.myproject.Application"。这样你只需要在一个位置更改包名称。
是否可以通过制作6个以上不同的项目来解决这个问题,这些项目包括您的主要项目。通过这种方式,您可以覆盖资源并制作不同的apk的