Android Studio版本 :1.3.2
NDK版本:android-ndk-r10b
1.下载NDK,选用android-ndk-r10b版本
2. 配置环境变量(像当初配java一样配置)
计算机-右键-属性-高级系统设置-环境变量-系统变量-Path一项—双击
将下载的NDK R10d版本的路径添加到变量值后面(记得加分号,路径名不要有空格)
;D:\code\android-ndk-r10d
3.cmd-输入 ndk-build,显示:
在cmd中输入ndk-build,显示以上内容,说明ndk-build命令可以查找到,但是原则伤讲ndk应该是在一个Android项目中的,所以抛出这样的异常,但是这说明环境已经配好了。
4.打开Android Studio,像正常新建项目一样新建一个Android 项目
5.在MainActivity里写上:
public native String getStringFromNative();
即在该类里面定义一个native方法。
附MainActivity.java里的全部代码:
package com.example.pc.ndktest6;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
public native String getStringFromNative();
private TextView tv=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv= (TextView) findViewById(R.id.tv);
tv.setText(" "+getStringFromNative());
}
static {
System.loadLibrary("MyJni");
}
}
为什么要把名字命名为ndktest6呢?
因为我做到第6个测试demo的时候才运行成功,不要问我之前经历了什么
6.Build-Make Project 一下。
7.休息一下
8.在Terminal下输入命令行 cd app/src/main
回车,进入到app/src/main
9.在app/src/main下输入命令行:
javah -d jni -classpath C:/Users/pc/AppData/Local/Android/sdk/platforms/android-23/android.jar;../../b
uild/intermediates/classes/debug com.example.pc.ndktest6.MainActivity
C:/Users/pc/AppData/Local/Android/sdk/platforms/android-23/android.jar;
为Android SDK位置
如果报错无法找到文件MainActivity或者android.app.Activity就多Build-Make Project 几次或者 Clean Project一下
10.
此时,app文件夹下会自动生成一个jni文件夹,文件夹下会包含一个名为
com_example_pc_ndktest6_MainActivity.h
的文件。
文件都建好之后的样子:
11.在jni文件夹下新建两个C文件。
上图是我建完C文件后的样子。
为什么要建两个?
因为有一个是我们测试要用的,但是据说如果只建一个的话会报奇怪的错误,这个错误我也遇到了,解决方法就是再新建一个C文件。
上图中main.c就是要用的,nothing.c就是为了防止报错辅助用的。
12.在main.c里面填上一些测试代码:
#include "main.h"
#include "com_example_pc_ndktest6_MainActivity.h"
/*
* Class: com_example_pc_ndktest6_MainActivity
* Method: getStringFromNative
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_pc_ndktest6_MainActivity_getStringFromNative
(JNIEnv * env, jobject obj){
return (*env)->NewStringUTF(env,"***I come from main.c***");
}
13.在gradle.properties的最后面添上一句:
android.useDeprecatedNdk=true
表示允许使用NDK
14.在local.properties的最后面加上:
sdk.dir=C\:\\Users\\pc\\AppData\\Local\\Android\\sdk
ndk.dir=D\:\\code\\android-ndk-r10b
sdk.dir那句应该是本来就有的,就加上后面ndk的就行了
15.在app的build.gradle文件下的defaultConfig中加上:
ndk{
moduleName "MyJni" //设置库(so)文件名称
}
16.
在activity中增加对so的加载:
- static {
- System.loadLibrary("MyJni");
- }
上面贴出来的MainActivity代码是加完这句之后的完整代码
17.完成