环境的配置以及HelloWorld例程
- 新建Project,此处工程是最简单的一个MainActivity和一个layout文件,在工程里声明native方法。
public static native String Hello();
- 编译h头文件
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+包名+类名
- 编写C文件
- 新建JNI文件夹
- 实现头文件里的函数
- **将刚才的头文件复制到这个新的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 !"); }
|
- 配置一些信息
- 在local.properties文件中设置ndk路径
- 在bulid.gradle的android节点下加入
ndk{ moduleName "MyJni"//这是module的名字 }
- 在gradle.properties下面增加一句话:
android.useDeprecatedNdk=true
- 在MainActivty里说明调用这个NDK
static { System.loadLibrary("MyJni");}
- 然后就可以运行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 { sourceSets.main { jni.srcDirs 'src/main/source' } }
|