Android架构 架构和 CPU ABI - NDK

这篇具有很好参考价值的文章主要介绍了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_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

Android架构 架构和 CPU ABI - NDK,android,java,android,java文章来源地址https://www.toymoban.com/news/detail-695445.html

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    }

到了这里,关于Android架构 架构和 CPU ABI - NDK的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mac系统配置java、Android_sdk、gradle、maven、ndk、flutter、tomcat环境变量

    搞了三天,终于搞定MAC系统下的各种环境变量了…… 旧版本10.13.6或者更老的MAC系统,只用在.bash_profile文件编辑就行了;新版本10.14.2、10.15.7或者更高的,还要去.zshrc文件加一句source ~/.bash_profile,才能使所有环境永久生效。 打开终端(相当于Windows系统的命令提示符),运行

    2024年02月05日
    浏览(50)
  • Android NDK介绍 Android NDK静态注册 动态注册:

            Application.mk(ARM硬件指令集/工程编译脚本/stl支持等)         Android.mk(编译选项/头文件/源文件及依赖库等)         local_path(call my-dir)         include $(clear_vars)         local_arm_mode:= arm指令模式         local_module:=模块名称         local_src_files

    2024年02月16日
    浏览(41)
  • Android Studio 进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用本地函数)并编译出本地so动态库

    1.首先认识一下NDK。 (1)什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,

    2024年02月11日
    浏览(48)
  • 【Android -- JNI 和 NDK】认识 NDK

    定义 :Native Development Kit ,是 Android 的一个工具开发包。 NDK 是属于 Android 的,与 Java 并无直接关系 作用 :快速开发 C、 C++ 的动态库,并自动将 so 和应用一起打包成 APK 即可通过 NDK 在 Android 中 使用 JNI 与本地代码(如C、C++)交互 应用场景 :在 Android 的场景下使用 JNI 。

    2024年02月11日
    浏览(43)
  • Android NDK开发详解之Android.mk探秘

    本页介绍了 ndk-build 所使用的 Android.mk 构建文件的语法。 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向构建系统描述源文件和共享库。它实际上是一个微小的 GNU makefile 片段,构建系统会将其解析一次或多次。Android.mk 文件用于定义 Application.mk、构建系统和环境变量

    2024年02月06日
    浏览(54)
  • Android进阶-NDK技术

    一.介绍 1.什么是ndk技术? 在学习ndk技术前,我们需要先了解一下JNI(Java Native Interface)技术,JNI技术是一种实现Java代码和C/C++代码之间交互的技术,它提供了一组编程接口,使得Java程序可以调用C/C++代码并与其进行通信。通过JNI技术,开发者可以将C/C++代码嵌入Java项目中,并在

    2024年02月16日
    浏览(50)
  • android使用ndk开发

    ndk sdk要单独下载和android sdk不同 https://developer.android.google.cn/ndk/downloads?hl=zh-cn 解压后添加ndk路径到path即可 gradle下载太慢使用国内镜像 distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-6.7.1-all.zip 执行gradlew.bat gradlew //检查环境,下载gradle依赖项 gradlew tasks //查看可执行任务 gr

    2024年01月17日
    浏览(43)
  • Android NDK开发详解之ndk-build 脚本

    ndk-build 脚本使用 NDK 的基于 Make 的构建系统构建项目。我们针对 ndk-build 使用的 Android.mk 和 Application.mk 配置提供了更具体的文档。 内部原理 运行 ndk-build 脚本相当于运行以下命令: $GNUMAKE 指向 GNU Make 3.81 或更高版本, 则指向 NDK 安装目录。您可以根据这些信息从其他 Shell 脚

    2024年02月06日
    浏览(42)
  • Android集成OpenCV(NDK)

    1.下载OpenCv的动态库(.so) OpenCv官网,这边下载的是4.6.0 2.解压opencv-4.6.0-android-sdk.zip 复制目录 opencv-4.6.0-android-sdkOpenCV-android-sdksdknativejni 的 include 文件夹,和 opencv-4.6.0-android-sdkOpenCV-android-sdksdknativelibsarmeabi-v7a 目录对应的cpu架构类型.项目没有对应目录,手动创建一下. 3.配置

    2024年02月06日
    浏览(35)
  • [Android] Android版本 和 SDK / NDK / Qt 版本对应关系

    平台版本  API级别(SDK版本) 版本代号 发布时间 Android 11 30 R 2020.9 Android 10.0 29  Q 2019.8 Android 9.0 28 Pie 2018.8 Android 8.1  27  Oreo 2017.12 Android 8.0  26     Oreo 2017.8 Android 7.1.1  25     Nougat 2016.10 Android 7.0 24     Nougat 2016.8 Android 6.0.1 23     Marshmallow 2015.12 Android 6.0 23     Marshma

    2024年01月17日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包