Android架构 架构和 CPU ABI - NDK

查看设备架构

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

C:\Users\liyd>adb -s emulator-5554 shell getprop ro.product.cpu.abi
x86_64C:\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.mzph.cn/news/68830.shtml

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

相关文章

VB合同管理系统设计与实现

摘 要 在21世纪,随着计算机科学的发展,数据库技术在人们日常工作中的应用越来越广泛,为广大用户提供了更加周到和人性化的服务。数据库技术已逐渐成为当今计算机应用的潮流。本文主要是通过制作一款数据库软件—即“合同管理系统”来介绍数据库技术在人们日常生活和工作…

ElasticSearch入门

一、基本命令_cat 1、查看节点信息 http://192.168.101.132:9200/_cat/nodes2、查看健康状况 http://192.168.101.132:9200/_cat/health3、查看主节点的信息 http://192.168.101.132:9200/_cat/master4、查看所有索引 http://192.168.101.132:9200/_cat/indices二、索引一…

【算法与数据结构】700、LeetCode二叉搜索树中的搜索

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;二叉搜索树的性质&#xff1a;左节点键值 < 中间节点键值 < 右节点键值。那么我们根据此性质&am…

软件测试/测试开发丨Selenium 网页frame与多窗口处理

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27048 一、多窗口处理. 1.1、多窗口简介 点击某些链接&#xff0c;会重新打开⼀个窗⼜&#xff0c;对于这种情况&#xff0c;想在新页⾯上操作&#xff0…

流媒体服务器与视频服务器有什么区别?

流媒体服务器与视频服务器有什么区别&#xff1f; 流媒体服务器用在远程教育&#xff0c;视频点播、网络电台、网络视频等方面。 直播过程中就需要使用流媒体服务器&#xff0c;一个完整的直播过程&#xff0c;包括采集、处理、编码、封包、推流、传输、转码、分发、解码、播放…

2023-09-02 LeetCode每日一题(最多可以摧毁的敌人城堡数目)

2023-09-02每日一题 一、题目编号 2511. 最多可以摧毁的敌人城堡数目二、题目链接 点击跳转到题目位置 三、题目描述 给你一个长度为 n &#xff0c;下标从 0 开始的整数数组 forts &#xff0c;表示一些城堡。forts[i] 可以是 -1 &#xff0c;0 或者 1 &#xff0c;其中&…

Burp插件HaE与Authz用法

HaE与Authz均为BurpSuite插件生态的一员&#xff0c;两者搭配可以避免“越权”、“未授权”两类漏洞的重复测试行为。&#xff08;适用于业务繁杂&#xff0c;系统模块功能多的场景&#xff09; 两个插件都可以在store里安装 安装完后&#xff0c;点击Filter Settings勾选Sho…

第64步 深度学习图像识别:多分类建模误判病例分析(Pytorch)

基于WIN10的64位系统演示 一、写在前面 上期我们基于TensorFlow环境介绍了多分类建模的误判病例分析。 本期以健康组、肺结核组、COVID-19组、细菌性&#xff08;病毒性&#xff09;肺炎组为数据集&#xff0c;基于Pytorch环境&#xff0c;构建SqueezeNet多分类模型&#xf…

业务需要咨询?开发遇到 bug 想反馈?开发者在线提单功能上线!

大家是否遇到过下列问题—— 在开发的时候&#xff0c;遇到 bug 需要反馈… 有合作意向的时候&#xff0c;想更多了解业务和相关产品… 在接入的时候&#xff0c;需要得到专业技术支持… 别急&#xff0c;荣耀开发者服务平台在线提单功能上线了~ 处理问题分类说明&#xff1…

C语言---位域(位段)

位域&#xff08;位段&#xff09; 1、位域定义&#xff1a; 有些数据在存储时并不需要占用一个完整的字节&#xff0c;只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态&#xff0c;用 0 和 1 表示足以&#xff0c;也就是用一个二进位。正是基于这种考虑&…

xxl-job快速使用

目录 官方文档 具体操作一下 为什么从github上拉取项目后这些包的颜色都没有变呢?

Mongoose populate实现多表关联存储与查询

使用Mongoose populate实现多表关联与查询 mongodb不是传统的关系型数据库&#xff0c;我们可以使用monogoose方便的将多个表关联起来&#xff0c;实现一对多、多对多的数据表存储和查询功能。 本文已最常见的一对多关系模型&#xff0c;介绍简单的数据模型定义、存储、查询。 …

MIT6.S081实验环境搭建

MIT6.S081 lab 环境搭建 本文参考了MIT的官方指南和知乎文章环境搭建 step1 首先需要一个ubuntu20.04的系统&#xff0c;我使用的是vscode的WSL2连接的ubuntu20.04&#xff0c;使用virtual box建一个ubuntu20.04的虚拟机应该也可以。 可以用 lsb_release -a 查看一下自己ub…

Java stream求和以及mapToDouble sum精度丢失解决办法

在 Java 8 中&#xff0c;Stream.reduce()合并流的元素并产生单个值。 基本数据类型 和 包装类型 的一位数组求和 package test day1;import java.util.Arrays;public class Test {public static void main(String[] args) {// 基本数据类型 int long doubleint[] arr2 ne…

对可再生能源和微电网集成研究的新控制技术和保护算法进行基线和测试及静态、时域和频率分析研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

基于React实现:弹窗组件与Promise的有机结合

背景 弹窗在现代应用中是最为常见的一种展示信息的形式&#xff0c;二次确认弹窗是其中最为经典的一种。当我们在React&#xff0c;Vue这种数据驱动视图的前端框架中渲染弹窗基本是固定的使用形式。 使用方式&#xff1a;创建新的弹窗组件&#xff0c;在需要弹窗的地方引用并…

【系统设计系列】 回顾可扩展性

系统设计系列初衷 System Design Primer&#xff1a; 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版&#xff1a; https://github.com/donnemart…

【MySQL】mysql | 数据量统计

一、概览 1、统计数据库信息 2、主要指标涉及&#xff1a; 数据表数量/字段总量/存储条数/存储量 二、命令 1、数据表数量 SELECT COUNT(*) FROM information_schema.tables WHERE table_schema 库名; 某个库中&#xff0c;有多少个表 ~~ 2、字段总量 selectsum(FIELD_COUNT…

平面设计的三大基本元素 优漫动游

平面设计需要美术基础&#xff0c;有美术基础的新人往往能更快完成平面设计岗的转行&#xff0c;在专业培训机构内讲师授课时也会从平面设计的基础——三大基本元素开始。今天就跟大家具体介绍一下平面设计的三大基本元素&#xff0c;让大家知道到底都有哪些。 平面设计的三…

关于c语言中对齐用法,控制精度,字符与字符串解释,(04,02,0004)形式的写法

一&#xff1a;宽度精度 以整形举例&#xff1a; 用法%d 对齐中有宽度和精度参数设置 %(x1).(x2)d 其中x1就是宽度设置(固定长度) x2就是精度设置(保留几位小数) 特殊的不能直接赋值参数&#xff0c;需要间接赋值 例子&#xff1a; #includ…