网站建设需要些什么设备,学建站论坛,phpcms多个网站,做推广能提高网站权重么软件开发中软件版本号是一个重要的概念#xff0c;而对于工程师软件版本号所对应的git#xff08;svn#xff09;commit id则更重要#xff0c;嵌入式固件#xff0c;移动端app开发中#xff0c;理想的情况下是我拿到一个固件包#xff0c;或者一个嵌入式设备#xff0… 软件开发中软件版本号是一个重要的概念而对于工程师软件版本号所对应的gitsvncommit id则更重要嵌入式固件移动端app开发中理想的情况下是我拿到一个固件包或者一个嵌入式设备或者手机app我们需要准确的找到该软件版本对应的commit id如何来做最准确以及最方便让软件包自带commit id。 Linux kernel的做法
不得不说linux kernel的很多做法思想是十分完善以及超前的linux kernel会在build过程中将gitsvn的当前commit id写入内核image中使内核image自带commit id如何操作请自行搜索。 android手机用户可以查看设置-关于手机-内核版本工程师应该对gxxxxx很敏感xxxxx就是对应的git commit id
嵌入式开发中常用的做法
由于笔者从事了8年嵌入式开发对这个做法可以说得心应手嵌入式开发是一个自由度很高的行业没有很多完善的轮子同时由于linux的简约的思想开发者可以十分自由的创作自己的构建流程就如同c语音一样自由灵活虽然有些lib库没有其他高级语言完善丰富但是它几乎无所不能很少束缚开发者。 这部分也不做过多说明linux系统工程师应该很容易写出一个获取Git commit id并写入固件image的构建脚本。有太多方式了自由发挥吧
Android app开发中的做法
最近接触Android app开发发现某某大厂的app竟然不能通过app立即找到对应的commit id对于走正常发布流程的app包这个不是问题因为通过标准化的构建流程发布可以在构建系统中通过版本号追溯到对应的commit id但是这套构建系统对版本号没有严格的约束你可以build出两个一模一样版本号的app包。。。这样你基本上就完全懵逼了还有说通过软件包时间来对应的我。。。。。不多说啥了。。。。而对于开发过程中一些非标准流程发出的一些临时测试包就完全失控了根本无法确定一些软件包对应的commit id没有准确的commit id你说你怎么找bug吧不能理解这个的工程师我觉得可以考虑转行做pd了。
android app如何获取commit id 本以为这是一个很简单的问题应该有很多解决方法不过我通过googlebaidubing进行了一番搜索竟然没有找到一篇完整的资料。只有自己来了 gradleandroid app目前普遍通过gradle进行构建而如何在gradle中调用shell系统命令获取git commit id就是问题的关键。 通过不断的搜索终于找到一个方法 git describe.execute().text 上面这行代码就可以在gradle中获取git commit id的信息我们可以把该行返回字符串赋给一个String变量。但需要注意的是该行代码的返回字符串是带换行符的可以通过subSequence去除最后一个换行字符。
至此在gradle构建脚本中我们可以获取到了commit id而如何将该commit id传递给java代码此处不做说明相信9成的android app开发工程师都比我这零基础的app入门者熟悉。 最后实现以上功能大概花费了一个晚上的时间这都不是key point使我惊奇的是在我8年多的软件开发过程中我遇见无数不重视甚至不了解软件包和commit id关联的重要性以及意义的“资深”工程师如何定位问题通过什么定位问题如何使用版本管理工具是工程师需要思考的。 补充
终于发现一个详尽明确的说明Android打包的那些事该链接中提供一个十分方便的处理方式
def ver_cmd git rev-parse --short HEAD
version 1.0 - ver_cmd.execute().text.trim()android {defaultConfig {resValue string, build_time, buildTime()resValue string, build_host, hostName()resValue string, build_revision, revision()}
}def buildTime() {return new Date().format(yyyy-MM-dd HH:mm:ss)
}def hostName() {return System.getProperty(user.name) InetAddress.localHost.hostName
}def revision() {version
}可以通过以下方式在activity中进行调用
getString(R.string.build_time)
getString(R.string.build_host)
getString(R.string.build_revision)