Android架构 架构和 CPU ABI - NDK

news2024/11/27 9:37:13

查看设备架构

adb -s emulator-5554 shell getprop ro.product.cpu.abi

C:\Users\liyd>adb -s emulator-5554 shell getprop ro.product.cpu.abi
x86_64

C:\Users\liyd>adb -s 804c11f1 shell getprop ro.product.cpu.abi
arm64-v8a

mumu模拟器12

C:\Users\liyd>adb -s 127.0.0.1:7555 shell getprop ro.product.cpu.abi
x86_64

架构和 CPU

使用原生代码时,硬件很重要。NDK 提供各种 ABI 供您选择,可让您确保针对正确的架构和 CPU 进行编译。

本部分介绍了在构建时如何面向特定的架构和 CPU,如何使用 ARM Neon 扩展指令集,以及在运行时如何使用 CPU 功能库查询可选功能。

Android ABI - NDK

bookmark_border
不同的 Android 设备使用不同的 CPU,而不同的 CPU 支持不同的指令集。CPU 与指令集的每种组合都有专属的应用二进制接口 (ABI)。ABI 包含以下信息:

可使用的 CPU 指令集(和扩展指令集)。
运行时内存存储和加载的字节顺序。Android 始终是 little-endian。
在应用和系统之间传递数据的规范(包括对齐限制),以及系统调用函数时如何使用堆栈和寄存器。
可执行二进制文件(例如程序和共享库)的格式,以及它们支持的内容类型。Android 始终使用 ELF。如需了解详情,请参阅 ELF System V 应用二进制接口。
如何重整 C++ 名称。如需了解详情,请参阅 Generic/Itanium C++ ABI。
本页列举了 NDK 支持的 ABI,并且介绍了每个 ABI 的运行原理。
ABI 还可以指平台支持的原生 API。如需影响 32 位系统的此类 ABI 问题列表,请参阅 32 位 ABI 错误。

支持的 ABI

在这里插入图片描述

ZygoteInit.java

private static final String ABI_LIST_ARG = "--abi-list=";
private static final String SOCKET_NAME_ARG = "--socket-name=";


public static void main(String argv[]) {
566        try {
567            RuntimeInit.enableDdms();
568            // Start profiling the zygote initialization.
569            SamplingProfilerIntegration.start();
570
571            boolean startSystemServer = false;
572            String socketName = "zygote";
573            String abiList = null;
574            for (int i = 1; i < argv.length; i++) {
575                if ("start-system-server".equals(argv[i])) {
576                    startSystemServer = true;
577                } else if (argv[i].startsWith(ABI_LIST_ARG)) {
578                    abiList = argv[i].substring(ABI_LIST_ARG.length());
579                } else if (argv[i].startsWith(SOCKET_NAME_ARG)) {
580                    socketName = argv[i].substring(SOCKET_NAME_ARG.length());
581                } else {
582                    throw new RuntimeException("Unknown command line argument: " + argv[i]);
583                }
584            }
585
586            if (abiList == null) {
587                throw new RuntimeException("No ABI list supplied.");
588            }
589
590            registerZygoteSocket(socketName);
591            EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_START,
592                SystemClock.uptimeMillis());
593            preload();
594            EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_END,
595                SystemClock.uptimeMillis());
596
597            // Finish profiling the zygote initialization.
598            SamplingProfilerIntegration.writeZygoteSnapshot();
599
600            // Do an initial gc to clean up after startup
601            gcAndFinalize();
602
603            // Disable tracing so that forked processes do not inherit stale tracing tags from
604            // Zygote.
605            Trace.setTracingEnabled(false);
606
607            if (startSystemServer) {
608                startSystemServer(abiList, socketName);
609            }
610
611            Log.i(TAG, "Accepting command socket connections");
612            runSelectLoop(abiList);
613
614            closeServerSocket();
615        } catch (MethodAndArgsCaller caller) {
616            caller.run();
617        } catch (RuntimeException ex) {
618            Log.e(TAG, "Zygote died with exception", ex);
619            closeServerSocket();
620            throw ex;
621        }
622    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/976573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MobaXterm 突破14个session限制

