NDK的使用
来源:互联网 发布:php获取ip地区 编辑:程序博客网 时间:2024/06/05 16:59
下载地址:http://pan.baidu.com/s/1jIf6Sp4 密码:f5wc
NDK(NativeDevelopment Kit)一个工具集,它允许在Android开发中使用C/C++代码来使用物理设备的一些组件,比如传感器、输入设备等。
下载NDK和工具
1 NDK:打开setting->android sdk ->sdk tools -> ndk点击下载
2 CMake:一个外部的构建工具,与Gradle建立自己的本地库。你不需要这个组件,如果你只打算使用ndk-build。
3 LLDB:用于调试本地代码的调试器。
4 PS:这些工具都可以使用SDK Manager下载。
所用例子的环境如下所示:
名称
版本号
Android Studio
2.1
JDK
1.8.0_65
NDK
12.1.2977051
compileSdkVersion
23
buildToolsVersion
23.0.2
minSdkVersion
23
targetSdkVersion
23
PS:NDK如果在第三方平台下载,解压后需要配置环境变量—新建变量ANDROID_NDK,变量值为NDK解压路径,并把ANDROID_NDK追加到path中。
创建第一个NDK应用
1. 创建一个基本的项目
2. 配置NDK环境
在文件local.properties中配置ndk路径(追加即可)
ndk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\sdk\\ndk-bundle
PS:如果在安装AS时使用默认路径,并且ndk使用AS集成的SDK Manager软件下载,则上面的路径是通用的,否则需要自行配置。
如果你是安卓Studio的话 打开File->Settings->Appearance&Behavior->System Setting->Android SDK->SDK Tools 然后找到NDK选择->Apply
自己创建个项目
3. 创建一个Jni类
在Module app中创建一个普通类JniTest.java,并定义一个使用native修饰的方法getStringFromNative。结果如下图所示:
4. Make(构建)Module app生成字节码(*.class)文件
接下来是构建app项目,构建的方式可以使用Make,也可以使用build,下面以Make为例子。操作步骤很简单,首选选中Module app,接着点击菜单栏的Make Module 'app'即可。图片说明如下:
如果顺利在路径:app\build\intermediates\classes\debug\com\sandwich\jelly\myapplication下会生成字节码文件JniTest.class
PS:构建是为了把项目中所有的源文件(.java)编译成为字节码文件(.class)的过程。所以,实际上可以使用javac命令去生成。
5. 生成头文件(*.h)
• 首先打开工具栏的Terminal工具,使用cd命令定位到Moduel app的main目录,如下图:
• 接着在Terminal工具输入下面命令:
• javah -d jni -classpath ../../build/intermediates/classes/debugcom.qianfeng.ndkdemo.JniTest javah 执行javah命令生成头文件(*.h)
-djni 在当前目录创建一个文件,文件名称是jni -classpathxxx/debug 指定要生成头文件(.h)的字节码文件路径(class) com.sandwich.jelly.myapplication.JniTest 包名(com.sandwich.jelly.myapplication)+字节码名称(JniTest)
顺利情况下,在路径:app/src/main/下会生成一个文件夹jni,文件夹下生成一个文件com_sandwich_jelly_myapplication_JniTest.h,该文件会有一个未实现的方法,方法名称为JNICALL Java_com_sandwich_jelly_myapplication_JniTest_getStringFromNative,该方法对应的就是JniTest.java类对应的getStringFromNative方法。
6. 创建JniTest.c文件
第5步中说到了一个方法JNICALLJava_com_sandwich_jelly_myapplication_JniTest_getStringFromNative,这相当于是java的抽象方法,它只声明但是没有任何实现,一般情况下需要创建一个c或cpp文件去实现相应的方法。
• 首先创建一个文件JniTest.c
• 编辑JniTest.c,导入头文件com_sandwich_jelly_myapplication_JniTest.h
• 实现头文件的抽象方法
PS:当Android开发中调用JniTest类中的getStringFromNative方法时,它对应的实现是在JNICALLJava_com_sandwich_jelly_myapplication_JniTest_getStringFromNative
方法中。所以实现了java代码和C层代码的通信。
7、准备就绪,开始构建.so文件。
方法与第4步的方法相同,使用Make工具。
构建完成后在路径:app\build\intermediates\ndk\debug\lib下会生成符合各个系统的so库。
PS:如果构建出现下面错误:
在gradle.properties文件中追加下面代码即可:
android.useDeprecatedNdk=true
8、使用so库,显示Hello AS!
• 使用so库。在JniTest.java中添加代码static{
• System.loadLibrary("app"); }
添加完代码后,如下图:
PS:System.loadLibrary("app");中的app表示的是库名称,前面的lib不需要填写。
• 编写一个MainActivity.java,并使用JniTest.java中的getStringFromNative方法。如下图:
9、运行Module app
运行成功,差不多这是最基础的NDK使用
- android ndk的使用
- NDK-GDB的使用
- Android NDK的使用
- Android NDK的使用
- ndk-stack的使用
- ndk-stack的使用
- ndk-stack的使用
- ndk-stack的使用
- ndk-stack 的使用
- ndk-stack的使用
- NDK的简单使用
- Android - NDK的使用
- NDk的初使用
- NDK的使用
- NDK的简单使用
- Ubuntu Android NDK的使用
- Ubuntu Android NDK的使用
- NDK的安装和使用
- 基于 OpenWrt 实现 tcpdump 抓包并在 Windows 系统上的 Wireshark 中格式化显示
- JDBC:利用反射封装增删改查操作
- LeetCode刷题记录3-求数字是否为回文
- ZooKeeper
- 使用IDEA搭建SSM框架
- NDK的使用
- 一个Spring Scheduler (Quartz) 动态添加,删除,修改任务的例子
- jupyter中sklearn、opencv无法导入,python中导入正常
- 由深拷贝与浅拷贝引发的引用计数、写时拷贝技术
- hue 大数据的web工具
- NOD1024 (大数据的处理)
- tcp
- 【1701H1】【穆晨】【171115】连续第三十六天总结
- JQuery各种用法参考