Android Studio NDK的配置

环境的配置以及HelloWorld例程

  1. 新建Project,此处工程是最简单的一个MainActivity和一个layout文件,在工程里声明native方法。public static native String Hello();
  2. 编译h头文件
  3. View->Tool Windows->Terminal,进入工程目录。 cd app/src/main/java
    2. 编译头文件javah -classpath D:/Android-ProjectsSetUp/MyNDK/app/src/main/java -d jni 包名.MainActivty -classpath:类所在目录 -d:输出目录 jni+包名+类名
  4. 编写C文件
  5. 新建JNI文件夹
  6. 实现头文件里的函数
- **将刚才的头文件复制到这个新的jni文件夹中**
- 新建一个C源文件,实现代码(注:当时运行程序出了问题,不知道是我Rebulid还是真的是嫁了一个空的C源文件解决的问题。因为网上说要加一个在Jni文件夹中加一个空的源文件才能通过编译,如果你也出现了问题,加一个试试看能不能解决)
1
2
3
4
#include "com_example_helen_ndkproject_MainActivity.h"
jstring Java_com_example_helen_ndkproject_MainActivity_sayHello(JNIEnv *env, jobject thiz){
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
  1. 配置一些信息
  • 在local.properties文件中设置ndk路径
  • 在bulid.gradle的android节点下加入ndk{ moduleName "MyJni"//这是module的名字 }
  • 在gradle.properties下面增加一句话:android.useDeprecatedNdk=true
  • 在MainActivty里说明调用这个NDKstatic { System.loadLibrary("MyJni");}
  1. 然后就可以运行MainActivty了
  • 另外篇:
    • 分平台配置编译(可选)
      • 这一步不是必须的,你可以根据需要,对各个平台进行不同的编译配置,可以设置覆盖前面的编译选项(例如cFlags)。例如你只想编译指定平台的.so,而不是所有的平台。如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
android {  // .. android settings ..
productFlavors {
x86 {
ndk {
abiFilter "x86"
}
}
arm {
ndk {
abiFilter "armeabi-v7a"
}
}
mips {
ndk {
abiFilter "mips"
}
}
}
} // android
  • 其他篇:
    • 默认情况下,你需要把C/C++源代码放在[module]/src/main/jni/路径下,
    • 当然,你也可以自定义源代码路径:
1
2
3
4
5
android {  // .. android settings ..
sourceSets.main {
jni.srcDirs 'src/main/source'
}
}