AndroidStudio 开发NDK/JNI教程(完整版)——
今天讲一讲关于JNI/NDK开发的第一步,环境搭建和“hello”。
写这篇文章的原因,主要是因为网上的文章真心大家互相抄,而且还没有一份是完整和正确的,所以才写这篇文章,这篇文章绝对是经得起验证的。
首先,本人用的是windows的电脑,目前是windows10的系统,我用的是androidstudio 3.0+的编译器,我用的java的jdk是1.8的(java10以下都可以参考本篇文章)
本文章是针对有一定开发经验或者java基础,android基础的同学(如果,这些都没有,就真的不要搞jni了)
1.检查JDK环境(配置环境)
第一步:检查jdk配置是否完成(如图,自己缺少什么就补什么)
![](https://img.haomeiwen.com/i5315387/307ef2a819308340.png)
![](https://img.haomeiwen.com/i5315387/8fc8c39b787bd8dd.png)
第二步,如图,检查是否配置成功了,如果如图一样,就是ok了。
![](https://img.haomeiwen.com/i5315387/e65f223339bec565.png)
2.androidstudio安装(检查)NDK相关
如图,检查一下,是否都有,如果没有就勾选下载即可(唯一可能的问题是,可能需要科学上网)
![](https://img.haomeiwen.com/i5315387/2518aedac92869ca.png)
![](https://img.haomeiwen.com/i5315387/2667c3c27ee3fd98.png)
![](https://img.haomeiwen.com/i5315387/0f6b977989f66e6d.png)
![](https://img.haomeiwen.com/i5315387/bd3c9dc06274f603.png)
ok,如上,基础环境配置就完成了。下面,我们开始准备和jni,sayhello了。
3.开始jni开发
第一步:创建jni(android项目创建就不用教了吧)
![](https://img.haomeiwen.com/i5315387/511bff2f3c5f831f.png)
第二步:创建cpp文件(c/c++)
![](https://img.haomeiwen.com/i5315387/d31c9b07f1029a31.png)
![](https://img.haomeiwen.com/i5315387/0ed70dfb734b6be4.png)
第三步:创建,配置,cmake文件:
# CMake的编译脚本配置文件
# 1. 标注需要支持的CMake最小版本
cmake_minimum_required(VERSION 3.4.1)
# 2. add_library 定义需要编译的代码库 名称, 类型, 包含的源码
add_library(
# Sets the name of the library.
JNIControl
# Sets the library as a shared library.
SHARED
src/main/jni/JNIControl.cpp
)
# 3. find_library 定义当前代码库需要依赖的系统或者第三方库文件(可以写多个)
find_library(
log_lib # 指定要查找的系统库, 给一个名字
log # 真正要查找的liblog.so或者liblog.a
)
# 4. target_link_libraries设置最终编译的目标代码库
target_link_libraries(
JNIControl # add_library 生成的
${log_lib} # find_library 找到的系统库
)
![](https://img.haomeiwen.com/i5315387/dc62cf827ea215a1.png)
![](https://img.haomeiwen.com/i5315387/8baaff8399b8cb2d.png)
第四步:编写java代码(jni就是java和c互调)
![](https://img.haomeiwen.com/i5315387/dc75b377c436671b.png)
第五步:重头戏来了,很多人都会卡在这里,生成头文件(.h)生成系统文件(我们平时见到过的.so文件),不过这里是打开的,可以看到的。
有些同学这里会报gbk编码错,这个不一定。
com.justcode.hxl.androidstudydemo.ndkdemo.JNIUtil 这里这个,其实是java文件的全路径。
这一步成功之后,就会看到那个.h文件了。
![](https://img.haomeiwen.com/i5315387/96f6a2f1537ea33b.png)
第六步:编写C代码
这个基本是固定模式,黄色的都是固定,没什么说的。
jstring,其实就是java中的string,只是在jni中,通常都要加一个j打头。
灰色那一长串,Java_(完整方法名)
下面的参数,第一个基本是固定的,第二个,你不写会自动提示的。
![](https://img.haomeiwen.com/i5315387/cd6bb3e0971ce81b.png)
第七步:构建一下
![](https://img.haomeiwen.com/i5315387/094a2e6154628e70.png)
上述都执行完了,应该就和我上面这个一样了。
最后还是要测试一下撒:
在acticity中:
![](https://img.haomeiwen.com/i5315387/df01631b1e6abba6.png)
![](https://img.haomeiwen.com/i5315387/31b090bc062fd5be.png)
ok,jni的环境搭建和第一个例子,就这样ok了。
虽然不难,但是,第一次写难免会有不少问题的。我只是引了一个路。
最后还是来个git地址:https://github.com/LuckyCode1992/android_study_demo
其中一个小例子就是上述的教程