1 檢視手機CPU資訊
cmd——adb shell——cd /proc------cat cpuinfo
2 擷取cpu的是arm指令集,armv7指令集、還是neon指令集
/**
*
* [擷取cpu類型和架構]
*
* @return
* 三個參數類型的數組,第一個參數辨別是不是ARM架構,第二個參數辨別是V6還是V7架構,第三個參數辨別是不是neon指令集
*/
public static Object[] getCpuArchitecture() {
if ((Integer) mArmArchitecture[1] != -1) {
return mArmArchitecture;
}
try {
InputStream is = new FileInputStream("/proc/cpuinfo");
InputStreamReader ir = new InputStreamReader(is);
BufferedReader br = new BufferedReader(ir);
try {
String nameProcessor = "Processor";
String nameFeatures = "Features";
String nameModel = "model name";
String nameCpuFamily = "cpu family";
while (true) {
String line = br.readLine();
String[] pair = null;
if (line == null) {
break;
}
pair = line.split(":");
if (pair.length != 2)
continue;
String key = pair[0].trim();
String val = pair[1].trim();
if (key.compareTo(nameProcessor) == 0) {
String n = "";
for (int i = val.indexOf("ARMv") + 4; i < val.length(); i++) {
String temp = val.charAt(i) + "";
if (temp.matches("\\d")) {
n += temp;
} else {
break;
}
}
mArmArchitecture[0] = "ARM";
mArmArchitecture[1] = Integer.parseInt(n);
continue;
}
if (key.compareToIgnoreCase(nameFeatures) == 0) {
if (val.contains("neon")) {
mArmArchitecture[2] = "neon";
}
continue;
}
if (key.compareToIgnoreCase(nameModel) == 0) {
if (val.contains("Intel")) {
mArmArchitecture[0] = "INTEL";
mArmArchitecture[2] = "atom";
}
continue;
}
if (key.compareToIgnoreCase(nameCpuFamily) == 0) {
mArmArchitecture[1] = Integer.parseInt(val);
continue;
}
}
} finally {
br.close();
ir.close();
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return mArmArchitecture;
}
調用的該函數的示例方法
/*
* 擷取FFpeg解碼庫的名稱(如果是插件,會涉及到一個向下相容的問題,例如:如果目前cpu是V7neo,而又沒有neon的解碼庫,必須要做向下相容出來
* ,如果有V7的庫就加載V7的庫,有V6的庫就加載V6的)
*/
public static String getFFmpegLibName(Context context) {
if (LIB_FFMPEG_NAME != null) {
return LIB_FFMPEG_NAME;
}
Object[] arch = getCpuArchitecture();
String libDir = getNativeLibraryDir(context);
String libSysDir = "/system/lib";
if ("ARM".equals(arch[0])) {
try {
String ffmpeg = String.format("ffmpeg-%d%s", (Integer) arch[1], (String) arch[2]);
if (isFileExist(libDir + "/lib" + ffmpeg + ".so") || isFileExist(libSysDir + "/lib" + ffmpeg + ".so")) {
return ffmpeg;
} else {
boolean isV7NeonCpu = "neon".equals(arch[2]);
boolean isV7 = ((Integer) arch[1]) == 7 && "".equals(arch[2]);
boolean isV6 = ((Integer) arch[1]) == 6;
if (isV7NeonCpu) {
if (isFileExist(libDir + "/libffmpeg-7neon.so")
|| isFileExist(libSysDir + "/libffmpeg-7neon.so")) {
LIB_FFMPEG_NAME = "ffmpeg-7neon";
return "ffmpeg-7neon";
} else if (isFileExist(libDir + "/libffmpeg-7.so")
|| isFileExist(libSysDir + "/libffmpeg-7.so")) {
LIB_FFMPEG_NAME = "ffmpeg-7";
return "ffmpeg-7";
} else if (isFileExist(libDir + "/libffmpeg-6.so")
|| isFileExist(libSysDir + "/libffmpeg-6.so")) {
LIB_FFMPEG_NAME = "ffmpeg-6";
return "ffmpeg-6";
}
} else if (isV7) {
if (isFileExist(libDir + "/libffmpeg-7.so") || isFileExist(libSysDir + "/libffmpeg-7.so")) {
LIB_FFMPEG_NAME = "ffmpeg-7";
return "ffmpeg-7";
} else if (isFileExist(libDir + "/libffmpeg-6.so")
|| isFileExist(libSysDir + "/libffmpeg-6.so")) {
LIB_FFMPEG_NAME = "ffmpeg-6";
return "ffmpeg-6";
}
} else if (isV6) {
if (isFileExist(libDir + "/libffmpeg-6.so") || isFileExist(libSysDir + "/libffmpeg-6.so")) {
LIB_FFMPEG_NAME = "ffmpeg-6";
return "ffmpeg-6";
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else if ("INTEL".equals(arch[0])) {
if (isFileExist(libDir + "/libffmpeg-x86atom.so") || isFileExist(libSysDir + "/libffmpeg-x86atom.so")) {
LIB_FFMPEG_NAME = "ffmpeg-x86atom";
return "ffmpeg-x86atom";
}
}
LIB_FFMPEG_NAME = null;
return null;
}
轉載于大佬
https://blog.csdn.net/mengweiqi33/article/details/22796619
的部落格