Android NDK开发详解之编写C/C++代码中的Android SDK 版本属性)

这篇具有很好参考价值的文章主要介绍了Android NDK开发详解之编写C/C++代码中的Android SDK 版本属性)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本部分将讨论如何使用 NDK 提供的库。
注意:有关导入预构建库(未包含在 NDK 中的库)的指南已移至各个构建系统的相关部分。请根据您的项目需求参阅 CMake 或 ndk-build 指南。

文中说明了 NDK 提供的 C ++ 运行时,并介绍了 NDK 提供的其他库(例如 OpenGL ES 和 OpenSL ES)以及支持这些库所需的最低 Android API 级别。

Android 应用可在其 build.gradle 文件中设置多项 SDK 版本属性。Android build.gradle 文档说明了这些属性对于应用的一般含义。本文档介绍了这些属性如何影响 NDK build。

compileSdkVersion

此属性对 NDK 构建没有任何影响。NDK 的 API 可用性受 minSdkVersion 约束。这是因为 C++ 符号应在库加载时被即时解析,而不是延迟到首次调用时解析(像在 Java 中一样)。如果在 minSdkVersion 中使用任何不可用的符号,将会导致库在不具备新 API 的操作系统版本上加载失败,无论这些 API 是否被调用都是如此。

对于新应用,请选择可用的最新版本。对于现有应用,请在方便时将其更新到最新版本。

targetSdkVersion

与 Java 类似,应用的 targetSdkVersion 可以改变原生代码的运行时行为。系统中的行为变更仅会在可行情况下影响满足以下条件的应用:targetSdkVersion 高于或等于引入相应变更的操作系统版本。

对于新应用,请选择可用的最新版本。对于现有应用,请在方便时(更新 compileSdkVersion 之后)将其更新到最新版本。

虽然应用开发者通常知道其应用的 targetSdkVersion,但对于无法知晓其用户会选择哪个 targetSdkVersion 的库开发者来说,此 API 非常有用。

在运行时,您可以通过调用 android_get_application_target_sdk_version() 来获取应用所使用的 targetSdkVersion。此 API 可在 API 级别 24 及更高级别中找到。此函数包含以下签名:


/**
 * Returns the `targetSdkVersion` of the caller, or `__ANDROID_API_FUTURE__` if
 * there is no known target SDK version (for code not running in the context of
 * an app).
 *
 * The returned values correspond to the named constants in `<android/api-level.h>`,
 * and is equivalent to the AndroidManifest.xml `targetSdkVersion`.
 *
 * See also android_get_device_api_level().
 *
 * Available since API level 24.
 */
int android_get_application_target_sdk_version() __INTRODUCED_IN(24);

其他行为变更可能取决于设备 API 级别。您可以通过调用 android_get_device_api_level() 来获取运行应用的设备的 API 级别。此函数包含以下签名:

/**
 * Returns the API level of the device we're actually running on, or -1 on failure.
 * The returned values correspond to the named constants in `<android/api-level.h>`,
 * and is equivalent to the Java `Build.VERSION.SDK_INT` API.
 *
 * See also android_get_application_target_sdk_version().
 */
int android_get_device_api_level();

maxSdkVersion

此属性对 NDK build 没有任何影响。

minSdkVersion

build.gradle 文件中设置的 minSdkVersion 决定了在构建时可用的 API(请参阅 compileSdkVersion,了解这不同于 Java build 的原因),还决定了与您的代码兼容的最低操作系统版本。

NDK 使用 minSdkVersion 来确定在编译代码时可以使用哪些功能。例如,此属性决定 libc 中使用的 FORTIFY 功能,如果您的二进制文件与旧版 Android 系统不兼容,此属性还可能会为这些二进制文件启用性能或大小改进(例如 GNU 哈希或 RELR)。即使您不使用任何新的 API,此属性仍然决定您的代码支持的最低操作系统版本。
警告:即使您的原生库使用较新的 minSdkVersion 构建,您的应用仍有可能可以在较旧设备上运行。请勿依赖此行为。因为无法保证此行为能够正常工作,而且此行为可能不适用于其他 NDK 版本、操作系统版本或具体设备。

