zoukankan      html  css  js  c++  java
  • Android NDK入坑之旅(二):关于NDK

    1.NDK简介

    Android NDK 是一套允许您使用原生代码语言(例如 C 和 C++)实现部分应用的工具集;

    在开发某些类型应用时,这有助于您重复使用以这些语言编写的代码库;

    可用以从你自己的源代码构建,或者利用现有的预构建库。

    2.NDK的应用

    Google官方不推荐初学者使用NDK进行开发,NDK增加了开发过程的复杂性,对于大多数的Android应用开发来说并没有什么卵用;

    从设备获取卓越性能以用于计算密集型应用,例如游戏或物理模拟;

    重复使用您自己或其他开发者的 C 或 C++ 库。

    上面这两种情况下,NDK那就是一件神器了,至少目前来说是这样的;

    NDK多用于:

    • 在平台之间移植其应用;
    • 重复使用现有库,或者提供其自己的库供重复使用;
    • 在某些情况下提高性能,特别是像游戏这种计算密集型应用。

    3.NDK的工作方式

    1).主要组件

    • ndk-build:ndk-build脚本用于在 NDK 中心启动构建脚本,这些由NDK启动的脚本其功能包括:

     

    • 自动探测您的开发系统和应用项目文件以确定要构建的内容;
    • 生成二进制文件;
    • 将二进制文件复制到应用的项目路径。

    对于ndk-build有兴趣,请参考ndk-build

    • Java:这个不用多说,生成.dex文件在DVM中运行的文件;
    • 原生共享库:NDK 从原生源代码构建这些库或 .so 文件;

    注:

            如果两个库使用相同的签名实现各自的方法,就会发生关联错误。

            在 C 语言中,“签名”只表示方法名称。在 C++ 中,“签名”不仅表示方法名称,还表示其参数名称和类型

    • 原生静态库:NDK 也可构建静态库或 .a 文件,您可以关联到其他库;
    • Java 原生接口 (JNI):JNI 是 Java 和 C++ 组件用以互相沟通的接口,详细信息请移步至Java 原生接口规范
    • 应用二进制界面 (ABI):

    ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互;

    NDK 根据这些定义构建 .so 文件;

    不同的 ABI 对应不同的架构:NDK 包含对 ARMEABI(默认)、MIPS 和 x86 的 ABI 支持;

    如需了解详细信息,请参阅ABI 管理

    • 清单:如果您要编写没有 Java 组件的应用,必须在清单中声明 NativeActivity 类。原生 Activity 和应用在“使用 native_activity.h 接口”下提供了如何执行此操作的详细信息;

    注意:以下两个组件只在使用 ndk-build 脚本构建时以及使用 ndk-gdb 脚本调试时才需要

    • Android.mk:必须在 jni 文件夹内创建 Android.mk 配置文件。 ndk-build 脚本将查看此文件,其中定义了模块及其名称、要编译的源文件、版本标志以及要链接的库。
    • Application.mk:此文件枚举并描述您的应用需要的模块。这些信息包括:
    • 用于针对特定平台进行编译的 ABI;
    • 工具链;
    • 要包含的标准库(静态和动态 STLport 或默认系统)。
    但行好事,莫问前程;你若盛开,蝴蝶自来;你若坚强,命运自会给你打赏。
  • 相关阅读:
    模拟死锁
    B站学习斯坦福大学Swift 语言教程 iOS11 开发【第一集】踩到的几个坑(XCode 13.2.1版本)
    数学之美番外篇:平凡而又神奇的贝叶斯方法
    joj 1753: Street Numbers
    二叉树的三种遍历(递归+非递归)
    joj 1905: Freckles
    joj 2630: A Pair of Graphs(同构图的判定)
    vue3.x 中获取dom元素
    defineProperty 和 Proxy 的区别
    vue 按钮的防抖和节流
  • 原文地址:https://www.cnblogs.com/songjie-xuan/p/7416541.html
Copyright © 2011-2022 走看看