AS配置NDK开发环境,附CMake、NDK-build构建工具用法

2023-11-19

注意:Android Studio需要是1.3及以上版本,且版本号小于2.2,见文末说明。

步骤1:新建一个项目,打开Project Structure,设置Android NDK Location目录。
ndk_file.png
如果没有提前下载NDK包,可打开SDK Manager下载,如图:
ndk_download.png
步骤2:新建一个类,写一个本地Native方法。
native_method.png
由于没有头文件,因此,图示中的新建本地方法sayHello()会报错。

生成头文件方法:
打开AS的Terminal窗口,切换到app(可自定义项目名)->src->main->java目录,运行命令javah -d …/jni com.example.administrator.ndktest.Hello。
其中,
  javah为生成头文件的命令符号,
  -d表示指定头文件的输出目录,
  …/jni表示在当前目录的上一层目录生成jni目录,
  com.example.administrator.ndktest.Hello表示包名.类名,针对Hello.java生成头文件。
generate_headerFile.png
  命令执行成功后,会在java同级目录下生成jni目录,内含头文件。然后,点击AS的项目同步按钮(Sync Projects with Gradle Files)让jni代码同步。

若同步之后,报图示的错误,请在项目的gradle.properties中添加代码android.useDeprecatedNdk=true,然后再次点击同步按钮。
ndk_exception.png
步骤3:在jni目录下新建C/C++ Source File,Name名称与生成头文件的类名相同即可(此处即Hello),选中Create an associated header复选框,点击ok,jni目录下会生成hello.cpp和hello.h文件。
c++_1.png
c++_2.png
c++_3.png
步骤4:打开jni下的hello.cpp文件,导入头文件com.example.administrator.ndktest.Hello.h,实现
JNIEXPORT jstring JNICALL Java_com_example_administrator_ndktest_Hello_sayHello
(JNIEnv , jclass);
方法。代码见图示。
1.png
2.png
步骤5:打开Module下的build.gradle,在defaultConfig{}中添加脚本代码
ndk{
/指定.so文件名称为hello.so,NDK的配置选项可在NdkOptions.java中查找*/
moduleName “hello”
}
然后再次同步项目。
build_gradle.png
步骤6:回到Hello.java中,添加图示代码。
hello.png
未完待续(Android Studio 2.2以上版本按此方法配置无法成功)。

此文适合Android Studio 2.2之前的版本,因此建议参考以下转载文章:
Android NDK开发(一) 使用CMake构建工具进行NDK开发
Demo地址:https://github.com/Cayyoo/NDKDemo

Android NDK开发(二) 使用ndk-build构建工具进行NDK开发
Demo地址:https://github.com/Cayyoo/NDKBuild

