一、NDK下载
ndk的下载就不说了~网上资源比较多
二、环境配置(Android Studio)
下载完成后就是简单的项目环境配置
添加NDK路径
在工程的local.properties文件中添加NDK路径(上面下载好的那个NDK),类似其中的SDK路径一样
- 在app目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下内容:
三、代码编写
1.新建测试类JniTest.
2.然后build project得到其中中间文件,我们关注的是.class文件。编译OK以后生成的class文件在AS工程的如下目录: .\app\build\intermediates\classes\debug。找到对应包名下的文件
3.然后接下来的步骤就是根据生成的class文件,利用javah 生成对应的 .h头文件。
- 点开AS的Terminal标签,默认进入到该项目的app文件夹下。
- 输入命令(cd app\build\intermediates\classes\debug)跳转到class中间文件生成路径
然后执行javah命令生成h文件:javah -jni com.*.ffmpegtest.JniUtil.JniTest(对应包名路径) 。
执行完之后你可以在文件夹.\app\build\intermediates\classes\debug下看见生成的 .h头文件为:
4. 在工程的main目录下新建一个名字为jni的目录,然后将上一步生成的 .h文件剪切过来。 在jni目录下新建一个c文件,随意取名,我的叫JniTest.c 。然后编辑代码如下:
5.接下来就可以在MainActivity中调用我们的native方法了,代码如下:
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary ("JniTest" ); // 我们的.so库为libJniTest.so,这里省略前面的lib
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
TextView textView = (TextView) findViewById(R.id. text);
textView.setText( new JniTest().getText());
}
}
6.以上所有步骤的完成后即可直接运行。
(注:以上步骤完成后但仍可能出现NDK的bug而导致编译失败,在jni的目录下再添加一个空的.c文件即可解决)