A sample for Android JNI
功能介绍:新建文本框和按钮,同时调用so库JNITest,调用so库里面的函数是helloJNI,同时为按钮建立一个点击监听器,点击按钮,则调用helloJNI()函数,并显示返回的字符串。
至此,前期准备工作都已完成。
需要先生成MainActivity.java的.class文件。
点击菜单栏build->Make Project编译整个工程。编译完成后,在路径app/build/intermediates/classes/debug/com/android/jni/下应该会出现MainActivity。
生成jni目录。
进入main目录并新建文件夹jni
cd app/src/main/
mkdir jni
生成.h文件
首先进入debug目录
cd /home/baina/AndroidStudioProjects/AndroidJNI/app/build/intermediates/classes/debug
运行以下命令:
javah -d /home/baina/AndroidStudioProjects/AndroidJNI/app/src/main/jni -cp /home/baina/SDK/android-sdk-linux/platforms/android-24/android.jar: com.android.jni.MainActivity
就会在jni目录下生成com_android_jni_MainActivity.h文件。
里面有函数声明Java_com_android_jni_MainActivity_helloJNI
实现函数
生成.h文件后我们就可以编写相应的C/C++实现代码
在jni目录下新建main.cpp,并在里面实现Java_com_android_jni_MainActivity_helloJNI函数。
生成.so库
1、在目录jni中新建Android.mk。
2、新建Application.mk。
3、进入jni目录,运行命令ndk-build,运行成功,同时生成so库libJNITest.so,位于目录libs/armeabi-v7a中。
使用.so库
打开app/build.gradle文件,在android{}内加入:
sourceSets {
main() {
jniLibs.srcDirs = ['src/main/libs']
jni.srcDirs = []
}
}
就会生成jniLibs目录。
同时,在gradle.properties文件中加入语句:
android.useDeprecatedNdk=true
然后把第六步生成的.so库复制进jniLibs即可使用。
编译运行。