Android系统信息获取 之十三:Linux内核版本信息获取


Android系统是基于Linux的,各个Android版本对应的Linux版本不尽相同,我们这里不去追究各个Android对应的Linux版本是什么,而是通过工具或者使用代码的方法去获取我们使用的Android源码或者我们的Android手机目前使用的Linux版本。

首先,使用adb工具我们能够很快获取Android手机(Android模拟器)的Linux内核版本。

adb工具连接模拟器,查看内核版本信息,看看模拟器上跑的内核是不是我们刚才编译出来的内核:

[email protected]:~/Android$ adb shell

这时候如果是第一次运行 adb shell命令,会看到以下输出,不用管它,再运行一次adb shell命令就可以了。

切换到proc目录:

[email protected]:/ # cd proc[email protected]:/proc # cat versionLinux version 3.0.8 ([email protected]) (gcc version 4.4.3 (GCC) ) #1 SMP PREEMPT Mon Mar 3 11:32:08 CST 2014

机器名[email protected];日期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;}

在开发中可酌情使用。

----------------------------------

欢迎浏览、技术交流 请尊重劳动成果 转载请注明出处,谢谢!

http://blog.csdn.net/netwalk/article/details/20928221



更多相关文章

  1. Android(1.5及以上版本) 开机图片/文字/动画分析
  2. Android系统和linux内核的关系详解
  3. android apk版本更新
  4. 通过ADB命令实现App的安装、卸载、覆盖
  5. 2020版本Android 开发者学习路线(热门技术+学习方法+书籍+必须知
  6. Android dumpSys命令用法总结
  7. Android adb命令
  8. Linux 3.3内核发布 融合Android源代码

随机推荐

  1. unable to access android sdk add-on li
  2. Android Studio(七)Android Studio 如何D
  3. android:layout_alignleft layout_tolefto
  4. Android常用设计模式(二)
  5. Android(安卓)单元测试和日志输出
  6. [置顶] android activity返回键被dialog
  7. Android应用启动后自动创建桌面快捷方式
  8. Android中的消息机制
  9. 获取Nexus系列手机驱动(用于编译Android(
  10. Google将在Android 2.2中提供Adobe Flash