谷歌中国开发者社区 (GDG)
  • 主页
  • 博客
    • Android
    • Design
    • GoogleCloud
    • GoogleMaps
    • GooglePlay
    • Web
  • 社区
    • 各地社区
    • 社区历史
    • GDG介绍
    • 社区通知
  • 视频
  • 资源
    • 资源汇总
    • 精选视频
    • 优酷频道

介绍 Android 原生开发工具包 r14

2017-04-11adminGoogleDevFeedsNo comments

code { background-color: transparent }

发布人: Android NDK 技术负责人 Dan Albert

Android NDK r14

现在,可以下载最新版本 Android 原生开发工具包 (NDK)——Android NDK r14。也可以通过 Android Studio 在 SDK 管理器中下载此版本。

那么 r14 有哪些新增功能?可以在此处查看完整的变更日志,而其中最突出的功能包括如下:

  • 将所有平台标头更新为统一的标头(下文详细介绍)
  • 现在可在 Darwin 和 Linux 上对 Clang 进行链接时优化 (LTO)
  • 现已更新 libc++。您现在可以将 thread_local  用于重要的析构函数统计(仅限 Clang)
  • RenderScript 回归!

    统一标头

    我们彻底重构了在 NDK 中发布平台标头文件的方式。现在,不再是每个目标 API 级别单独设置一组标头,而是共同使用一组统一的标头。在这些标头中,通过 #if __ANDROID_API__ >= __ANDROID_API_FOO__ 预处理器指令保证 API 可用于每个 Android 平台。

    之前的方法依靠的是定期捕获的平台标头快照。这意味着,在过去,任何时候我们修复仅与某个标头有关的错误时,除了偶尔的向后移植外,此修复仅在最新版本中可用。现在,错误修复可用于任何 NDK API 级别。

    除了错误修复之外,这还意味着您可以访问每个目标版本中最新的 Linux UAPI 标头。对于移植现有 Linux 代码(尤其底层代码)的用户而言,这最为重要。需要记住的重要的一点是:仅仅具有标头,并不意味着您运行的设备的内核版本足够新,可支持所有系统调用。一如既往,系统调用可能返回 ENOSYS。

    除了 Linux 标头外,您还可以获取 OpenGL 和 OpenSLES 等的最新标头。当您的目标 API 级别版本较旧时,可以更轻松地、有条件地使用新 API。现在,尽管在 KitKat 发布之前该库不可用,但可以在 Ice Cream Sandwich 中访问 GLES3 标头。您仍然需要通过 dlopen/dlsym 使用所有 API 调用,但您至少可以访问调用这些函数所需的所有常量和 #defines。
    请注意,从 NDK r16 开始,我们将移除旧版标头,因此,越早提交错误,过渡将会越顺利。

    注意

    在第三方标头中,不存在像 OpenGL 中那样的 API #ifdef Guard。在这些情况下,如果您使用的 API 不适用于目标 API 级别,将出现链接时错误(未定义的引用)而非编译时错误。

    目前使用 GCC 的独立工具链不支持开箱即用(未来也不支持)。要使用 GCC,请在编译时传递 -D__ANDROID_API__=$API。

    在您的构建中启用统一标头

    为了实现旧版标头向统一标头的顺利过渡,我们默认不启用新标头,不过它在 r15 中默认为启用。您选择如何使用统一标头,取决于您的构建系统。

    ndk-build

    在 Application.mk 中:

        APP_UNIFIED_HEADERS := true

    您也可以像下面这样从命令行设置此属性:

        $ ndk-build APP_UNIFIED_HEADERS=true

    如果您通过 Gradle 将 ndk-build 用于 externalNativeBuild,请在 build.gradle 中指定以下配置设置:

        android {
    ...
    defaultConfig {
    ...
    externalNativeBuild {
    ndkBuild {
    ...
    arguments "APP_UNIFIED_HEADERS=true"
    }
    }
    }
    }

    CMake

    在配置您的版本时,设置 ANDROID_UNIFIED_HEADERS=ON。常用的设置方式是:使用 cmake -DANDROID_UNIFIED_HEADERS=ON $OTHER_ARGS 来调用 CMake。

    如果您通过 Gradle 将 CMake 用于 externalNativeBuild,您可以使用:

        android {
    ...
    defaultConfig {
    ...
    externalNativeBuild {
    cmake {
    ...
    arguments "-DANDROID_UNIFIED_HEADERS=ON"
    }
    }
    }
    }

    独立工具链

    在创建独立工具链时,传递 –unified-headers。请注意,此选项目前不适用于旧版脚本 make-standalone-toolchain.sh,而仅适用于 make_standalone_toolchain.py。

    实验性 Gradle 插件:

    即将推出!敬请在此处关注最新消息。

    自定义构建系统?

    我们如您所愿!可以在此处找到有关向构建系统添加统一标头支持功能的说明。

    有关统一标头的附加信息,请参阅我们的文档和跟踪错误。 如果您希望下载后续版本,可在主分支中找到最新的文档版本。

