Android Studio利用Build.gradle导入Git commit ID、Git Branch、User等版本信息
创始人
2024-01-29 16:28:32
0

文章目录

    • 1. 前言
    • 2. 实现方法
      • 2.1 添加BuildConfig成员变量
      • 2.2 实现gradle接口函数
      • 2.3 关键部分
        • 2.3.1 接口及接口转换
        • 2.3.2 实现Java接口
    • 3. 调用演示
      • 3.1 调用代码
      • 3.2 运行情况
        • 3.2.1 分支情况:git brach -a
        • 3.2.2 提交记录:git lg
        • 3.2.3 成功的打印

1. 前言

Android Studio的APP开发即便使用VERSION_CODE来记录版本信息,依旧觉得麻烦,希望找到一种在编译时,自动将版本信息无误的加入到APK中的方法,毫无疑问,这需要修改编译脚本来辅助实现,而在AS中,自然是通过gradle脚本来实现。本文及详细介绍实现的方法和步骤,以及最终的演示效果。

2. 实现方法

2.1 添加BuildConfig成员变量

文件名: tvass\gradle.properties
添加Buildconfig成员变量

GIT_COMMIT_ID=0
GIT_BRANCH_NAME=master
GIT_USER=empty

2.2 实现gradle接口函数

tvass\app\build.gradle
添加方法,用于给Buildconfig变量赋值

apply plugin: 'com.android.application'//获取short版本的 git commit id
def getGitRevision() {return "git rev-parse --short HEAD".execute().text.trim()
}//获取分支名称
def getGitBranch(){def branchNamedef branch =  "git branch --contains HEAD".execute().text.trim()def index = branch.indexOf('*')if(index == -1){branchName = "master"}else{branchName = branch.substring(index+2)}println "branchName  "+branchNamereturn branchName
}//获取编译人员 user.name
def getGitUser(){return "git config --global --get user.name".execute().text.trim()
}

2.3 关键部分

2.3.1 接口及接口转换

tvass\app\build.gradle
android的BuildTypes内,添加

buildTypes {release {//在Build.gradle执行期间,给新增的Buildconfig的成员变量赋值GIT_COMMIT_ID = getGitRevision()GIT_BRANCH_NAME = getGitBranch()GIT_USER = getGitUser()//定义给JAVA使用的接口名称、参数类型buildConfigField "String", "gitCommitId", "\"${GIT_COMMIT_ID}\""buildConfigField "String", "gitBranchName", "\"${GIT_BRANCH_NAME}\""buildConfigField "String", "getGitUser", "\"${GIT_USER}\""minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.release}debug {//同楼上 release 说明GIT_COMMIT_ID = getGitRevision()GIT_BRANCH_NAME = getGitBranch()GIT_USER = getGitUser()buildConfigField "String", "gitCommitId", "\"${GIT_COMMIT_ID}\""buildConfigField "String", "gitBranchName", "\"${GIT_BRANCH_NAME}\""buildConfigField "String", "getGitUser", "\"${GIT_USER}\""minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.debug}}

2.3.2 实现Java接口

在自己的工具类中,添加Java函数,获取Git版本信息
文件:tvass\app\src\main\java\com\xxx\tvass\tool\Tools.java

import com.xxx.tvass.BuildConfig;
public class Tools {//调用 2.3.1 导出到java的接口public static String getGitVersion(){return  String.format(Locale.CHINA, "APP版本信息:VERSION_CODE=%d, VERSION_NAME=%s, " +" Git CommitID=CL#%s,Branch:%s, Producted By:%s",BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME,BuildConfig.gitCommitId, BuildConfig.gitBranchName, BuildConfig.getGitUser);}
}

3. 调用演示

3.1 调用代码

public class BootBroadcastReceiver extends BroadcastReceiver {private static final String TAG = BootBroadcastReceiver.class.getSimpleName();@Overridepublic void onReceive(Context context, Intent intent) {//18006RLog.i(TAG,"tvass: "+ Tools.getGitVersion());if (Intent.ACTION_LOCKED_BOOT_COMPLETED.equals(intent.getAction())) {

3.2 运行情况

3.2.1 分支情况:git brach -a

Windows PowerShell
版权所有(C) Microsoft Corporation。保留所有权利。安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindowsPS C:\Users\66176\Documents\works\mt9652\all_app\tvass> git branch -amaster_combiecode
* masterremotes/origin/HEAD -> origin/masterremotes/origin/masterremotes/origin/master_xxx
PS C:\Users\66176\Documents\works\mt9652\all_app\tvass>

3.2.2 提交记录:git lg

PS C:\Users\66176\Documents\works\mt9652\all_app\tvass> git lg
* 3516551 - (HEAD -> master, origin/master, origin/HEAD) 合并master与master_combiecode分支差异,添加APP版本打印 (16 hours ago) 
…… 省略 ……
* 501341c - init 20220713  (3 months ago) 
PS C:\Users\66176\Documents\works\mt9652\all_app\tvass>

3.2.3 成功的打印


11-18 09:40:38.373  5216  5216 I szhou   : \n
BootBroadcastReceiver-----tvass: \n
APP版本信息:VERSION_CODE=1, VERSION_NAME=1.0,  Git CommitID=CL#3516551,Branch:master, Producted By:zhoushang

相关内容

热门资讯

让更多人走进赛场、体验“十五运...   第十五届全国运动会8月1日将迎来开幕式倒计时100天。7月25日,国务院新闻办举行新闻发布会,介...
​现金流量套期与公允价值套期会... 现金流量套期与公允价值套期会计处理有何区别公允价值套期和现金流量套期的区别主要体现在套期对象、目的和...
保民生、促消费,财政政策有力度... 数据来源:国家发展改革委、财政部  7月25日,财政部召开2025年上半年财政收支情况新闻发布会。 ...
扎根国防一线30年 导弹筑巢...   火箭军某旅工程安装技师崔道虎,矢志建功国防工程30年,先后在8个工种、12个岗位历练,参与30余...
中新健康丨五个关键词,读懂“十...   中新网北京7月24日电(记者 张尼)基本医疗保险参保率稳定在95%左右,医保码、移动支付和电子处...
重访抗战地标丨南泥湾·自己动手...   “困难并不是不可征服的怪物,大家动手征服它,它就低头了。大家自力更生,吃的、穿的、用的都有了。目...
列车一次性座椅套卖爆,真有必要...   有的已累计售卖10万余件,有的周销量飙升超7倍  列车一次性座椅套卖爆,真有必要还是卫生焦虑? ...
微信最新公告:情节严重者永久封...   7月23日,微信视频创作安全中心官方账号发布 《关于开展微信视频号直播“团播低俗内容治理专项”的...
签约3万平方米!第九届进博会招...   7月25日,距离第八届进博会还有100多天,2026年第九届中国国际进口博览会招展就在上海正式启...
“敏捷精神2025”多国联合军...   新华社巴库7月25日电(记者 钟忠)第比利斯消息:代号为“敏捷精神2025”的多国联合军事演习2...