微信公众号: TechU
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AS配置NDK开发环境,附CMake、NDK-build构建工具用法 的相关文章

  • RecyclerView 中的单选

    我知道没有默认的选择方法RecyclerView类 但我尝试过以下方式 public void onBindViewHolder ViewHolder holder final int position holder mTextView s
  • 不带 Firebase 的集成 AdMob:不需要的权限 (C2D)

    我正在使用 Firebase 将旧游戏从 AdMob 移植到最新的 AdMob 我使用的是已弃用的 AdMob 版本 我想要尽可能最小的集成 我不需要 Firebase 分析 我有一个工作集成 使用 Android Studio 项目 但是
  • 如何设置带有选项卡的多个滑动视图的默认选项卡?

    我真的被困住了 我在主要活动中使用选项卡进行了四个滑动视图 但我想要的是当用户打开应用程序时 它会自动显示第二个选项卡而不是第一个选项卡 这是我的 MainActivity java public class MainActivity ex
  • 发送同一条短信两次

    我正在尝试制作一个短信Android应用程序 但我收到了一个我以前从未见过的错误 即使在谷歌中我也没有找到类似的东西 所以 如果你能帮助我 我会很高兴 由于某种原因 程序同时发送两条消息 同一条短信 但这只是发生在生产中 当我使用模拟器时
  • 从 Android 联系人中检索名字和姓氏结果为“1”和“null”

    我使用下面的代码从 android 联系人中检索名字和姓氏 DISPLAY NAME 返回联系人的姓名 而名字和姓氏分别返回 1 和 null 以下是代码 ContentResolver cr getContentResolver Curs
  • 在可扩展列表中突出显示所选项目

    我有一个布局 其中左侧的片段中有一个可扩展列表 右侧有一个详细信息片段 这一切都很好 现在我想指出左侧的哪个项目的详细信息显示在右侧 而我在这里遇到了问题 在普通列表视图中 我通过将列表视图的选择模式设置为单一 然后使用基于 激活 状态的状
  • Cordova/Phonegap:在后台线程中运行 FileTransfer 插件

    我看到一个老问题没有解决 在后台线程中运行 PhoneGap FileTransfer https stackoverflow com questions 20355810 run phonegap filetransfer in back
  • Android NSD 未发现所有服务

    我正在尝试使用 Android 本机服务发现来运行应用程序 但有时当我运行该应用程序时 它不会发现我的网络中的所有服务 我正在运行代码https github com joeluchoa nsd https github com joelu
  • MediaProjection 生成扭曲的屏幕截图

    我设法获得了屏幕截图 但结果是这样的 原来的 这是我从几个来源获取的代码 final ImageReader ir ImageReader newInstance width height PixelFormat RGBA 8888 2 V
  • 从 shell 和 sbt 在 android sdk 中运行 aapt 的程序

    我有一个奇怪的问题 我无法从 sbt 命令以及 shell 运行 aapt 我运行这个命令 sbt 更新包调试 一切都在嗡嗡作响 直到我收到此错误 java io IOException Cannot run program home eg
  • 在 LibGDX 中保存和检索图像文件

    如何在 LibGDX 中保存和检索图像文件 我想将图像文件保存在 AndroidApplication 类的本地存储中 并在我的 Core 项目中检索它 Libgdx 中的文件处理在libGDX 维基 https github com li
  • 如何创建自定义主题并在 Android 应用程序中使用它?

    如何创建自定义主题并在代码中使用它 菜单中如何实现主题选项并申请活动 有一个不错的风格和主题指南 http developer android com guide topics ui themes html在 Android 开发者网站上
  • Android:保存新图像后刷新图库

    因此 在我的应用程序中 我有时将一堆图像保存到临时文件夹中 我希望它们立即显示在图库中 重新启动后 他们会这样做 但否则他们不会 我尝试过使用 sendBroadcast 方法 sendBroadcast new Intent Intent
  • 如何消除使用 DrawerLayout 打开 Activity 时的延迟?

    我有一个带有 DrawerLayout 的活动 但每当它打开时 都会有一个延迟 就像屏幕变白然后绘制我的屏幕一样 这发生在转换完成后 所以看起来屏幕动画过渡有点跳跃 在将视图与 ButterKnife 绑定后 我尝试将其放在 OnCreat
  • Android 表单验证 UI 库

    有iOSUS2表单验证器 https github com ustwo US2FormValidator用于用户输入验证的库 见下图 我认为该库比默认情况下在某些内容未验证时弹出警报更好 我正在寻找如何在 Android 上做这样的事情 有
  • 在基于 Android Gradle 的项目中设置集成测试

    我正在跟进this http www petrikainulainen net programming gradle getting started with gradle integration testing 将集成测试环境添加到我的
  • 使用loopj AsyncHttpClient获取SocketTimeoutExceptions...是否可以设置超时值?

    使用loopj时异步Http客户端 http loopj com android async http 库 我在发出请求时不断收到 java net SocketTimeoutException 见下文 我可以设置一些超时值吗 Note 我
  • 如何根据视图最大尺寸自动调整多行 TextView 上的文本大小?

    我一直在寻找一种在文本视图中自动调整文本的方法 通过我的搜索 我找到了很多解决方案 例如 字体适合文本视图 https stackoverflow com questions 2617266 how to adjust text font
  • 资源目录不可用

    Eclipse 在问题选项卡中显示资源目录不可用 尽管它在项目文件夹树中可用 2012 09 11 12 14 43 QR01 ERROR resource directory D workspaceQR QR01 res does not
  • 如何解决webview内容重叠的问题[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 嗨 当背景设置为透明时 如何解决we

随机推荐

  • 最先进的深度学习:Mask R-CNN简介

    介绍 Introduction From my experience as a time traveller I can confidently say that autonomous driving is was will be all
  • android dm-verity 功能

    Android dm verity 实现原理深入研究 思维导图 dm verity 说明 源码基于 SC20 平台 Android5 1 Android dm verify overview 目录 Android dm verify ove
  • 协方差矩阵的实例与意义

    协方差矩阵的实例与意义 在机器学习中经常需要计算协方差矩阵 本科时没学过这个概念 一直对此非常头疼 现在试图通过实例的计算 图形化的表示来梳理一下什么是协方差矩阵 A numerical example 问题 有一组数据 如下 分别为二维向
  • Visual Studio 2022配置PCL1.12.1版本点云库

    说明 这个配置步骤是当时自己参考2019配置的 当时网上还没有VS2022的配置步骤 我在自己电脑上是配置成功了 所以我将配置过程记录了下来 仅供参考 1 软件下载 Microsoft Visual Studio 2022 Pro http
  • Kali 实现ARP断网攻击_arp断网攻击_arp欺骗

    1 安装软件包 在中端中执行 apt install dsniff ssldump 2 搜索局域网内的ip地址 nmap sn 192 168 0 这里的192 168 0 有的是192 168 1 执行结果 Nmap scan repor
  • SQLite外键(Foreign Key) 的使用例子

    从SQLite 3 6 19 开始支持 外键约束 sqlite gt PRAGMA foreign keys 0 sqlite gt PRAGMA foreign keys ON sqlite gt PRAGMA foreign keys
  • 机器学习:k近邻算法(KNN)介绍

    k近邻算法是一种最简单最经典的机器学习算法之一 该算法的原理为 当对测试样本进行分类时 首先通过扫描训练样本集 找到与该测试样本最相似的k个训练样本 根据这个样本的类别进行投票确定测试样本的类别 也可以通过个样本与测试样本的相似程度进行加权
  • 并发编程(二)——内存模型

    前言 欢迎大家一起来学习多线程 大家一起来学习吧 并发编程 一 多线程快速入门 并发编程 二 内存模型 并发编程 三 多线程之间如何实现通讯 并发编程 四 JUC并发包常用方法介绍 并发编程 五 线程池及原理剖析 并发编程 六 java中锁
  • linux给用户添加sudo权限

    切换到拥有sudo权限的用户下 输入命令 sudo vim etc sudoers 开始编辑 etc sudoers文件 找到 root ALL ALL ALL ALL 这一 行 在它下面添加 xxx ALL ALL ALL ALL 这里的
  • 数组对象在ts中的用法

    数组对象在TS中的用法 length长度 let songs string red blue pink console log songs length push push 方法将一个或多个元素添加到数组的末尾 并返回该数组的新长 3 fo
  • Unity3D 性能优化

    优化思路 个人优化原则 三原则 注意细节 注意细节 注意细节 优化手段 1 善于使用工具 2 减少总量 3 空间 时间互换 4 由浅入深 1 善于使用工具 一定要善于使用工具来分析性能问题 Profiler 先找出性能瓶颈再做优化 2 减少
  • 菜鸟教程《Python 3 教程》笔记(19):错误与异常

    菜鸟教程 Python 3 教程 笔记 19 19 错误和异常 19 1 assert 断言 19 2 异常处理 19 2 1 try except 19 2 2 try except else 19 2 3 try finally 语句
  • JAVA获取类的类对象的三种方式

    自定义一个类 MyClass 并声明该类的对象 class MyClass MyClass mClass1 new MyClass 1 2 3 在上面说过 Class 类的构造方法是私有的 只有 java 虚拟机可以调用该方法创建该类的对象
  • Linux下Qt 5.15.2源码下载及编译

    一 下载 Qt的官方下载地址 Qt Downloads Qt 5 15 2源码下载路径 archive qt 5 15 5 15 2 single qt everywhere src 5 15 2 zip 二 编译源码 Qt官网提供了编译前
  • Verilog的基础知识

    Verilog的基本介绍 硬件描述语言发展至今已有二十多年历史 当今业界的标准中 IEEE标准 主要有VHDL和Verilog HDL 这两种硬件描述语言 一个设计往往从系统级设计开始 把系统划分成几个大的基本的功能模块 每个功能模块再按一
  • centos6.5linux安装docker之升级内核

    1 没有ssl 安装之 yum y install curl nss openssl 2 升级内核 参考博文https blog csdn net lvshuocool article details 79540617 1 gt 导入pub
  • DTD && Schema

    XML约束简介 XML文档都是自定义标签 所以编写起来比较随意自由 所以我们要给XML文档创建一个规则 我们需要在遵守相应的规则的前提下来编写XML文档 XML约束共有两种形式 DTD Schema DTD 文档类型定义 DTD可以定义文档
  • 【万字总结篇】C++STL常用算法详解(错等年系列)

    写在前面 本小菜鸟是一名热爱编程的大二在校生 目前主要精力放在学习C 数据结构和算法上 目前C 这个专栏的博客我已经总结完了C 常用的容器 内置函数对象 仿函数 还有此篇常用的内置算法 都是一些C STL的内容 因为这部分内容不难 并且需要
  • git fetch & git pull 总结

    一 git fetch git pull 图解 最开始 github 上存放着我们的远程仓库代码 然后在本地通过 git clone 命令 将远程仓库拉取到本地仓库 此时 本地仓库的 origin master 的内容 是远程仓库 mast
  • AS配置NDK开发环境,附CMake、NDK-build构建工具用法

    注意 Android Studio需要是1 3及以上版本 且版本号小于2 2 见文末说明 步骤1 新建一个项目 打开Project Structure 设置Android NDK Location目录 如果没有提前下载NDK包 可打开SDK