Android NDK开发详解之使用预构建库

这篇具有很好参考价值的文章主要介绍了Android NDK开发详解之使用预构建库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


NDK 支持使用预构建库(同时支持静态库和共享库)。此功能有以下两个主要用例:
    向第三方 NDK 开发者分发您自己的库,而不分发您的源代码。
    使用您自己的库的预构建版本来提升构建速度。

本页将介绍如何使用预构建库。

声明预构建库

您必须将自己使用的每个预构建库声明为一个独立模块。为此,请执行以下步骤:

    为模块提供名称。此名称不需要与预构建库本身的名称相同。

    在模块的 Android.mk 文件中,将指向您提供的预构建库的路径分配到 LOCAL_SRC_FILES。指定 LOCAL_PATH 变量的值的相对路径。
    注意:您必须确保选择与您的目标 ABI 对应的预构建库版本。如需了解有关确保库支持 ABI 的详细信息,请参阅为预构建库选择 ABI。

    根据您使用的是共享库 (.so) 还是静态库 (.a),添加 PREBUILT_SHARED_LIBRARY 或 PREBUILT_STATIC_LIBRARY。

下面这个简单的示例假设预构建库 libfoo.so 与描述它的 Android.mk 文件位于同一个目录中。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
include $(PREBUILT_SHARED_LIBRARY)

在此示例中,模块名称与预构建库的名称相同。

构建系统会将您的预构建共享库副本放入 $PROJECT/obj/local 中,而将另一个提取的调试信息的副本放入 P R O J E C T / l i b s / < a b i > 中。此处, PROJECT/libs/<abi> 中。此处, PROJECT/libs/<abi>中。此处,PROJECT 是项目的根目录。

从其他模块引用预构建库

如需从其他模块引用预构建库,请在与这些模块关联的 Android.mk 文件中,将该预构建库的名称指定为 LOCAL_STATIC_LIBRARIES 或 LOCAL_SHARED_LIBRARIES 变量的值。

例如,使用 libfoo.so 的模块的说明可能类似于以下内容:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-user
LOCAL_SRC_FILES := foo-user.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)

此处,LOCAL_MODULE 是引用预构建库的模块的名称;LOCAL_SHARED_LIBRARIES 是预构建库本身的名称。

导出预构建库的头文件

foo-user.c 中的代码取决于通常位于随预构建库分发的头文件(如 foo.h)中的特定声明。例如,foo-user.c 中可能会有类似于以下内容的一行代码:

#include <foo.h>

在这种情况下,如果您构建 foo-user 模块,需要提供头文件及其指向编译器的 include 路径。完成此任务的一个简单方法是在预构建模块定义中使用导出变量。例如,只要头文件 foo.h 位于与预构建模块关联的 include 目录下,您就可以按以下方式对其进行声明:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

此处的 LOCAL_EXPORT_C_INCLUDES 定义会确保构建系统导出指向预构建库的 include 目录的路径,针对依赖于预构建库的模块将该路径附加到 LOCAL_C_INCLUDES 的值开头。

此操作可让编译系统查找必需的标头。

调试预构建库

建议您提供包含调试符号的预构建共享库。NDK 构建系统总是会从其安装到 $PROJECT/libs// 的那个版本的库中删除这些符号,但您可以使用调试版本通过 ndk-gdb 进行调试。

为预构建库选择 ABI

请务必为您的目标 ABI 选择正确版本的预构建共享库。Android.mk 文件中的 TARGET_ARCH_ABI 变量可以将构建系统指向适当版本的库。

例如,假设您的项目包含库 libfoo.so 的以下两个版本:

armeabi/libfoo.so
x86/libfoo.so

以下代码段显示了如何使用 TARGET_ARCH_ABI,以便构建系统选择适当版本的库:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

如果您已将 armeabi 指定为 TARGET_ARCH_ABI 的值,构建系统便会使用 armeabi 目录中的 libfoo.so 版本。如果您已将 x86 指定为 TARGET_ARCH_ABI 的值,构建系统便会使用 x86 目录中的版本。文章来源地址https://www.toymoban.com/news/detail-737108.html

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

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

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