对于新应用,请参阅 Android Studio 的 New Project 向导中或 apilevels.com 上的用户分布数据。请在潜在市场份额和维护成本之间做出权衡。minSdkVersion 越低,您就需要花费越多时间来解决旧 bug,并为当时尚未实现的功能添加回退行为。

对于现有应用,请在旧的 API 级别不再值得维护的时候提高 minSdkVersion 级别;或者在您的用户要求降低 API 级别且降低后的级别值得维护时降低 API 级别。Play 管理中心会针对您的应用提供用户分布指标。
注意:NDK 有其自己的 minSdkVersion(在 /meta/platforms.json 中定义)。这是此 NDK 支持的最低 API 级别。 请勿将应用的 minSdkVersion 设置为低于此值。Play 可能会允许您的应用安装在旧版设备上,但 NDK 代码可能无法正常运行。

您的应用的 minSdkVersion 会通过 ANDROID_MIN_SDK_VERSION 宏提供给预处理器(旧版 ANDROID_APIANDROID_MIN_SDK_VERSION 完全相同,倾向于使用 ANDROID_MIN_SDK_VERSION 是因为其含义更清晰)。此宏由 Clang 自动定义,因此无需添加头文件即可使用它。对于 NDK build,系统始终会定义此宏。文章来源地址https://www.toymoban.com/news/detail-730494.html

到了这里,关于Android NDK开发详解之编写C/C++代码中的Android SDK 版本属性)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Android NDK开发详解之Application.mk探秘

    本文档介绍 ndk-build 所使用的 Application.mk 构建文件。 我们建议先阅读概念页面,然后再阅读本页面。 概览 Application.mk 指定 ndk-build 的项目级设置。默认情况下,它位于应用项目目录中的 jni/Application.mk 下。 注意:其中许多参数也具有模块等效项。例如,APP_CFLAGS 对应于 LOCA

    2024年02月08日
    浏览(50)
  • Android NDK开发详解之使用预构建库

    NDK 支持使用预构建库(同时支持静态库和共享库)。此功能有以下两个主要用例: 本页将介绍如何使用预构建库。 声明预构建库 您必须将自己使用的每个预构建库声明为一个独立模块。为此,请执行以下步骤: 下面这个简单的示例假设预构建库 libfoo.so 与描述它的 Android

    2024年02月06日
    浏览(46)
  • 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日
    浏览(46)
  • Unity对应SDK和NDK版本的对照表

    官网:Unity - Manual: Android environment setup 本人安装的是2022版本长期支持版本2022.3.15f1c1 安装Java的JDK环境就不在这里展开了,就记录下对Android SDK的设置,要与Unity的版本对应,否则会出现很多莫名奇妙的问题。 打开SDK Manager 选择下载的SDK版本 对应SDK Build-Tools的版本,这个很关键

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

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

    2024年02月07日
    浏览(39)
  • Android NDK开发详解之调试和性能分析的系统跟踪概览

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

    2024年02月06日
    浏览(50)
  • 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日
    浏览(49)
  • android studio指定ndk版本的方法

    在app/build.gradle下做如下声明,其中\\\"25.2.9519653\\\"是你所需要指定的ndk版本号 使用该字段后,对于通过Android studio创建的Native C++应用,会强制使用该版本的ndk进行编译,且指定后,android studio下可以关联到头文件的引用,如下所示,相关函数也可以进行跳转了 (包括自己创建的

    2024年02月07日
    浏览(35)
  • Unity2020打包安卓时配置环境踩过的坑(JDK&SDK&NDK&Gradle详解)

    之前的打包环境都是吃现成的, 这次新公司需要自己配置,踩了坑记录一下,以防之后遗忘.  如果是 用Hub管理的项目 可以通过Hub 去下载 安装内置的Open JDK ,SDK 等很方便也稳定. 没有用Hub的话 只能自己苦逼的去一个一个下载和配置 或者 通过Android studio 去下载. 1. JDK        

    2023年04月13日
    浏览(40)
  • android studio 如何下载指定版本的NDK

    安装及配置 NDK 和 CMake  |  Android 开发者  |  Android Developers 如果官方文档看不懂的,就看我写的口水话版本吧; 1、AS打开SDK、NDK下载的那个对话框,如图:    2、非常关键的一步,默认情况下选项的子项未展开,所以需要勾选右下角 “Show Package Detail” ,CMake也是一样的哈

    2024年02月12日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包