热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

获取Android手机CPU类型ARM、ARMV7、NEON

获取Android手机CPU类型ARM、ARMV7、NEON,Go语言社区,Golang程序员人脉社

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 

调用的该函数的示例方法

	/*
	 * 获取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;
	}



推荐阅读
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 万事开头难,凡事都有套路,勇敢迈出第一步就成功一大半了。本节将带领初学者们迈出属于自己的一小步。本书的开发工具采用AndroidStudio࿰ ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 多线程基础概览
    本文探讨了多线程的起源及其在现代编程中的重要性。线程的引入是为了增强进程的稳定性,确保一个进程的崩溃不会影响其他进程。而进程的存在则是为了保障操作系统的稳定运行,防止单一应用程序的错误导致整个系统的崩溃。线程作为进程的逻辑单元,多个线程共享同一CPU,需要合理调度以避免资源竞争。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
author-avatar
菲斯可儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有