这是一个使用 Ant 的解决方案。我必须承认,设置 Ant 有点麻烦,但它似乎是 Eclipse 的一个广泛使用且功能强大的附件,所以我相信它在其他方面对我来说会很有价值。
Ant 是在不使用 Eclipse 的情况下构建 Android SDK 应用程序的首选解决方案(如此处所述),但它不是 ADT 的一部分,因此如果您刚刚使用 Eclipse,您可能不会拥有它。
所以,第一步是从这里下载并安装 Ant 。
接下来将 Ant 添加到您的路径中,并确保您的路径也指向 JDK(而不是 JRE)。在 Windows 上,我发现我还必须创建 JAVA_HOME 并将其指向 JDK 的根目录。
我们只需要 Ant 进行自动增量步骤 - 目的不是替换 Eclipse 并将其用于整个构建 - 但朝这个方向执行一些步骤以确保 Ant 正常工作很有用。因此,转到项目的根目录并键入
> android update project --path .
这将为您的项目创建一个 build.xml。一旦我做到了,我就能做到
> ant release
Ant 构建了我的项目。如果你想继续朝着这个方向前进,我发现这篇文章很有用。
接下来,我编辑了我的项目的新 build.xml 并添加了以下任务(它可以去任何地方,只是不在另一个任务/目标的中间)
<target name="update.buildnum">
<buildnumber/>
<!-- this task creates (and increments) Ant property 'build.number' which I use below -->
<echo>Current build number:${build.number}</echo>
<echoxml file="res/values/buildnum.xml">
<resources>
<string name="buildnum">${build.number}</string>
</resources>
</echoxml>
</target>
上面使用的任务会自动增加项目根目录中名为“build.number”的文件(它将创建)中的内部版本号。上述任务的其余部分将当前内部版本号放入资源字符串中,以便您的应用程序可以使用以下代码检索它:
String build = context.getString( com.your.app.R.string. buildnum );
int appBuild = ( int ) Integer.parseInt( build );
有些人更喜欢将内部版本号写入 AndroidManifest.xml 中的应用程序代码的解决方案。 这是一个包含执行此任务的任务的答案,但它需要一个 3rd 方 Ant 任务(xmltask),而且我有点犹豫是否让第 3 方任务在每个构建中修改我的清单(现在非常庞大) . 如果您决定使用该任务,那么获取内部版本号的相应 Android 代码将是:
String packageName = ctx.getPackageName();
PackageInfo pInfo = ctx.getPackageManager().getPackageInfo( packageName, 0);
int appVer = pInfo.versionCode;
最后,您需要在每次构建时让 Eclipse 运行这个 Ant 任务。
转到项目的属性,找到 Builders,然后单击按钮添加一个新的 Builder。这里有很多选项,但您只需要指定几个。
- 通过设置Name:字段为构建器命名。
- 选择构建文件: . 我使用“浏览工作区”选项来选择它,然后用“${workspace_loc:/appname/build.xml}”填充该字段
- 从目标选项卡上的列表中选择目标。在我的情况下,我必须删除“帮助”任务(上面生成的 build.mxl 中的默认任务),然后添加“build.number”任务。我建议你只为Manual Build:设定一个目标。
我将新的 Builder 移动为第一个构建步骤。
此解决方案的一个问题是,每次让 Eclipse 部署(运行)应用程序时,它都被视为新的手动构建,即使项目没有更改。因此,如果您将应用程序部署到多个设备,每个设备将具有不同的内部版本和自己的内部版本号。可以稍微改善这个问题的一件事是,谷歌表示未来的 ADT 将允许在一个操作中进行多次部署。
这(上图)在 Win7 32 位上使用 Ant 1.8.4、Eclipse Indigo SR2 (3.7.2)、ADT 20 preview 2 和 SDK Tools 20 进行了测试。