<!—->

Source: 介绍 Android 原生开发工具包 r14

除非特别声明,此文章内容采用知识共享署名 3.0许可,代码示例采用Apache 2.0许可。更多细节请查看我们的服务条款。

Tags: Develop

Related Articles

Looking for Europe’s top entrepreneurs: The 2018 Digital Top 50 Awards

2018-02-22admin

即时执行:一个由运行定义的命令式 TensorFlow 接口

2017-11-18admin

Apply now to Launchpad Accelerator—now including Africa and Europe!

2017-03-02admin

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Recent Posts

  • Cloud Services Platform—bringing hybrid cloud to you
  • Setting a course to the future of cloud computing
  • Analyze this—expanding the power of your API data with new Apigee analytics features
  • Hello, .dev!
  • Google announces intent to acquire Alooma to simplify cloud migration

Recent Comments

  • Chen Zhixiang on Concurrent marking in V8
  • admin on 使用 Android Jetpack 加快应用开发速度
  • 怪盗kidou on 使用 Android Jetpack 加快应用开发速度
  • 鸿维 on Google 帐号登录 API 更新
  • admin on 推出 CVPR 2018 学习图像压缩挑战赛

Archives

  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • September 2017
  • August 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • September 2016
  • August 2016
  • May 2016
  • April 2016
  • March 2016
  • February 2016
  • January 2016
  • December 2015
  • November 2015
  • October 2015
  • September 2015
  • August 2015
  • July 2015
  • June 2015
  • January 1970

Categories

  • Android
  • Design
  • Firebase
  • GoogleCloud
  • GoogleDevFeeds
  • GoogleMaps
  • GooglePlay
  • Google动态
  • iOS
  • Uncategorized
  • VR
  • Web
  • WebMaster
  • 社区
  • 通知

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org

最新文章

  • Cloud Services Platform—bringing hybrid cloud to you
  • Setting a course to the future of cloud computing
  • Analyze this—expanding the power of your API data with new Apigee analytics features
  • Hello, .dev!
  • Google announces intent to acquire Alooma to simplify cloud migration
  • Google announces intent to acquire Alooma to simplify cloud migration
  • New UI tools and a richer creative canvas come to ARCore
  • Introducing PlaNet: A Deep Planning Network for Reinforcement Learning
  • AI in depth: monitoring home appliances from power readings with ML
  • AI in depth: monitoring home appliances from power readings with ML

最多查看

  • 谷歌招聘软件工程师 (21,032)
  • Google 推出的 31 套在线课程 (20,122)
  • 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion (18,720)
  • Seti UI 主题: 让你编辑器焕然一新 (12,686)
  • Android Studio 2.0 稳定版 (8,963)
  • Android N 最初预览版:开发者 API 和工具 (7,934)
  • 像 Sublime Text 一样使用 Chrome DevTools (5,949)
  • Google I/O 2016: Android 演讲视频汇总 (5,519)
  • 用 Google Cloud 打造你的私有免费 Git 仓库 (5,503)
  • 面向普通开发者的机器学习应用方案 (5,200)
  • 生还是死?Android 进程优先级详解 (4,971)
  • 面向 Web 开发者的 Sublime Text 插件 (4,140)
  • 适配 Android N 多窗口特性的 5 个要诀 (4,103)
  • 参加 Google I/O Extended,观看 I/O 直播,线下聚会! (3,476)
© 2018 中国谷歌开发者社区 - ChinaGDG