- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
到目前为止,我一直专注于我的应用程序的编程,很少关注使构建过程更智能。因此,我一直在手动操作(“笨方法”),包括在 AndroidManifest.xml 中手动更新 android:versionCode
和 android:versionName
。
我现在想自动(即在构建或导出时):
git
获取包含构建和版本代码的最新标签/分支。我发现了一些关于“pre-build 步骤”、 builder 和 build.xml 的线索。 ,但我不知道在哪里可以找到这些以及从哪里开始。
关于我在哪里可以找到有关该主题的更多信息的任何提示或指示? (一个循序渐进的教程是理想的)
更新 1: 我找到了 this thread建议我:
Properties > Builders
很好,但是哪里是项目的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/
当在 python 包中包含外部文件时,我在 MANIFEST.in 中将其定义为 MANIFEST.in include aikif/web_app/static/* 构建包将生成一个 MANIFE
我们使用 java 插件的 manifest 属性将 MANIFEST.MF 文件写入我们的 jar 工件。 我们还使用 gradle 构建 GWT 项目,并且我们为这些项目定义的输出是 zip。我想
感谢您的阅读! 当我做 docker-compose up在 laradock 上,我终于收到了一个类似标题的错误。 在这种情况下,有人知道正确的解决方案吗? 原来我有那个laradock,但我不小心
我收到以下错误,但我的 list 文件没有问题。 我尝试更改项目名称,但更改项目名称后出现此错误。帮助我解决此错误,而无需将项目名称更改回旧名称。 我的旧项目名称是“radio”,我的新项目名称是“M
错误: list 文件没有以最后的换行符结尾... 检查 list 文件是否以最后的换行符结尾(按照 JAR 规范的要求) 应为“:” 这是 AndroidManifest
大家好! 我在部署 Shiny App 时遇到问题。部署应用程序时,我得到以下控制台输出: Preparing to deploy application...DONE Uploading bundl
我开始使用 Android 进行开发。我将 SDK 23 与 Android M 权限的系统一起使用。在互联网的例子中,当我想检查权限时,我发现: this.checkSelfPermission(M
使用 SHA256 摘要标识符 拉取图像失败 最佳答案 不幸的是,这是 DockerHub 删除 Docker 1.9 守护进程的向后兼容性的副作用。当使用 Docker 1.10 推送图像时,较旧的
我正在使用 Next.js 开发一个服务器端渲染网站,我想让它成为一个渐进式 Web 应用程序,但问题是我找不到让它正确发生的方法。 当我构建应用程序时,它可以正确地为 service worker
我在 Windows 上使用 Docker,当我尝试使用此命令提取 PHP 镜像时 $ docker pull php 我收到这条消息: Using default tag: latest lates
我收到错误消息“标记属性包具有无效字符‘’。”在 Android Manifest 中,虽然没有明显的无效字符。这是代码:
我是 JavaScript 开发新手。我正在尝试制作一个可以在 iOS 和 Android 设备上离线运行的应用程序。我在没有示例的情况下学习时遇到困难,而且我找不到满足我需要的示例。 这是我发现的;
我在 Windows 上使用 Docker,当我尝试使用此命令提取 PHP 镜像时 $ docker pull php 我收到了这条消息: Using default tag: latest late
以下是我的代码:。AndroidManifest.xml。在MainActivity.Java中
当我安装 ExtUtils::Manifest 时,perl 推荐我安装 ExtUtils::Manifest。 操作系统为Win10,perl版本为strawberry-perl-5.24.4.1-
我一直在仔细阅读 app.manifest,但我不明白。好吧,我确实知道您需要它来做一些事情,例如:我们确实需要和使用。但还有这个: 这是我没有得到的部分,我可以将其忽略而不会有任何后果,对吗?我们
我创建了一个类如下: #include #define DLLEXPORT _declspec( dllexport ) using namespace std; class DLLEXPORT
我在使用webpack运行应用程序时遇到问题,出现以下错误: URIError: Failed to decode param '/%PUBLIC_URL%/manifest.json' at
我可以使用 Java 执行此操作吗? 我指的是 在 Android list 中 如果不能,我至少可以提供可供用户选择的替代方案吗? 最佳答案 看this and the asker referen
使用maven得到编译好的*.war文件,其中包含: - META-INF - - MANIFEST.MF - WEB-INF - - classes - - lib - - web.xml 使用 j
我是一名优秀的程序员,十分优秀!