通常情况下&#xff1a;随着工作时间的增长&#xff0c;我们会保存许许多多的linux到本地的mobastream&#xff0c;然后当超过14个&#xff0c;就会被被限制&#xff0c;这个会让人很头疼。 1. 安装python&#xff0c;配置好环境变量 测试安装成功&#xff1a; 2. 基于项目进行…

uniapp点击事件在小程序中无法传参

这个问题很是神奇&#xff0c;第一次遇到。在h5中&#xff0c;点击事件可以正常传参&#xff0c;打包小程序后确失效了。 修改&#xff1a;for循环中的key&#xff0c;使用 index就好了

视频汇聚/视频云存储/视频监控管理平台EasyCVR启动时打印starting server:listen tcp,该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成&#xff0c;…

SpringBoot集成redis-Jedis

文章目录 1.相关概念2.环境搭建及测试 1.相关概念 Springboot学习笔记&#xff1a;https://blog.csdn.net/meini32/article/details/132544107 Redis快速入门&#xff1a;https://blog.csdn.net/meini32/article/details/132666283 2.环境搭建及测试 redis相关配置 Sprin…

车载域控制器DCU浪涌防护推荐TVS二极管

为了解决分布式EEA的这些问题&#xff0c;汽车工程师开始逐渐把很多功能相似、分离的ECU功能集成整合到一个比ECU性能更强的处理器硬件平台上&#xff0c;这就是汽车“域控制器&#xff08;Domain Controller Unit&#xff0c;DCU&#xff09;”。车载域控制器DCU大大优化整车的…

【Flink】关于jvm元空间溢出,mysql binlog冲突的问题解决

问题一&#xff1a;7张表是同一个mysql中的&#xff0c;我们进行增量同步时分别用不同的flink任务读取&#xff0c;造成mysql server-id冲突问题&#xff0c;如下&#xff1a; Caused by: io.debezium.DebeziumException: A slave with the same server_uuid/server_id as this…

LINUX内核启动流程-1

1、BIOS启动 硬件设置从OXFFFF0启动:CPU硬件设置加电即进入16位实模式状态运行,CPU硬件逻辑设计为加电瞬间强行将CS的值置为oxF000,IP的值置为0xFFF0,这样CS:IP就指向0xFFFF0这个地址位置。 BIOS程序的入口地址恰恰就是0xFFFF0 ! 也就是说,BIOS程序的第一条指令就设计在…

【0220】stats collector如何得知pgStatSock中的消息类型、消息报文内容以及消息是否完整?

1. vacuum、writer、checkpointer等进程如何发送统计信息给stats collector 前面已经图文并茂的讲解过,stats collector进程通过UDP方式与其他进程进行通信,在初始化资源时,通过socket()系统函数得到一个全局套接字fd。后续其他进程有统计消息时,通过该句柄,可发送消息给…

sql-gen:点击生成SQL、RO、VO的工具

sql-gen仓库地址&#xff1a;码云 Github 1. 概述 sql-gen是一个用于提高后端接口开发效率的小工具&#xff0c;主要有如下功能&#xff1a; 生成连表SQL语句根据WHERE条件来生成封装查询条件的实体类&#xff08;RO&#xff09;根据SELECT列来生成封装查询结果的实体类&…

学习笔记|小数点控制原理|数码管动态显示|段码跟位码|STC32G单片机视频开发教程(冲哥)|第十集:数码管动态显示

文章目录 1.数码管动态刷新的原理2.动态刷新原理3.8位数码管同时点亮新建一个数组选择每个位需要显示的内容实战小练&#xff1a;简易10秒免单计数器将刷新动作写成函数 课后练习: 1.数码管动态刷新的原理 上述图片引用自&#xff1a;51单片机初学2-数码管动态扫描 用一排端口来…

