Android系統資訊擷取 之十三:Linux核心版本資訊擷取

來源:互聯網
上載者:User

Android系統資訊擷取 之十三:Linux核心版本資訊擷取


Android系統是基於Linux的,各個Android版本對應的Linux版本不盡相同,我們這裡不去追究各個Android對應的Linux版本是什麼,而是通過工具或者使用代碼的方法去擷取我們使用的Android源碼或者我們的Android手機目前使用的Linux版本。

 

首先,使用adb工具我們能夠很快擷取Android手機(Android模擬器)的Linux核心版本。

用adb工具串連模擬器,查看核心版本資訊,看看模擬器上跑的核心是不是我們剛才編譯出來的核心:

     USER-NAME@MACHINE-NAME:~/Android$ adb shell

      這時候如果是第一次運行 adb shell命令,會看到以下輸出,不用管它,再運行一次adb shell命令就可以了。

     切換到proc目錄:

root@android:/ # cd procroot@android:/proc # cat versionLinux version 3.0.8 (user@machine) (gcc version 4.4.3 (GCC) ) #1 SMP PREEMPT Mon Mar 3 11:32:08 CST 2014

 機器名user@machine;日期Mon Mar 3 11:32:08 CST 2014;Linux核心版本為Linux ersion 3.0.8

         其次,在一些應用中我們有可能需要擷取Linux核心的版本資訊,基於adb命令列的的擷取方式,我們知道Linux版本資訊是通過Linux命令擷取的,那麼該過程我們當然可以通過代碼來實現它。


/*** * 擷取Android Linux核心版本資訊 */public void getLinuxKernalInfo() {Process process = null;String mLinuxKernal = null;try {process = Runtime.getRuntime().exec("cat /proc/version");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// get the output lineInputStream outs = process.getInputStream();InputStreamReader isrout = new InputStreamReader(outs);BufferedReader brout = new BufferedReader(isrout, 8 * 1024);String result = "";String line;// get the whole standard output stringtry {while ((line = brout.readLine()) != null) {result += line;// result += "\n";}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if (result != "") {String Keyword = "version ";int index = result.indexOf(Keyword);Log.v(TAG, "----"+result);line = result.substring(index + Keyword.length());index = line.indexOf(" ");// tv01.setText(line.substring(0,index));mLinuxKernal = line.substring(0, index);Log.d(TAG, "----Linux Kernal is : " + mLinuxKernal);}}

除了上面的方法以外還可以通過給processbuilder傳入一個String數組,String數組有兩個String,前一個代表liunx系統的命令,後面一個代表要執行該命令的檔案然後就是獲得該命令執行後所返回的字串資訊以流的形式再傳回來得到 result。

這個方法和上面的大同小異,只是使用的方法略微不同。

具體如下:


public String getLinuxKernalInfoEx() {String result = "";String line;String[] cmd = new String[] { "/system/bin/cat", "/proc/version" };String workdirectory = "/system/bin/";try {ProcessBuilder bulider = new ProcessBuilder(cmd);bulider.directory(new File(workdirectory));bulider.redirectErrorStream(true);Process process = bulider.start();InputStream in = process.getInputStream();InputStreamReader isrout = new InputStreamReader(in);BufferedReader brout = new BufferedReader(isrout, 8 * 1024);while ((line = brout.readLine()) != null) {result += line;// result += "\n";}in.close();} catch (Exception e) {e.printStackTrace();}Log.i(TAG,"----Linux Kernal is :"+result);return result;}

 在開發中可酌情使用。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.