1.首先进入preferences,确认android ndk是否已经安装,没有的勾选,apply即可安装。
2.新建一个测试项目,然后在App 的build gradle中的default config中添加 ndk{moduleName "test"}。如下
android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "cn.eqiyue.ndk2" minSdkVersion 16 targetSdkVersion 23 versionCode 1 versionName "1.0" ndk{ moduleName "test" } } }
3.在gradle.properties中增加
android.useDeprecatedNdk=ture
4.然后gradle重新编译。
5.增加一个ndk的工具类,申明一个native方法。
/** * Created by kemp on 5/3/16. */ public class NDKUtils { public static native boolean doSomeThing(); }
6.此时声明的方法,显示为红色,用代码提示功能生成c文件(alt+回车),此时在main下,此时可以看到生成了jni文件夹,并且生成了ndkutils.c方法声明好了,但是没有实现,
7.然后make一下,让我们申明的工具类生成class文件,在build/intermediate/classes/debug/...目录下即可看到相应的class。
8.点击一下android studio下面的terminal,切换目录,cd app/src/main 切换到main目录下,然后编译class文件,javah -d jni -classpath ../../build/intermediates/classes/debug/ cn.eqiyue.ndk2.NDKUtils 目录对应自己的,然后可以看到在jni文件夹下生成了头文件。
9.将头文件include进来
#include <jni.h> #include "cn_eqiyue_ndk2_NDKUtils.h" JNIEXPORT jboolean JNICALL Java_cn_eqiyue_ndk2_NDKUtils_doSomeThing(JNIEnv *env, jclass type) { // TODO return 1; }
10.然后在activity中使用。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.loadLibrary("test"); TextView tv = new TextView(this); tv.setText(NDKUtils.doSomeThing()+""); setContentView(tv); } }11.可以看到打印为ture。