追求数学之美

菲尔兹奖得主玛丽安米尔札哈尼说过&#xff1a;“只有在那些最有耐心的信徒面前&#xff0c;数学才会展现出它美丽的一面。”她的意思是&#xff0c;数学之美的绽放通常需要一定的时间。有时你需要费上一番功夫才能欣赏到建筑的美。数学的美也是这样&#xff0c;只要你拥有足够…

FHE 嵌合 MHE

参考文献&#xff1a; [NW96] Nisan N, Wigderson A. Lower bounds on arithmetic circuits via partial derivatives[J]. Computational complexity, 1996, 6: 217-234. Cites “M. Ben-Or, Private communication”.[Gen09] Gentry C. A fully homomorphic encryption schem…

基于32位单片机的感应灯解决方案

感应灯是一种常见照明灯&#xff0c;提起感应灯&#xff0c;相信大家并不陌生&#xff0c; 它在一些公共场所、卫生间或者走廊等场所&#xff0c;使用的较为广泛&#xff0c;同时它使用起来也较为方便省电。“人来灯亮&#xff0c;人走灯灭”的特性&#xff0c;使他们在部分场景…

利用Python和pandas分析瑞幸和茅台联名咖啡的市场策略

金融数据分析在投资决策和市场制定策略中发挥了至关重要的作用&#xff0c;而品牌价值分析是市场营销中的一个环节&#xff0c;它可以帮助企业了解其品牌在市场中的地位和价值&#xff0c;刚好最近瑞幸和茅台联名咖啡是近期备受关注的合作咖啡项目&#xff0c;其联名咖啡产品在…

安防监控/视频存储/视频汇聚平台EasyCVR如何接入智能分析网关V4?

TSINGSEE青犀AI边缘计算网关硬件 —— 智能分析网关目前有5个版本&#xff1a;V1、V2、V3、V4、V5&#xff0c;每个版本都能实现对监控视频的智能识别和分析&#xff0c;支持抓拍、记录、告警等&#xff0c;每个版本在算法模型及性能配置上略有不同。硬件可实现的AI检测包括&am…

c++中的对齐问题

c中的对齐问题 需要对齐的原因 尽管内存是以字节为单位&#xff0c;但是大部分处理器并不是按字节块来存取内存的.它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存&#xff0c;我们将上述这些存取单位称为内存存取粒度. 现在考虑4字节存取粒度的处理器取in…

java八股文面试[JVM]——引用计数、可达性分析

要想进行垃圾回收&#xff0c;得先知道什么样的对象是垃圾。 引用计数法 对于某个对象而言&#xff0c;只要应用程序中持有该对象的引用&#xff0c;就说明该对象不是垃圾&#xff0c;如果一个对象没有任何指针对其引用&#xff0c;它就是垃圾。 引用计数法在对象头处维护一…

论坛系统公共组件部分

1.在Java⽬录下创建包&#xff0c;在Resources⽬录下创建⽂件夹&#xff0c;结构如下 ├─java # java⽂件区 │ └─com │ └─example │ └─demo │ ├─common # 公共类 │ ├─config # 配置…

DBeaver新建Elasticsearch连接报错Error downloading driver libraries解决方案

1.软件版本背景 DBeaver Ultimate 22.1.0 elasticsearch 7.10 可能因DBeaver的版本不同&#xff0c;导致页面略有差异&#xff0c;请自行脑补&#xff01; 2.新建数据库&#xff08;Elasticsearch&#xff09;连接 点击新建数据库连接按钮 选择Elasticsearch 填写相关配置…

javaScript:节点操作

目录 前言 常用的节点操作 innerHTML 的两个弊端&#xff08;补充&#xff09; createElement(标签名)使用dom方法创建一个元素 父元素.appendChild(子元素) 添加到父元素 注意 指定插入 父元素.insertBefore(要添加的元素&#xff0c;父元素中的指定子元素) 注意&…