2012-08-29 44 views
4

我正在开发Android应用程序,我希望为市场中的不同语言提供几种不同的应用程序(每种语言都包含一大堆文件,我希望避免创建一个包含所有语言包的巨大apk )。自定义Android Manifest的部分

所以我需要的是为每种语言定制一份Manifest文件:应用程序包以及可能的应用程序版本等。我知道如何对清单进行模板化,以便我可以手动将值插入文件中的某些点(请参阅this post)。问题在于我使用ant来准备我的生产证书,但是除此之外,我使用Eclipse进行开发,所以我也需要我的项目在IDE中工作。 Eclipse需要完整的Manifest文件,并且不会理解我将用于蚂蚁构建的模板,据我所知(请有人证明我错了)。

我的问题是,我想避免维护大部分相同的两个清单文件(一个模板和一个完整的Eclipse)。目前我能想到的两种可能的方法,但我不知道如何去实现它们:

  • 使用某种类型的定义注入清单文件的:如果我能够注入一定的XML文件中AndroidManifest的身体文件,我可以将相同的部分保留在一个xml部分中,并仅定制差异点
  • 如果可以配置Eclipse以使用某些序列的ant任务来构建Android项目而不是预构建例程,那么我可能能够整合我在IDE中构建我的生产应用程序的方式。

如果有人知道如何完成上述任何一项或有任何其他想法,我该如何解决我的问题:帮助!

+0

基本上你问我们是否能有将由Eclipse中被接受为值的键,将由构建脚本来代替吗? –

回答

2

以蚂蚁看看替换任务:

<replace file="${build.out}/src/config.prop" token="@@@" value="${build.version}-${build.type}"/> 

但同样,你应该小心,他们是唯一的值。

您还可以使用echoxml任务将生成的清单替换为您的eclipse清单。

或者你可以重新使用这个不错的task关于xml操作。

+0

谢谢你的快速回答!我需要一些时间来验证其有效性,请耐心等待。 –

+0

我只想一提的是,我变成了需要补充大量的举动任务,因为基本上我所有的java文件需要相应地改变包装。尽管如此,你的建议就像一种魅力!谢谢! –

+0

欢迎您:) –

2

在我工作的公司,我们非常使用Eugen给出的方法来自动化应用程序的构建过程,例如,应该简单地通过交换特定的资产,样式,字符串和配置来改变品牌。我们倾向于设置项目和构建过程如下:

  1. 创建Android项目并将其设置为可用于特定品牌。这将确保您仍然可以从Eclipse构建和运行。假设代码库在不同品牌版本之间不会改变,那应该没问题。
  2. 创建一个Ant构建配置:
    1. 副本即会任何文件被改变到一个备份目录
    2. 根据配置文件修改项目文件(见下文)
    3. 编译项目源与释放键的标志(如果做一个发布版本)
    4. 副本从步骤1备份文件,覆盖任何变化,该项目返回其原始状态
  3. 为您的方案中的每个“品牌”或语言特定版本创建配置文件。

基本上这些步骤将允许您通过简单地使用ant build命令提供适当的配置来创建品牌/合作伙伴/语言特定的版本。在我们的情况下,它看起来有点像这样:

ant partner-release -Dpartner=stackoverflow 

其中,“计算器”将指向配置使用相同的名称。在我们的例子中,这些配置文件是小型的xml文件,其中包含要为特定版本替换的所有参数。它可以包含字符串,但也可能指向应该复制到资产/资源中的其他文件(例如徽标图像)。例如:

<config> 
    <version_name>1.00</version_name> 
    <version_code>1</version_code> 
    ... 
</config> 

一些更多的指针:

  • 我们使用xmltask修改项目中的任何XML文件;例如清单和资源。
  • 由于上述的任务是很容易使用,我们构建配置文件也被设置为XML文件,如上图所示。这是相当人性化的,易于改变,简单直接。
  • 您还可以使用replaceReplaceRegExp任务改变几乎任何文件配置相关的变量。后者可以特别方便地对源代码进行构建时更改。
+0

谢谢您的回答。不过我想补充一点,如果你在构建过程中引入Jenkins,事情会变得更加简单。我个人完成我的工作只使用很少的蚂蚁任务,基本上把我所有的文件复制到新的包中。另外,当我使用ant时,我认为属性文件比xml文件更方便。 –