本文教学课程文章,仅供参考:
1.环境安装
AndroidStudio默认不支持NDK开发,需要下载依赖工具,打开Tools->Android->SDK Manager->SDK Tools选中LLDB和NDK,点击确认,软件会自动安装NDK。
这里需要一个较长的时间,耐心等待安装完毕,最好重启下AS。
2.安装环境变量
3.直接调用本地方法
首先创建一个应用,并实现Java层的代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//这里定义了一个本地方法 观察方法 没有实现
public native String helloFromC();
/**
* 点击按钮调用C代码返回的数据
*/
public void showTostClick(View v){
Toast.makeText(this, helloFromC(), Toast.LENGTH_SHORT).show();
}
}
然后运行的时候报错,告诉我们没找到helloFromC() 的实现:
4.对helloFromC()的方法实现
写了上面的代码后,你会发现有些类不是很清晰,需要查看源码,但是这里却找不到 jstrig 源码:
接着导包:
#include <jni.h>
为了让工具识别这个规范文件,我们需要再次做配置,找到gradle.properties,配置如下(主要配置第二句):
org.gradle.jvmargs=-Xmx1536m
android.useDeprecatedNdk=true
5.编译c代码
因为一般的C代码是无法在机器中运行的,只有经过编译成为二进制代码才能被系统读取并运行。
首先需要拿到NDK的doc文档,建议点击链接NDK安装包下载,然后解压拿到某一版本的doc文档目录。
因为C语言的编译的过程中我们用了makefile文件的作为自动化编译的脚本,整个JNI的配置需要一个名叫Android.mk的文件,我们可以从上面doc文件夹的红色框查找:
6.对接.so库与java层
让java层去libhello.so库中搜索对应的实现方法:
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("hello");
}
...
}
libhello.so的总目录在哪里呢?需要在app的build.gradle中配置: