导航:首页 > 操作系统 > androidcpu位数

androidcpu位数

发布时间:2024-12-25 02:33:30

㈠ 如何获取 android 设备的CPU核数,时钟频率以及内存大小

Device Year Class 的主要功能是根据 CPU核数、时钟频率 以及 内存大小 对设备进行分级。代码很简单,只包含两个类:
DeviceInfo-> 获取设备参数,
YearClass-> 根据参数进行分级。
下表是 Facebook 公司提供的分级标准,其中Year栏表示分级结果。

Year
Cores
Clock
RAM

2008 1 528MHz 192MB
2009 n/a 600MHz 290MB
2010 n/a 1.0GHz 512MB
2011 2 1.2GHz 1GB
2012 4 1.5GHz 1.5GB
2013 n/a 2.0GHz 2GB
2014 n/a >2GHz >2GB
关于输出年份的计算方法可以参考源码,本文只把一些比较常用的功能抽取出来做一个简要介绍。
获取 CPU 核数
我们都知道,Linux 中的设备都是以文件的形式存在,CPU 也不例外,因此 CPU 的文件个数就等价与核数。
Android 的 CPU 设备文件位于/sys/devices/system/cpu/目录,文件名的的格式为cpu\d+。

root@generic_x86_64:/sys/devices/system/cpu # ls <b>cpu0</b> cpufreq
cpuidle
kernel_max
modalias
offline
online
possible
power
present
uevent

统计一下文件个数便可以获得 CPU 核数。

public static int getNumberOfCPUCores() {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
// Gingerbread doesn't support giving a single application access to both cores, but a
// handful of devices (Atrix 4G and Droid X2 for example) were released with a al-core
// chipset and Gingerbread; that can let an app in the background run without impacting
// the foreground application. But for our purposes, it makes them single core.
return 1;
}
int cores;
try {
cores = new File("/sys/devices/system/cpu/").listFiles(CPU_FILTER).length;
} catch (SecurityException e) {
cores = DEVICEINFO_UNKNOWN;
} catch (NullPointerException e) {
cores = DEVICEINFO_UNKNOWN;
}
return cores;
}

private static final FileFilter CPU_FILTER = new FileFilter() {
@Override
public boolean accept(File pathname) {
String path = pathname.getName();
//regex is slow, so checking char by char.
if (path.startsWith("cpu")) {
for (int i = 3; i < path.length(); i++) {
if (path.charAt(i) < '0' || path.charAt(i) > '9') {
return false;
}
}
return true;
}
return false;
}
};

获取时钟频率
获取时钟频率需要读取系统文件 -/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq或者/proc/cpuinfo。
我的 Android 模拟器中并没有cpuinfo_max_freq文件,因此只能读取/proc/cpuinfo。
/proc/cpuinfo包含了很多 cpu 数据。

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 70
model name : Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
stepping : 1
cpu MHz : 0.000
cache size : 1024 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 4
wp : yes

代码如下:

public static int getCPUMaxFreqKHz() {
int maxFreq = DEVICEINFO_UNKNOWN;
try {
for (int i = 0; i < getNumberOfCPUCores(); i++) {
String filename =
"/sys/devices/system/cpu/cpu" + i + "/cpufreq/cpuinfo_max_freq";
File cpuInfoMaxFreqFile = new File(filename);
if (cpuInfoMaxFreqFile.exists()) {
byte[] buffer = new byte[128];
FileInputStream stream = new FileInputStream(cpuInfoMaxFreqFile);
try {
stream.read(buffer);
int endIndex = 0;
//Trim the first number out of the byte buffer.
while (buffer[endIndex] >= '0' && buffer[endIndex] <= '9'
&& endIndex < buffer.length) endIndex++;
String str = new String(buffer, 0, endIndex);
Integer freqBound = Integer.parseInt(str);
if (freqBound > maxFreq) maxFreq = freqBound;
} catch (NumberFormatException e) {
//Fall through and use /proc/cpuinfo.
} finally {
stream.close();
}
}
}
if (maxFreq == DEVICEINFO_UNKNOWN) {
FileInputStream stream = new FileInputStream("/proc/cpuinfo");
try {
int freqBound = parseFileForValue("cpu MHz", stream);
freqBound *= 1000; //MHz -> kHz
if (freqBound > maxFreq) maxFreq = freqBound;
} finally {
stream.close();
}
}
} catch (IOException e) {
maxFreq = DEVICEINFO_UNKNOWN; //Fall through and return unknown.
}
return maxFreq;
}

获取内存大小
如果 SDK 版本大于等于JELLY_BEAN,可以通过ActivityManager来获取内从大小。

ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
ActivityManager am = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE);
am.getMemoryInfo(memInfo);

如果版本低于JELLY_BEAN,则只能读取系统文件了。

FileInputStream stream = new FileInputStream("/proc/meminfo");
totalMem = parseFileForValue("MemTotal", stream);

㈡ android-ndk-r9d 32位系统能用么吗

android-ndk-r9d 32位系统可以用。
cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推。32位操作系统针对的32位的CPU设计。64位操作系统针对的64位的CPU设计。操作系统只是硬件和应用软件中间的一个平台。CPU从原来的8位,16位,到现在的32位和64位。

㈢ 64位ARM CPU在android 32位和64位版性能有多大差别

安卓手机目前没有32位和64位之分,只有安卓平台的版本划分。六十四位的能比三十二位的运算速度快

㈣ 如何查看Android手机CPU类型是armeabi,armeabi-v7a,还是arm64-v8

1.armeabiv-v7a: 第7代及以上的 ARM 处理器.
2.arm64-v8a: 第8代、64位ARM处理器,现在很多手机使用X86的手机.红米11.三星 Galaxy S6是其中之一。
3.armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
4.x86: 平板、模拟器用得比较多。

使用命令:adb shell getprop ro.proct.cpu.abi

查看Android设备的CPU架构信息,可以使用命令来完成:
1、adb shell
2、cat /proc/cpuinfo

解析说明:
processor: 0/1 表示第几个核。
BogoMIPS:伪MIPS,用于测量CPU速度
Features:表示当前CPU所支持的特性,比如neon,vfp等。
CPU architecture:7表示arm-v7,8表示arm-v8

阅读全文

与androidcpu位数相关的资料

热点内容
不规则土方的算法 浏览:209
tor加密货币网站 浏览:449
linux转ansi 浏览:736
网站源码怎么查 浏览:687
高cpu云服务器 浏览:365
androidwebrtcaecm 浏览:981
阿里云部署java 浏览:636
云是不是就是个大的服务器 浏览:581
如何建立linux日志管理服务器 浏览:772
悟空头图标是什么APP 浏览:555
linuxandroid虚拟机 浏览:281
ps李涛pdf 浏览:638
linuxfork线程 浏览:97
易语言编译改名 浏览:723
阿里服务器都提供什么 浏览:756
cf打开服务器接不上怎么办 浏览:901
linux下more命令 浏览:402
des算法运算位数 浏览:375
珠海建行贷款解压 浏览:635
布谷源码iOS 浏览:66