日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件工程—让软件包自带commit id

發布時間:2023/12/15 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件工程—让软件包自带commit id 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/voidreturn/article/details/78118930

軟件開發中軟件版本號是一個重要的概念,而對于工程師軟件版本號所對應的git(svn)commit id則更重要,嵌入式固件,移動端app開發中,理想的情況下是我拿到一個固件包,或者一個嵌入式設備,或者手機app,我們需要準確的找到該軟件版本對應的commit id,如何來做最準確以及最方便:讓軟件包自帶commit id。

Linux kernel的做法:

不得不說linux kernel的很多做法思想是十分完善以及超前的,linux kernel會在build過程中將git(svn)的當前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:
    本以為這是一個很簡單的問題,應該有很多解決方法,不過我通過google,baidu,bing進行了一番搜索,竟然沒有找到一篇完整的資料。只有自己來了:
    gradle:android 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打包的那些事該鏈接中提供一個十分方便的處理方式:

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() {def code = new ByteArrayOutputStream()exec {commandLine 'git', 'describe'standardOutput = code}return code.toString() }

可以通過以下方式在activity中進行調用:

getString(R.string.build_time) getString(R.string.build_host) getString(R.string.build_revision)

總結

以上是生活随笔為你收集整理的软件工程—让软件包自带commit id的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。