Android Studio 编译JNI(with External Tools)

1. 创建一个普通的Android Studio的工程(New Project时不勾选Include C++ support),然后开始配置External Tools。

Preferences -> Toools -> External Tools

Android Studio 编译JNI(with External Tools)_第1张图片

添加我们需要用的三个工具(图里我已经加好了),点击“+”添加。下面是javah、ndk-build、ndk-build clean的配置。

Android Studio 编译JNI(with External Tools)_第2张图片
Android Studio 编译JNI(with External Tools)_第3张图片
Android Studio 编译JNI(with External Tools)_第4张图片

图中的宏可以点击Insert macros插入。

Android Studio 编译JNI(with External Tools)_第5张图片

2. 配置完之后在任意位置点击右键,选择External Tools就可以使用上面三个命令了。

Android Studio 编译JNI(with External Tools)_第6张图片

3. 右键单击你的Module新建jni目录

Android Studio 编译JNI(with External Tools)_第7张图片
Android Studio 编译JNI(with External Tools)_第8张图片

4.修改app下的build.gradle文件, 如下图

Android Studio 编译JNI(with External Tools)_第9张图片

5.修改MyNdk下的gradle.properties文件(如果没有此文件,自己新建一个),如下图

android.useDeprecatedNdk=true

如果不这么做的话印象中小于r12版本的ndk会报错。(使用Preferences-> Appearance & Behavior -> System Settings -> Android SDK 可以更新到最新NDK)

6.新建TestJni.java

Android Studio 编译JNI(with External Tools)_第10张图片

7.运行Build -> Make Project,然后再执行External Tools -> javah,结果如下图:

Android Studio 编译JNI(with External Tools)_第11张图片

这个地方最开始我遇到了这样一个问题:

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/charsets.jar:/Applications/Android

at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:129)

at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:107)

at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:64)

at com.sun.tools.javah.JavahTask.run(JavahTask.java:503)

at com.sun.tools.javah.JavahTask.run(JavahTask.java:329)

at com.sun.tools.javah.Main.main(Main.java:46)

查了一下charsets.jar是GBK编码需要用到的库,到对应目录下找charsets.jar果然没有。然后到自己装的Java目录下找发现是有的,然后修改Android Studio的JDK Location。如下图:

Android Studio 编译JNI(with External Tools)_第12张图片

再次执行External Tools -> javah,成功。

8.会在cpp目录下生成我们想要的头文件com_testjni_TestJni.h,接下来我们需要在cpp目录下创建Android.mk、Application.mk以及native_lib.cpp。

Android Studio 编译JNI(with External Tools)_第13张图片
Android Studio 编译JNI(with External Tools)_第14张图片
Android Studio 编译JNI(with External Tools)_第15张图片

9.右键单击jni目录,执行External Tools -> ndk build

Android Studio 编译JNI(with External Tools)_第16张图片

10.编译成功的so文件就在sec/main/libs目录下。

11.编写MainActivity中的代码,调用Native方法。

Android Studio 编译JNI(with External Tools)_第17张图片

12.编译运行成功。

Android Studio 编译JNI(with External Tools)_第18张图片

你可能感兴趣的:(Android Studio 编译JNI(with External Tools))