Android app开发中获取cpu arm架构信息及执行shell命令方法
程序员文章站
2022-06-20 21:06:52
...
最近在做一个项目,需要在app开发过程中去判断cpu的arm架构,比如说是armeabi-v7a,或是arm64-v8a。
其实,在adb shell命令下面,可以通过getprop的方式,获取到一些信息,比如:
rk3399_urbetter:/ # getprop|grep arm
[dalvik.vm.isa.arm.features]: [default]
[dalvik.vm.isa.arm.variant]: [cortex-a53.a57]
[dalvik.vm.isa.arm64.features]: [default]
[dalvik.vm.isa.arm64.variant]: [cortex-a53]
[persist.sys.alarm.fixed]: [300000]
[ro.config.alarm_alert]: [Alarm_Classic.ogg]
[ro.product.cpu.abi]: [arm64-v8a]
[ro.product.cpu.abilist]: [arm64-v8a,armeabi-v7a,armeabi]
[ro.product.cpu.abilist32]: [armeabi-v7a,armeabi]
[ro.product.cpu.abilist64]: [arm64-v8a]
rk3399_urbetter:/ #
可以看到,现在cpu的架构是支持arm64-v8a。
那么,在app的开发过程中,是怎么样获取到这个值呢。
分成两个层次来讨论:
1) native层
在native层,可以通过property_get()函数来实现,比如:
char value[PROPERTY_VALUE_MAX];
property_get(EXIT_PROP_NAME, value, "0");
2) java层
这次遇到的问题就是需要在java层去做这个事情。网络上面有介绍可以使用System.getproperty()来达到这个目标,不过Java的System.getProperty得到null,这个让我非常的郁闷,找了不少方式也都没有办法解决。如果有人知道为什么返回null,帮忙说明下。后面我自己也看看源码。
后面我找到了个折中的解决方案,就是在java层执行shell 命令,直接通过getprop的shell命令来获取到结果。
cpu_abi = mCMD.execCmd("getprop ro.product.cpu.abi");
public static String execCmd(String cmd) {
DataOutputStream dos = null;
String result = "";
String lastline = " ";
try {
Process process = Runtime.getRuntime().exec(cmd);// 经过Root处理的android系统即有su命令
//get the err line
InputStream stderr = process.getErrorStream();
InputStreamReader isrerr = new InputStreamReader(stderr);
BufferedReader brerr = new BufferedReader(isrerr);
//get the output line
InputStream outs = process.getInputStream();
InputStreamReader isrout = new InputStreamReader(outs);
BufferedReader brout = new BufferedReader(isrout);
String errline = null;
// get the whole error message
String line = "";
while ( (line = brerr.readLine()) != null)
{
result += line;
result += "/n";
}
if( result != "" )
{
// put the result string on the screen
Log.i(TAG," the str error message " + result.toString());
}
// get the whole standard output string
while ( (line = brout.readLine()) != null)
{
lastline = line;
result += line;
result += "/n";
}
if( result != "" )
{
// put the result string on the screen
Log.i(TAG," the standard output message " + lastline.toString());
}
}catch(Throwable t)
{
t.printStackTrace();
}
return lastline.toString();
}
上一篇: (完全详解)JavaScript 添加、复制、移除、移动、创建和查找节点
下一篇: JS-操作节点