一般的 C# 应用程序中都有一个 AssemblyInfo.cs 文件,其中的 AssemblyVersion attribute 就可以用来设置该应用程序的版本号。譬如,

[assembly: AssemblyVersion("1.0.*")]

  

这样设置的 AssemblyVersion attribute,其版本号中的构建编号(Build Number),在每次编译(Build)该应用程序时,就会自动加1。这样,版本号中的主、次版本号由手动设置,而构建编号由编译程序(MSBuild)自动管理,省去了很多麻烦。

但 Android App 的版本号却无法使用这种方式,因为 Android App 的版本号存在于 AndroidManifest.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="3" android:versionName="1.0"
package="mypackage"
android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="31" />
<application android:label="MyPackage.Android"
android:theme="@style/MainTheme"
android:allowBackup="false">
</application>
</manifest>

  

在这个 AndroidManifest.xml 文件中,App 的版本号(versionName)是“1.0”,构建编号(versionCode)是“3”。我们希望能够像 C# 程序一样,由编译程序自动管理构建编号。但似乎还没有这样实现自动管理的编译程序,所以只能自己动手实现类似的功能。

网上找到了一段C#代码,可以完成自动增加 versionCode 的功能:

////////////////////////////////////////////////////////
// AutoVersion
// Increment the Android VersionCode automatically
// Version
// 1.0
// Author
// prowyh@hotmail.com
// Date
// 2022-11-22
// Curtesy
// 9to5answer.com/auto-increment-version-code-in-android-app
//////////////////////////////////////////////////////// using System.Text.RegularExpressions; namespace AutoVersion
{
internal class Program
{
static void Main(string[] args)
{
string file = "AndroidManifest.xml";
if (args.Length > 0) { file = args[0]; } try
{
string text = File.ReadAllText(file);
Regex regx = new(@"(?<A>android:versionCode="")(?<VER>\d+)(?<B>"")", RegexOptions.IgnoreCase);
Match match = regx.Match(text);
int verCode = int.Parse(match.Groups["VER"].Value) + 1;
string ntext = regx.Replace(text, "${A}" + verCode + "${B}", 1); File.WriteAllText(file, ntext);
}
catch (Exception exp)
{
using StreamWriter sw = new("AutoVersion.log");
sw.Write(exp.Message);
}
}
}
}

  

将此代码编译为 AutoVersion.exe,将其包括在 Visual Studio 的 pre-build 事件所执行的命令行中(如下图),即可。

这样,每次点击 “Build Solution” 进行编译时,都会先执行 AutoVersion.exe,完成对 AndroidManifest.xml 中 versionCode 的自动增1 操作。

下面是 AutoVersion.cs 的 PowerShell 版本:

<#
.SYNOPSIS
AutoVersion.ps1
.DESCRIPTION
PowerShell script for automatically incrementing the Android VersionCode.
.VERSION
1.0
.AUTHOR
prowyh@hotmail.com
.DATE
2022-11-22
#>
$content = Get-Content AndroidManifest.xml
[regex]$rx = "(?<A>android:versionCode="")(?<VER>\d+)(?<B>"")"
$m = $rx.Matches($content)
$nv = $([System.Int32]$m[0].Groups["VER"].Value + 1)
$nvCode = $m[0].Groups["A"].Value, $nv, $m[0].Groups["B"].Value -join ""
$content -replace "android:versionCode=""(\d+)""", $nvCode | Out-File -FilePath AndroidManifest.xml

  

