一、下载 ndk
1、ndk 下载地址 http://tools.android-studio.org/
2、根据自己的需要选择版本,我选择了 android-ndk64-r10-windows-x86_64.zip
3、这个软件不需要安装,直接解压就可以使用。我把它解压在E:\Android\ndk下,这个在第二步设置环境变量时用得上。
二、设置环境变量
在例程中需要用到两个命令 javah 和 ndk-build
1、打开电脑的 "高级系统设置"->“高级”->"环境变量"
2、在"系统变量"选项下添加如下变量:
1)、变量名:classpath 变量值: C:\Program Files\Java\jdk1.8.0_65\lib (变量值根据自己的实际安装路径填写)
2)、变量名:JAVA_HOME 变量值: C:\Program Files\Java\jdk1.8.0_65 (变量值根据自己的实际安装路径填写)
3)、变量名:PATH 变量值: C:\Program Files\Java\jdk1.8.0_65\bin;E:\Android\ndk (变量值根据自己的实际安装路径填写)
三、建立实例工程
1、打开Android Studio -> 选择 Start a new Android Studio project -> 随便填写一个工程名字 -> Next -> Next -> 选择 " Empty Activity" -> Next -> Finish
2、打开在res\layout\目录下的activity_main.xml文件,添加一个TextView控件,用来显示JNI 库函数返回的字符串,代码如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="Hello World!" /> </RelativeLayout>
3、打开MainActivit.java,添加 下面的代码,如下:
public class MainActivity extends AppCompatActivity {/* 需要添加的代码 */ static { System.loadLibrary("my_jni"); /*这个JNI 库的名称 */ } public native String jni_demo_api();/*****************************/@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);/* 需要添加的代码 */ TextView mTextView = (TextView) findViewById(R.id.textview); mTextView.setText(jni_demo_api());
/*****************************/ } }
4、在Android Studio软件界面的最底面 有一排 “TODO Android Monitor Terminal Messages”
1)、点击那个 "Terminal"
2)、依次输入下列命令:
(1).cd app\src\main
(2).javah -d jni -classpath E:\Android\sdk\platforms\android-23\android.jar;java\ com.example.felixmo.jnidemo.MainActivity
其中 E:\Android\sdk\platforms\android-23\android.jar这个路径是sdk的路径
"java\" 这个是类的相对路径
"com.example.felixmo.jnidemo.MainActivity" 这个是调用JNI的类名,根据自己实际情况修改
3)、如果都执行成功,会看到app目录下多了一个jni文件夹,里面有一个头文件 com_example_felixmo_jnidemo_MainActivity.h
5、在jni目录下添加一个C文件,代码如下:
#include <string.h> #include <com_example_felixmo_jnidemo_MainActivity.h> JNIEXPORT jstring JNICALL Java_com_example_felixmo_jnidemo_MainActivity_jni_1demo_1api (JNIEnv *env, jobject obj) { return (*env)->NewStringUTF(env, "Hello from JNI !"); }6、拷贝 ndk\samples\hello-jni\jni 下面的 Android.mk 和 Application.mk 到自己工程中的jni目录下1)、修改Android.mk文件,如下:include $(CLEAR_VARS)LOCAL_MODULE := my_jni /*这个名字要与上面 那个 System.loadLibrary("my_jin") 一样*/ LOCAL_SRC_FILES := main.c /*这个名字就是刚才新建的C语言文件名*/include $(BUILD_SHARED_LIBRARY)2)、在Application.mk 添加代码如下 : APP_OPIM := debug7、回到Android Studio开发环境的Terminal界面 输入 命令:ndk-build如果成功会看到有生成很多版本的libmy_jni.so库文件。8、在 Gradle Scripts目录下,打开 local.properties 文件添加 ndk.dir=E\:\\Android\\ndk9、在 Gradle Scripts目录下,打开 gradle.properties 文件添加 android.useDeprecatedNdk=true
10、在 Gradle Scripts目录下,打开 build.gradle(Module:app) 文件
添加代码如下 :
defaultConfig { applicationId "com.example.felixmo.jnidemo" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0"
/*这个需要自己添加*/ sourceSets.main { jniLibs.srcDir 'src/main/libs' jni.srcDirs = [] //disable automatic ndk-build call }/********************/ }11、重新编译工程,如果没有做错,那么就一定成功。12、点击 "Run" 就可以在手机上看到效果。