`

Android 开发笔记 - git 篇 动态生成版本信息

阅读更多
给某个提交加标签
pengji@pengji-ThinkPad-E450:~/idonans/workspace/acommon$ git branch -av
* master                227df08 mark 0.1.18
  remotes/origin/master 227df08 mark 0.1.18
pengji@pengji-ThinkPad-E450:~/idonans/workspace/acommon$ git log -2
commit 227df084b8954be37f6cff78a4dc325a14c1c151
Author: idonans <idonans@126.com>
Date:   Wed Jul 6 11:11:51 2016 +0800

    mark 0.1.18

commit 062570d59213b91248825b81d24261c39f98fb15
Author: idonans <idonans@126.com>
Date:   Wed Jul 6 10:57:21 2016 +0800

    add SystemUtil method addToMediaStore
pengji@pengji-ThinkPad-E450:~/idonans/workspace/acommon$ git tag -a 0.2 227df084b8954be37f6cff78a4dc325a14c1c151 -m "add tag 0.2"
pengji@pengji-ThinkPad-E450:~/idonans/workspace/acommon$ git tag
0.2
pengji@pengji-ThinkPad-E450:~/idonans/workspace/acommon$ 
 
将标签信息提交到服务器
pengji@pengji-ThinkPad-E450:~/idonans/workspace/acommon$ git push origin master --tags
对象计数中: 1, 完成.
写入对象中: 100% (1/1), 149 bytes | 0 bytes/s, 完成.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:idonans/acommon.git
 * [new tag]         0.2 -> 0.2
pengji@pengji-ThinkPad-E450:~/idonans/workspace/acommon$ 
 
删除远程标签
git push origin :refs/tags/0.1
 
 在 gradle 编译脚本中动态计算版本号和版本名
 
// 使用 git commit 总数作为 version code
def int getAutoVersionCode() {
    def cmd = "git rev-list HEAD --count"
    return cmd.execute().text.trim().toInteger()
}

// 使用距离最近的标签名 + "." + 距离该标签的 commit 数量 作为版本名称, 通常标签使用如 0.1, 1.0, 1.89等命名方式
def String getAutoVersionName() {
    def cmd = "git describe --tags"
    def tagDesc = cmd.execute().text.trim()

    def pattern = "-(\\d+)-g"
    def matcher = tagDesc =~ pattern

    def tagName
    def commitCount

    if (matcher) {
        tagName = tagDesc.substring(0, matcher.start())
        commitCount = matcher[0][1]
    } else {
        tagName = tagDesc;
        commitCount = "0";
    }

    return tagName + "." + commitCount
}

def autoVersionCode = getAutoVersionCode()
def autoVersionName = getAutoVersionName()

// 例如:
// 当前 commit 总数是 208, 距离最后一个提交最近的 tag 是 0.2, 当前位置距离该 tag 有 2 个 commit
// 那么:
// autoVersionCode = 208
// autoVersionName = 0.2.2
 
 
分享到:
评论
1 楼 idonans 2016-07-22  
//修改生成的apk名字
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def oldFile = output.outputFile
        def apkName = variant.applicationId + "-" + variant.versionName + "-" + variant.versionCode + "-" + variant.buildType.name + ".apk"
        output.outputFile = new File((String) oldFile.getParent(), (String) apkName)
    }
}

相关推荐

    新版Android开发教程及笔记-完整版

    新版Android开发教程及笔记将涵盖Android系统的基本架构、应用程序生命周期管理以及UI设计等核心概念。 1. **Android系统架构**:Android系统分为应用层、应用框架层、系统运行库层和Linux内核层。开发者主要在应用...

    android笔记三--环境搭建与解析

    这篇笔记将详细讲解如何配置和解析Android的开发环境,让你能够顺利地开始你的Android编程之旅。首先,我们需要了解Android Studio,这是Google官方推荐的Android应用程序集成开发环境(IDE)。 1. **下载Android ...

    android studio实现笔记本

    在Android开发领域,Android Studio是谷歌官方推荐的集成开发环境(IDE),用于构建Android应用程序。本教程将深入探讨如何利用Android Studio实现一个笔记本应用。首先,我们来看看Android Studio项目的基本结构,...

    Android开发教程笔记五--模拟器、应用1、2

    本文将深入探讨“Android开发教程笔记五”中的关键知识点,包括如何有效利用模拟器进行应用测试,以及如何构建和部署第一个Android应用程序。 一、Android模拟器 1. **安装与配置**:Android Studio提供了内置的...

    浅谈MTK平台下Android开发比较学习笔记doc.doc

    ### MTK平台下Android开发比较学习笔记 #### 一、引言 近年来,随着移动互联网技术的迅猛发展,智能手机已成为人们日常生活中不可或缺的一部分。而Android操作系统作为全球市场份额最大的移动操作系统,其背后的...

    TC8900android编译笔记[参考].pdf

    这个笔记提供了从环境搭建、源码获取、编译工具配置到Android系统编译的详细步骤,对于进行TC8900平台的Android系统开发具有很高的参考价值。在整个过程中,理解Linux内核和Android系统的构建机制,以及熟悉交叉编译...

    Android studio开发的仿小红书App,简单App项目

    【Android Studio 开发仿小红书App】 在移动应用开发领域,Android Studio 是谷歌推出的官方集成开发环境(IDE),...通过这个项目,开发者不仅可以提升Android开发技能,还能深入理解社交应用的架构设计和用户体验。

    Android-Java-NotesAndQuotes:记笔记的应用程序可以生成报价

    综上所述,Android-Java-NotesAndQuotes是一个综合性的项目,涵盖了Android应用开发的多个方面,包括基础编程、UI设计、数据管理、用户交互和个性化设置等,对于学习和提升Android开发技能非常有帮助。

    Android4.4真机移植过程笔记

    ### Android4.4真机移植过程笔记 #### 1. RK 源码编译 在进行Android4.4真机移植过程中,首先需要获取内核源码,并且准备相应的编译环境。以下是对该部分的详细说明: - **获取内核源码**: - 使用`git clone`...

    Android 局域网简易云端笔记系统源码.rar

    《Android局域网简易云端笔记系统源码解析》 ...对于想要提升自己Android开发技能的程序员来说,这是一个非常有价值的参考资料。同时,这也是一个很好的起点,可以帮助开发者进一步扩展到更复杂的云服务或物联网应用。

    多平台笔记应用SimplenoteforAndroid.zip

    Android Wear要想正确安装 Wear 应用,需要先运行 ./gradlew assembleRelease 打包该应用,然后把生成的 .apk 文件安装到主机设备进行 adb install。如果你想调试 Wear 应用,只需将设备连接到 adb,然后运行 ...

    2011.09.23——— android sample之Notepad(context menu)

    基于以上信息,我们可以深入讨论以下几个Android开发相关的知识点: 1. **上下文菜单(Context Menu)**:在Android中,上下文菜单不是UI布局的一部分,而是通过`registerForContextMenu()`方法注册后,用户长按某个...

    android资料合集4

    这份文档可能是作者在学习Android开发过程中的个人笔记,涵盖了从基础到进阶的各种知识点。它可能包括但不限于以下内容: 1. **Android系统架构**:讲解了Android系统的五层架构,从Linux内核到应用程序框架,再到...

    cocos2d-x学习笔记\cocos2d-x学习笔记(17)--简单游戏实例1--双枪手

    首先,我们需要搭建cocos2d-x的开发环境,这包括安装C++编译器、设置环境变量、安装Python和Git等。在Windows系统中,可以使用cocos命令行工具快速创建新项目。通过执行`cocos new myGame01 -p ...

    android钢琴琴键

    以上是"android钢琴琴键"应用开发中的核心技术点,涵盖了Android开发的多个方面,包括UI设计、音频处理、事件响应、性能优化等。通过这些技术,开发者可以为用户提供一个既美观又功能完善的虚拟钢琴体验。

    android记事本改良源码

    记事本应用会用Adapter来显示笔记列表,根据数据库中的数据动态生成列表项。 6. **XML布局文件**:Android应用的界面通常是用XML文件定义的,包括按钮、输入框、列表等控件。开发者会创建XML布局文件来设计记事本...

    2019移动互联A卷林丰波.docx

    - **UI 控件操作**:在 Android 开发中,经常需要通过代码动态地操作 UI 元素。例如,通过 `findViewById` 方法获取视图组件,然后调用 `setText` 方法来改变文本内容。 ### 版本控制与 Git - **Git 命令**:`git ...

    android-x86.github.io:Android-x86项目的官方网站

    "android-x86.github.io"是Android-x86项目的官方网站,它提供项目信息、下载链接、文档以及社区支持。网站的内容通常包括项目最新版本的介绍、安装指南、常见问题解答、开发者资源和贡献方式等。 **参与贡献** ...

Global site tag (gtag.js) - Google Analytics