os:android7.1
客戶需求:整個板子的軟件程序由系統軟件和mcu軟件組成,mcu軟件每次燒錄了新版本之后,需要也能顯示出來版本號。
解決方案:可以參照android的版本號,做一個拼接的顯示。
因此要捋順android版本號的整個顯示流程。
1.在文件 packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java 中:
setStringSummary("build_number", Build.DISPLAY);
指定了設置--關於設備--版本號。
2.Build.DISPLAY即Build類中的 DISPLAY 變量,在文件frameworks/base/core/java/android/os/Build.java 中:
public static final String DISPLAY = getString("ro.build.display.id");
3.當 android 系統跑起來 之后,會讀取 /system/build.prop 文件里 對應的 字符串;
ro.build.display.id=xxxxxx;
4.ro.build.display.id在文件build/tools/buildinfo.sh中:
echo "ro.build.display.id=$BUILD_DISPLAY_ID"
build/tools/buildinfo.sh 文件 會把 內容 寫到 /system/build.prop 文件里,供 java文件 讀取.
5.通過讀寫文件的方式,讀取版本號:
+ private static final String MUC_VERSION = "/sys/android_pic/mcu_version";
public static String GetMcuVersion(String paramString) { + File localFile = new File(paramString); + String result = "wmc"; + Log.v("wmc", "mcu path=" + paramString); + if (!localFile.exists()) + System.out.println(paramString + " not exist!"); + + try { + FileInputStream fis = new FileInputStream(localFile); + BufferedReader br = new BufferedReader(new InputStreamReader(fis)); + result = br.readLine(); + //System.out.println("版本 = "+result); + br.close(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }
+ + return result; + }
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ //wmc add
+ String mcuversion = GetMcuVersion(MUC_VERSION);
+ Log.d("wmc","mcuversion is:" + mcuversion);
+ ////
+
addPreferencesFromResource(R.xml.device_info_settings);
說明:MUC_VERSION是要讀取的文件路徑,其是kernel底層實現的一個sysfs接口,該接口實現通過cpu與mcu的i2c通信,讀取mcu發過過來的數據,上層應用再讀該文件。底層怎樣實現這里不做闡述。每次打開系統設置-關於設備時,DeviceInfoSettings.java都會onCreate一次,String mcuversion = GetMcuVersion(MUC_VERSION);都會讀取一次.
5.把讀取到的mcu版本號與系統版本號拼接顯示:
通過前面的分析,可知版本號是setStringSummary("build_number", Build.DISPLAY);實現的。所以,可做個簡單的如下寫法:
setStringSummary(KEY_BUILD_NUMBER, Build.DISPLAY+"&"+mcuversion);
參考:https://www.cnblogs.com/codeking100/p/10239224.html
https://www.jb51.net/article/186258.htm