看起来,让同一个应用程序具有不同内容(或样式或配置)的普遍接受的方式是使用 Android 库项目的公共代码(即:整个应用程序、“引擎”、“应用程序框架”)和内容的标准 Android 应用程序项目(即:实际上只包含数据的应用程序)。有点混乱,只是因为这里的“库”实际上是整个“应用程序”,但这似乎是要走的路。
更详细:
- 创建一个 Android 库应用程序并在其中放入尽可能多的代码(所有不变的东西)。请注意,此库无法启动,也无法单独分发。它必须包含在托管应用程序中。
- 创建一个标准的 Android 应用程序。将您的库包含到此项目中。将所有数据(文件、XML 等)放入 /res 和 /asset 中。
- 编译一切并分发。
每次需要不同版本时重复此循环。由于数据、样式、配置或其他任何因素而有所不同。使用新名称发布生成的应用程序。
至于我,我对这种方法并不完全满意。
一种可能的替代方法是使用 Ruby、Python、Perl、GIT、bash、Ant、Maven、Rake 或任何其他能够从此处读取文件、在此处和此处进行一些更改并在此处写入文件的工具对源代码进行预处理.
大致的轮廓是这样的:
- 制作一个“模板”应用程序。将您的 /res 和 /asset 留空。
- 运行自定义脚本。该脚本读取配置文件,将 /res 和 /asset 文件从存储库复制到项目 /res 和 /asset 目录,更改一些 Java 源文件并创建/更改一些 XML 文件。
- 编译和分发(当然用一个新名称)。
使用 GIT 或其他 SCM,您只需为每个新版本创建一个新分支并编译它。不是很优雅(因为它会强烈干扰 SCM 的正常使用)但是......
在网络上有一些这些方法的例子。我对他们也不完全满意。
坦率地说,为了解决这个问题,Android 生态系统应该提供某种“应用内包管理器”。类似于 Eclipse 更新管理器。这将允许我们使用相同的应用程序框架来处理不同的场景。
作为替代方案,一个可靠的、官方支持的、基于模板的代码生成机制会很好。本着“软件生产线”精神的东西:https ://en.wikipedia.org/wiki/Software_production_line 。查看 fw4spl,例如:http ://code.google.com/p/fw4spl/ 。