Android使用gradle自动获取svn版本号

由于我们公司项目在内网开发版本控制使用的是svn,为了方便测试同学提bug,以及开发同学及时定位bug,需要自动获取svn版本号。亲测有效,

1、Project层下的 build.gradle 文件 引入svn插件

1
classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.8.11'

在我的项目中如下:

1
2
3
4
5
6
7
8
9
10
11
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.8.11'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

2、Module层下的 build.gradle 文件加入以下两个步骤中内容:

2.1、在文件第一行导包
1
import org.tmatesoft.svn.core.wc.*
2.2、定义函数
1
2
3
4
5
6
7
8
def getSvnRevision() {
ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
SVNClientManager clientManager = SVNClientManager.newInstance(options);
SVNStatusClient statusClient = clientManager.getStatusClient();
SVNStatus status = statusClient.doStatus(projectDir, false);
SVNRevision revision = status.getCommittedRevision();
return revision.getNumber();
}

在我的项目中整体如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import org.tmatesoft.svn.core.wc.*
apply plugin: 'com.android.application'
//通过svnKit自动获取svn版本号
def getSvnRevision() {
ISVNOptions options = SVNWCUtil.createDefaultOptions(true)
SVNClientManager clientManager = SVNClientManager.newInstance(options)
SVNStatusClient statusClient = clientManager.getStatusClient()
SVNStatus status = statusClient.doStatus(projectDir, false)
SVNRevision revision = status.getCommittedRevision()
return revision.getNumber()
}
android {
compileSdkVersion 23
buildToolsVersion '26.0.2'
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
lintOptions {
abortOnError false
}
defaultConfig {
applicationId "com.citicbank.comb"
minSdkVersion 15
targetSdkVersion 16
versionCode 2
versionName "${getSvnRevision()}" //调用方法获取svn版本号
}

3、java代码中获取svn版本号

主要是通过PackageManager获取PackageInfo,从而获取svn版本号,在需要svn版本号的地方,只需调用此方法即可

1
2
3
4
5
6
7
8
9
10
11
public static String getVersionName(Context context) {
PackageManager packageManager = context.getPackageManager();
PackageInfo packInfo = null;
try {
packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
String version = packInfo.versionName;
return version;
}