android - 将 Android 项目构建到不同的包

标签 android ant build-automation

我正在尝试寻找为 6 个以上不同客户构建/打包 Android 应用程序的最佳方法。我可以在 SVN 中为所有客户使用不同的分支,但应用程序之间的唯一区别是资源文件夹中的一些值(可绘制对象、字符串等)。

我编写了一个导入标准 Android build.xml 的 ant 脚本。该脚本执行以下操作:

  1. 从属性文件中读取客户名称。
  2. 为每个客户完成以下操作:
    1. 更改了 AndroidManifest.xml 中的包名称(通过挂接到 -pre-build 目标)。
    2. 自定义资源被复制到构建中的 res 目录中(通过挂接到 -pre-compile 目标)。
    3. 包名称改回默认值(通过挂接到 -post-compile 目标)。
    4. APK 被复制到一个特定的位置,名称类似于 customer-versionno.apk

在我刚刚编写更改包名称的部分之前,这似乎工作得很好。由于包名称更改,R 类的位置也发生了更改,这意味着构建失败,因为 Java 类从标准包中导入了 R 类。

我不想有一个改变代码的构建脚本。我希望能够在对任何文件进行最少更改的情况下执行此操作。

Soo..问题真的是:

  1. 我的问题有什么好的/简单的解决方案吗?
  2. 我是不是以错误的方式解决了这个问题?是否有更好的方法可以轻松地将同一个应用打包给 6 个以上的不同客户?

最佳答案

您真的需要更改包名称吗?自动更改包名称是一件很痛苦的事情。话虽如此,这是我对问题的解决方案:

我的场景是我有一个应用部署到 30-200 个不同的签名 APK 文件,其中文件之间的唯一区别是一些资源(可绘制对象、字符串、值等)和包名称。

我通过处理用作模板项目的应用程序的通用版本来实现这一点。一旦成功并且我准备好部署,我将调用一个 bash 脚本,该脚本为每个目标循环执行以下步骤:

  1. 彻底清理项目
  2. 使用 sed 交换 res 目录和包名称。
  3. 构建并签署 APK

这平衡了可怕的部署时间和快速的开发时间。我真的没有看到比这更优雅/更强大的解决方案。

最后是一个小提示:在 android list 中使用相对包名称,如“.Application”而不是“com.mycompany.myproject.Application”。这样您只需在一个位置更改包名称。

关于android - 将 Android 项目构建到不同的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9800848/

相关文章:

android - 从通知 Intent 中删除数据

java - 使用整数数组 Android 获取布局

Jenkins - 构建管道 - 使用 Join Plug 后显示不需要的作业

android - java.lang.IndexOutOfBoundsException:无效的索引2,大小为2

android - appcompat 25.1.1 在 android studio 2.3 中显示错误

java - 使用 intellij IDEA 从 Selenium + JUnit 生成 ANT 结果报告

android - antcall 目标 ="release"与 google-play-services_lib 中断

java - 为什么 Ant Exec 任务返回代码与 ERRORLEVEL 值不匹配?

python - 从 python 启动 vs2008 构建

java - 如何使用 Maven 创建具有依赖项的可执行/可运行 JAR?