Android Studio利用Build.gradle导入Git commit ID、Git Branch、User等版本信息

简介: 本文介绍了在Android Studio项目中通过修改`build.gradle`脚本来自动获取并添加Git的commit ID、branch名称和用户信息到BuildConfig类中,从而实现在编译时将这些版本信息加入到APK中的方法。

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 branchName
    def 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  "+branchName
    return 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 false
            proguardFiles 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 false
            proguardFiles 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();

    @Override
    public void onReceive(Context context, Intent intent) {
   //18006

        RLog.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/PSWindows

PS C:\Users\66176\Documents\works\mt9652\all_app\tvass> git branch -a
  master_combiecode
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/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) <zhoushang>
…… 省略 ……
* 501341c - init 20220713  (3 months ago) <zhoushang>
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
相关文章
|
1天前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
14 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
16天前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
121 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
4月前
|
Android开发
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
|
4月前
|
Android开发
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
|
4月前
|
Java Android开发 Windows
玩转安卓之配置gradle-8.2.1
为安卓开发配置Gradle 8.2.1,包括下载和解压Gradle、配置环境变量、修改配置文件以增加国内镜像,以及在Android Studio中配置Gradle和JDK的过程。
202 0
玩转安卓之配置gradle-8.2.1
|
5月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
218 4
|
5月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
315 3
|
6月前
|
Android开发
Android Studio: 解决Gradle sync failed 错误
本文介绍了解决Android Studio中出现的Gradle同步失败错误的步骤,包括从`gradle-wrapper.properties`文件中获取Gradle的下载链接,手动下载Gradle压缩包,并替换默认下载路径中的临时文件,然后重新触发Android Studio的"Try Again"来完成同步。
2343 0
Android Studio: 解决Gradle sync failed 错误
|
6月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
351 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
6月前
|
测试技术 持续交付 开发工具
[译] 为何每次 Git Commit 要尽可能小?
[译] 为何每次 Git Commit 要尽可能小?

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    14
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    28
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 4
    Android历史版本与APK文件结构
    121
  • 5
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 7
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    60
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 9
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    73
  • 10
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    121
  • 相关实验场景

    更多

    推荐镜像

    更多