自动增加 Android App 的版本号
一般的 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 的版本号的更多相关文章
- Ionic4.x、Cordova Android 检测应用版本号、服务器下载文件以及实现App自动升级、安装
Android App 升级执行流程 1.获取本地版本号 2.请求服务器获取服务器版本号 3.本地版本和服务器版本不一致提示升级,弹窗提示用户是否更新 4.用户确定升级,调用文件传输方法下载 apk ...
- Android App版本自动更新
App在开发过程中,随着业务场景的不断增多,功能的不断完善,早期下载App的用户便无法体验最新的功能,为了能让用户更及时的体验App最新版本,在App开发过程加入App自动更新功能便显得尤为重要.更新 ...
- 如何自动增加和从代码读取Xcode项目的版本号
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Xcode项目和版本号相关的有2个地方Version和Buil ...
- Android(2)—Mono For Android App版本自动更新
0.前言 公司Android查询的项目已经开始,整体采用Java后台+App前台来实现,由于项目小,App这块就我一个人开发,首先需要研究的是:Android版本的更新升级问题:本人经过近一周的学习整 ...
- C#获取程序集自动增加的版本号和编译时间
1. 首先找到文件AssemblyInfo.cs, 路径如下: 2. 修改版本的格式,修改后,程序每次编译,程序集的版本号都会自增. 修改前: [assembly: AssemblyVersion(& ...
- Android App自动更新解决方案(DownloadManager)
一开始,我们先向服务器请求数据获取版本 public ObservableField<VersionBean> appVersion = new ObservableField<&g ...
- Android APP压力测试(二)之Monkey信息自动收集脚本
Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...
- Android APP性能分析方法及工具
近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...
- 【Bugly安卓开发干货分享】Android APP 快速 Pad 化实现
项目背景 采用最新版本手机 APP(之后称为 MyApp)代码,实现其 Pad 化,为平板和大屏手机用户提供更好的体验.为实现 MyApp 的 Pad 化工作,需要我们首先来了解一下 MyApp 项目 ...
- 一看就懂的Android APP开发入门教程
一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤 ...
随机推荐
- HashMap的哈希函数为何用(n - 1) & hash
前言 在上一篇 Java 中HashMap详解(含HashTable, ConcurrentHashMap) 中提到在map.put(key, value)的过程中,计算完key的hash值, 是通过 ...
- 《Win10——如何进入高级启动选项》
Win10--如何进入高级启动选项 第一种方法: 管理员命令提示符输入如下代码,自动重启并进入高级启动选项. shutdown /r /o /f /t 00 第二种方法: 1. 管 ...
- Python数据科学手册-机器学习之模型验证
模型验证 model validation 就是在选择 模型 和 超参数 之后.通过对训练数据进行学习.对比模型对 已知 数据的预测值和实际值 的差异. 错误的模型验证方法. 用同一套数据训练 和 评 ...
- 官方使用logstash同步Mysql数据表到ES的摘抄
官方文档地址:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#plugins-inputs-jdbc ...
- MySQL学习(3)---MySQL常用命令
ps:此随笔基于mysql 5.7.*版本. 准备 net start mysql 启动MySQL服务 net stop mysql 关闭MySQL服务 mysql [-h<IP地址>] ...
- 使用css制作轮播图
<!--HTML代码--> <!DOCTYPE html> <html lang="en"><head> <meta char ...
- HTML5中新增实用的标签
1:progress 进度条 <h3>progress</h3> <progress value="75" max="100"& ...
- Vue+vant移动端处理弹窗不能滑动问题
自己在做项目开发时,使用vantUI组件,在项目中遇到了弹窗组件里面当内容过多时,会出现滚动卡顿或者不能滚动问题,开始一直以为是自己的样式写的有问题,检查下来才发现并不是,而是弹窗组件的问题,于是找到 ...
- 图解 | 聊聊 MyBatis 缓存
首发公众号-悟空聊架构:图解 | 聊聊 MyBatis 缓存 你好,我是悟空. 本文主要内容如下: 一.MyBatis 缓存中的常用概念 MyBatis 缓存:它用来优化 SQL 数据库查询的,但是可 ...
- PHP配置负载均衡
我项目是用宝塔面板.所以这次用宝塔面板演示. 环境: LNMP 代码:2套.2套代码除了配置其他都是一样 域名:1个.2级域名.其实一级二级都没关系 /************************ ...