自动增加 Android App 的版本号的更多相关文章

  1. Ionic4.x、Cordova Android 检测应用版本号、服务器下载文件以及实现App自动升级、安装

    Android App 升级执行流程 1.获取本地版本号 2.请求服务器获取服务器版本号 3.本地版本和服务器版本不一致提示升级,弹窗提示用户是否更新 4.用户确定升级,调用文件传输方法下载 apk ...

  2. Android App版本自动更新

    App在开发过程中,随着业务场景的不断增多,功能的不断完善,早期下载App的用户便无法体验最新的功能,为了能让用户更及时的体验App最新版本,在App开发过程加入App自动更新功能便显得尤为重要.更新 ...

  3. 如何自动增加和从代码读取Xcode项目的版本号

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Xcode项目和版本号相关的有2个地方Version和Buil ...

  4. Android(2)—Mono For Android App版本自动更新

    0.前言 公司Android查询的项目已经开始,整体采用Java后台+App前台来实现,由于项目小,App这块就我一个人开发,首先需要研究的是:Android版本的更新升级问题:本人经过近一周的学习整 ...

  5. C#获取程序集自动增加的版本号和编译时间

    1. 首先找到文件AssemblyInfo.cs, 路径如下: 2. 修改版本的格式,修改后,程序每次编译,程序集的版本号都会自增. 修改前: [assembly: AssemblyVersion(& ...

  6. Android App自动更新解决方案(DownloadManager)

    一开始,我们先向服务器请求数据获取版本 public ObservableField<VersionBean> appVersion = new ObservableField<&g ...

  7. Android APP压力测试(二)之Monkey信息自动收集脚本

      Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...

  8. Android APP性能分析方法及工具

    近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...

  9. 【Bugly安卓开发干货分享】Android APP 快速 Pad 化实现

    项目背景 采用最新版本手机 APP(之后称为 MyApp)代码,实现其 Pad 化,为平板和大屏手机用户提供更好的体验.为实现 MyApp 的 Pad 化工作,需要我们首先来了解一下 MyApp 项目 ...

  10. 一看就懂的Android APP开发入门教程

    一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤 ...

随机推荐

  1. 【Vue学习笔记】—— vuex的语法 { }

    学习笔记 作者:o_Ming vuex Vuex ++ state ++ (用于存储全局数据) 组件访问 state 中的全局数据的方式1: this.$store.state.全局数据 组件访问 s ...

  2. centos7部署k8s(1master1node)

    〇.前言 就想多学学罢了 准备环境: centos7 master 8GB 172.26.130.204 centos7 node 8GB 172.26.130.205 yum源就阿里源就好... 一 ...

  3. 企业运维实践-丢弃手中的 docker build , 使用Kaniko直接在Kubernetes集群或Containerd环境中快速进行构建推送容器镜像

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 首发地址: h ...

  4. winfrom杀死进程及关闭进程

    ProcessStartInfo process = new ProcessStartInfo(); process.FileName = AppDomain.CurrentDomain.BaseDi ...

  5. Windows 11 新材质 Mica Alt 效果展示

    本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,若内容出现冲突以 GitHub 上的为准. 微软在 2022-09-02 更新了官方文档, ...

  6. Python数据科学手册-机器学习: 主成分分析

    PCA principal component analysis 主成分分析是一个快速灵活的数据降维无监督方法, 可视化一个包含200个数据点的二维数据集 x 和 y有线性关系,无监督学习希望探索x值 ...

  7. Python数据科学手册-Numpy入门

    通过Python有效导入.存储和操作内存数据的技巧 数据来源:文档.图像.声音.数值等等,将所有的数据简单的看做数字数组 非常有助于 理解和处理数据 不管数据是何种形式,第一步都是 将这些数据转换成 ...

  8. echarts BAR堆叠图显示百分比

    在使用echarts的堆叠图时,我们鼠标悬停的浮窗里的信息可能并不是我们想要的信息,这个时候需要我们配置一下,因为堆叠图的trigger的类型是坐标轴触发的,数据是多组数据,所以我们需要遍历一下数据, ...

  9. .NET 反向代理 YARP 代理 GRPC

    前面的 YARP 文档中,介绍了怎么去代理 http,和如何根据域名转发,而在现在微服务的应用是越来越来多了,服务间的调用依靠 http 越来越不现实了,因为 http 多次握手的耗时越发的影响应用的 ...

  10. KMP模式匹配 学习笔记

    功能 能在线性时间内判断字符串\(A[1~N]\)是否为字符串\(B[1~M]\)的子串,并求出字符串\(A\)在字符串\(B\)中各次出现的位置. 实现 1.对字符串\(A\)进行自我"匹 ...