当前位置: 首页 > 知识库问答 >
问题:

使用Git和Eclipse为Android应用程序自动编号

洪浩
2023-03-14

我相信电脑是做重复性工作的最好工具。我当然不是,我要么忘了,要么(大多数情况下)没有始终如一地做事——这不是我想要的。

我可能会做的一件事是在发布新版本的Android应用程序时忘记在清单中添加版本信息。在过去,我曾使用过配置好的构建系统,这些系统具有自动版本编号功能,我已经习惯了(或者可能是我太懒了)。

我发现这篇Stackoverflow文章在提出解决方案方面非常有用,但我花了一段时间对它进行了微调,使它按照我想要的方式工作。早期的尝试有时会导致持续建设,这是一种痛苦。所以我想我会在这里发布我的解决方案,希望其他人会发现它有用。

共有1个答案

查学文
2023-03-14

该解决方案是在Linux上开发的。我相信熟练的Windows

Git在Git descripe--dirty命令中有一个很好的特性。它向下扫描提交日志并找到标记,然后从中构建版本字符串。如果这是一个“生产构建”,其中最后一次提交已被标记,并且所有文件都已签入,那么这就是您的版本字符串。如果这是一个开发构建,那么最后一个标记将附加额外提交的数量和一个缩写的哈希代码。--dirty标志只是锦上添花:如果有任何修改过的文件尚未提交,它会附加一个单词dirty。这非常适合清单文件中的android:versionName属性。

对于 android:versionCode,需要一个数字。这需要为发布提供时钟,但不需要为开发构建提供时钟,并且由于每个版本都会有一个带有版本字符串的标签,我只计算这些。我总是以 v 的形式标记我的版本

在跟踪模板清单文件之后,我发现最好的方法是在项目库中简单地使用AndroidManifest.xml文件,使用流编辑器sed编辑,并将结果保存在bin/AndroidManifest.xml中。

因此,我开发了下面的脚本,将其放在与我的项目相同级别的脚本文件夹中(以便它们都可以共享相同的脚本),然后在Eclipse中配置了一个自定义生成器。

有一个脚本,我称之为version.sh

#/bin/bash

echo "Auto Version: `pwd`"

CODE=`git tag | grep -c ^v[0-9]`
NAME=`git describe --dirty | sed -e 's/^v//'`
COMMITS=`echo ${NAME} | sed -e 's/[0-9\.]*//'`

if [ "x${COMMITS}x" = "xx" ] ; then
    VERSION="${NAME}"
else
    BRANCH=" (`git branch | grep "^\*" | sed -e 's/^..//'`)"
    VERSION="${NAME}${BRANCH}"
fi

echo "   Code: ${CODE}"
echo "   Ver:  ${VERSION}"

cat AndroidManifest.xml | \
    sed -e "s/android:versionCode=\"[0-9][0-9]*\"/android:versionCode=\"${CODE}\"/" \
        -e "s/android:versionName=\".*\"/android:versionName=\"${VERSION}\"/" \
    > bin/AndroidManifest.xml

exit 0

要配置生成器,请执行以下步骤:

1). 右键单击项目库并选择“属性”,然后选择“构建器”。

2)。点击“新建”按钮,选择“程序”选项。

3). 将您的版本命名为“

4). 按如下方式配置“主”选项卡:

4a)。在“位置”部分使用“浏览文件系统”,导航并选择脚本文件。

4b)。在“工作目录”部分,使用“浏览工作区”选择项目。

5). 在“刷新”选项卡中不选中“完成后刷新资源”。

6). 不要在“环境”选项卡中设置任何变量。

7). 在“构建选项”选项卡中:

7a)。确保勾选了“手动构建期间”,并且

7b)。“自动构建期间”也被勾选。

7c)。我现在没有选择其他的东西。我甚至没有为它分配控制台。眼尖的人可能已经发现脚本确实输出了一些信息,但是现在我已经让它工作了,我只想让它安静地运行而不打扰我。

8)。确定构建设置,然后将构建器定位在“Android预编译”和“Java构建器”之间。

继续安全地开发你的应用,了解它们正在被正确地版本化,并查看你的应用的信息。版本号是不是很酷。:-)

史蒂夫

 类似资料:
  • 我正在尝试创建Java9的HelloWorld模块,下面给出了以下步骤。 右键单击项目(即com.hello) 右键单击源文件夹(即com.hello) 右键单击包(即com.hello) 右键单击HelloWorld 启动层初始化期间出错 JAVAlang.module。FindException:模块com。你好,没找到 PS:尝试了这个解决方案后,我的项目结构如下 注意:我还注意到一件事。在

  • 我正试图通过Appium、Selenium框架自动化一些在Android设备上运行的移动应用程序测试。我已经在Selenium中设置了测试类,并尝试使用以下所需功能启动android驱动程序。我的Appium版本是1.4.16.1 当我在真正的三星设备上运行测试时,应用程序被打开,然后在打开时立即崩溃,并带有消息,我的测试应用程序是 当我在Appium桌面控制台中查看日志时,我看到以下内容: 请帮

  • 我有一个用Kotlin(android studio)编写的android应用程序和用React Native编写的应用程序的UI。我的问题是这些能联系在一起吗?如果是,怎么做?还有,你们能发布一些我可以通过的链接吗。 附注:我对react Native一无所知。

  • 我一直在努力对我的数据进行自动排序(根据第二行第一列数据进行升序),我通过在线搜索找到了一些提示,但遇到了一个错误,似乎我无法通过网络找到答案。 下面是一个场景: 我有两张床单,一张 这是床单 这是第二张 请注意,两张表中的列lastname和code相同,不同之处在于列的性别(在下拉列表中格式化) 我发现一个脚本似乎可以工作,但我不能完全正常工作,下面是我运行脚本后的输出。 注意红色框中的列,似

  • 我正在寻找支持自动化Windows应用程序,如记事本使用Qmetum自动化框架与BDD步骤。我尝试与Appium驱动程序,但没有工作。 Step1:打开记事本Step2:输入“一些文本”[在这里输入链接描述][1] 成功日志:Windows应用程序驱动程序在以下位置侦听请求:http://127.0.0.1:4723/ 按ENTER键退出。 ============================