gpt4 book ai didi

android - 如何在构建期间自动修改 Manifest 中的 versionName?

转载 作者:IT老高 更新时间:2023-10-28 22:14:41 29 4
gpt4 key购买 nike

到目前为止,我一直专注于我的应用程序的编程,很少关注使构建过程更智能。因此,我一直在手动操作(“笨方法”),包括在 AndroidManifest.xml 中手动更新 android:versionCodeandroid:versionName

我现在想自动(即在构建或导出时):

  1. git 获取包含构建和版本代码的最新标签/分支。
  2. 解析它们,以便我可以将它们分配给 AndroidManifest.xml 中的相应字段。
  3. 相应地修改 AndroidManifest.xml。
  4. 继续正常的构建过程(Eclipse+ADT,没有任何 Ant),就好像我手动完成了 1-2-3...

我发现了一些关于“pre-build 步骤”、 builder 和 build.xml 的线索。 ,但我不知道在哪里可以找到这些以及从哪里开始。

关于我在哪里可以找到有关该主题的更多信息的任何提示或指示? (一个循序渐进的教程是理想的)

更新 1: 我找到了 this thread建议我:

  1. 右击项目,Properties > Builders
  2. 添加一个指向项目的 Ant 构建文件的构建器。
  3. 在 Java 构建器之前调用该构建器

很好,但是哪里是项目的Ant构建文件?我在哪里可以找到它?

更新 2: 显然,export the entire project into an Ant file 是可能的.但我不确定那是我想要的。预构建步骤必须始终包含 Ant build file ?

更新 3: 正在构建 Ant 文件,only for the pre-build step ,正确的方法?

最佳答案

这是我用来将 versionCode 和 versionName 动态分配给 AndroidManifest.xml 的方法。它仅在使用 ant 构建时才有效,因此您必须先安装它。然后在命令行中进入项目目录并执行“android update project -p.”,这将创建使用ant 构建所需的文件,例如local.properties 和build.xml。

然后打开 build.xml 并将其放入:

  <target name="-pre-build" depends="-custom-git-version,-custom-manifest-version">
</target>

<!-- Packages the application. -->
<target name="-post-build">
<antcall target="-custom-restore-manifest"/>

<property name="suffix" value="${git.commits}-${git.version}.apk" />

<exec executable="sed" inputstring="${out.final.file}" outputproperty="out.final.renamedfile">
<arg value="s/\.apk/-${suffix}/" />
</exec>

<copy file="${out.final.file}" tofile="${out.final.renamedfile}" />
<echo>Final file copied to: ${out.final.renamedfile}</echo>
</target>

<!-- Custom targets -->
<target name="-custom-git-version">
<exec executable="sh" outputproperty="git.commits">
<arg value="-c" />
<arg value="git log --pretty=format:'' | wc -l" />
</exec>
<echo>git.commits: ${git.commits}</echo>
<exec executable="git" outputproperty="git.version">
<arg value="describe" />
<arg value="--tags" />
<arg value="--long" />
</exec>
<echo>git.version: ${git.version}</echo>
</target>

<target name="-custom-manifest-version">
<echo>Creating backup of AndroidManifest.xml</echo>
<copy file="AndroidManifest.xml" tofile="AndroidManifest.xml.antbak" preservelastmodified="true" />

<replaceregexp
file="AndroidManifest.xml"
match='android:versionCode="(\d+)"'
replace='android:versionCode="${git.commits}"' />

<replaceregexp
file="AndroidManifest.xml"
match='android:versionName="(\d+\.\d+)\.\d+"'
replace='android:versionName="\1.${git.commits}"' />
</target>

<target name="-custom-restore-manifest">
<echo>Restoring backup of AndroidManifest.xml</echo>
<move file="AndroidManifest.xml.antbak"
tofile="AndroidManifest.xml"
preservelastmodified="true"
overwrite="true" />
</target>

这个输出并不完全是你想要的,但它是一个开始 - 随意修改它:) 结果类似于“yourapp--.apk

使用它,您将根据需要执行“ant clean debug”或“ant clean release”来构建应用程序。您还可以使用以下内容创建“ant.properties”文件:

key.store=keystore_file
key.store.password=some_password
key.alias=some_alias
key.alias.password=some_other_password

启用应用的自动签名。

您还应该阅读以下内容:http://developer.android.com/tools/building/building-cmdline.html

关于android - 如何在构建期间自动修改 Manifest 中的 versionName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426750/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com