相关文章

  • 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日
    浏览(44)
  • Android NDK开发详解之调试和性能分析的系统跟踪概览

    “系统跟踪”就是记录短时间内的设备活动。系统跟踪会生成跟踪文件,该文件可用于生成系统报告。此报告有助于您了解如何最有效地提升应用或游戏的性能。 有关进行跟踪和性能分析的全面介绍,请参阅 Perfetto 文档中的跟踪 101 页面。 Android 平台提供了多种不同的跟踪记

    2024年02月06日
    浏览(52)
  • Android NDK开发详解之针对中间件供应商的建议

    分发使用 NDK 构建的中间件会引发其他问题,但应用开发者无需对此感到担心。预构建库会为用户提供一些实现选项。 选择 API 级别和 NDK 版本 您的用户无法使用低于您的级别的 minSdkVersion。如果用户的应用需要在 API 21 上运行,您就无法针对 API 24 构建应用。您可以针对低于

    2024年02月07日
    浏览(41)
  • Android NDK开发详解之编写C/C++代码中的Android SDK 版本属性)

    本部分将讨论如何使用 NDK 提供的库。 注意:有关导入预构建库(未包含在 NDK 中的库)的指南已移至各个构建系统的相关部分。请根据您的项目需求参阅 CMake 或 ndk-build 指南。 文中说明了 NDK 提供的 C ++ 运行时,并介绍了 NDK 提供的其他库(例如 OpenGL ES 和 OpenSL ES)以及支持

    2024年02月07日
    浏览(52)
  • 使用vscode开发android ndk的思路

    首先下载Visual Studio Code和Android Studio 选择对应系统的软件最新版本,下载完成后安装即可 ①.​Visual Studio Code​ 打开vscode,按下Ctrl + Shift + X进入拓展,在搜索框内输入C/C++ Extension Pack,然后选择安装(install),安装完成后如下所示(如已经安装则忽略) ​  ②.Android Studio 打开

    2024年02月03日
    浏览(60)
  • Android JNI系列详解之ndk-build工具的使用

    一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用,今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式:  如上图所示,第一种方式是Android.mk+Application.mk+gradle的方式生成库文件;第二种方式是Android.mk+Application.mk+命

    2024年02月10日
    浏览(35)
  • (NDK编译)详解使用Android.mk编译的C/C++程序过程

    想要在 Android设备 上运行 C/C++程序 可执行文件,可采用一个方法就是使用 NDK编译 ,很多时候要比 gcc编译 更适合,这里我采用的是 imx6q开发板 上面装载了自己编写的Android6.0.1镜像,在 Ubuntu64位 系统上采用NDK编译。 目录 1.准备文件 2.编写Android.mk 注意 完整Android.mk代码 3.NDK编

    2024年02月05日
    浏览(45)
  • Android-NDK开发——基本概念

    在Android开发中,有时候出于安全,性能,代码共用的考虑,需要使用C/C++编写的库。虽然在现代化工具链的支持下,这个工作的难度已经大大降低,但是毕竟万事开头难,初学者往往还是会遇到很多不可预测的问题。本篇就是基于此背景下写的一份简陋指南,希望能对刚开始编

    2024年02月09日
    浏览(39)
  • Android JNI系列详解之CMake和ndk-build编译工具介绍

    一、前提 CMake和ndk-build只是编译工具,本次主要介绍ndk-build和CMake的区别,下节课介绍他们的使用。 二、CMake工具介绍 CMake:cross platform make,是跨平台的编译工具 CMake是在AndroidStudio2.2之后引入(目前默认的NDK编译工具),使用时配合CMakeList.txt和gradle。 对C++的配置: 默认配置

    2024年02月12日
    浏览(35)
  • 安卓高级工程师面试题,Android 仪器化单元测试(1),ndk开发入门

    配置 build.gradle 依赖 dependencies { androidTestImplementation ‘androidx.test🏃1.4.0’ androidTestImplementation ‘androidx.test:rules:1.4.0’ } android { defaultConfig { testInstrumentationRunner “androidx.test.runner.AndroidJUnitRunner” } } 测试样例 测试代码 本例子参考 google 官方网站。因为官网里面很多类没有给到

    2024年04月16日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包