Android Studio Gradle 生成 Build Number

2015-10-17 13:26:43 +08:00
 banxi1988
我昨天晚上有一个小需要就是:
每次调试运行一个 Xposed 模块时 想在 log 中看到当前的构建版本编号。
添加一个编译版本的时间 戳应该可以满足我的需求。
虽然按 Xposed 的工作原理每次更新模块之后,都必须重启手机,模块才会被重新加载应用。
但是我还是想看到一个编译的构建版本号。


根据一般编译过程(见最下) 来看。
**每次编译** 时 `generateDebugBuildConfig` 任务都会执行。
而且添加在 `BuildConfig` 类中作为静态常量,使用上也很方便。

于是:
1 ). 编写一个时间戳生成函数 :

```groovy
def generateBuildNumber(){
def date = new Date()
def formattedDate = date.format("yyyyMMdd")
def formattedSeconds = date.format("HHmmss")
def formatInt = formattedDate as int;
def secondsInt = formattedSeconds as int;
return (formatInt + secondsInt) as int
}
```

2 ). 在 `defaultConfig` DSL 容器中添加一个增加自定义 `buildConfigField` 的配置

```groovy
buildConfigField 'int','buildNumber', "${generateBuildNumber()}"
```

然后 BuildConfig 类中就有了一个自定义的 buildNumber

```java
// Fields from default config.
public static final int buildNumber = 20282037;
```

```
Executing tasks: [:app:assembleDebug]

Configuration on demand is an incubating feature.
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72301Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2301Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42301Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources
:app:processDebugJavaRes UP-TO-DATE
:app:compileDebugJavaWithJavac
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
Compile Debug Sources banxi
:app:preDexDebug UP-TO-DATE
:app:dexDebug
:app:validateDebugSigning
:app:packageDebug
:app:zipalignDebug
:app:assembleDebug

BUILD SUCCESSFUL

Total time: 1.752 secs

```
5773 次点击
所在节点    Android
2 条回复
hantsy
2015-10-17 15:57:39 +08:00
return (formatInt + secondsInt) as int 这个重复的概率应该很大的吧。

直接用 timestamp 就行了。也可以读取 Git 的版本号。
banxi1988
2015-10-17 19:23:29 +08:00
@hantsy 这个我只是为了让自己确认代码修改了。
对于一天的开发过程来说是没有重复的。
另外读取 Git 版本号不适用? 为什么呢? 我这是用于开发编译版本号。
因为修改之后还没有提交。 Git 的版本历史需要有新的提交才好。适合于非开发时发布使用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/228760

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX