Android的JNI基础编程
代码下载:Android JNI程序下载
编程环境:
Android Studio 3.4
compileSdkVersion 28
minSdkVersion 22
targetSdkVersion 28
目录
3.4 修改Android.mk,添加需要编译的C文件,编译
3.5 MainActivity.java中调用JNI类中的checkUser()方法
1. 环境配置
Android Studio 中SDK Manager下载NDK、LLDB、CMake
2. 简单的JNI程序
2.1 创建工程项目
2.1 新建Java项目(用于调用C程序)
1、在与MainActivity.java同级目录下创建JNITest.java
2、编写JNITest.java
3、
MainActivity.java中调用get()方法
4、编写
activity_main.xml
2.3 配置JNI调用(生成库文件、C程序)
生成库文件、C程序)
1、Build->Make Project生成JNITest.class文件
(目录形式切换为Project查看.class文件,不同版本的AS位置可能不同)
2、\app\src\main目录下创建jni目录
3、生成头文件(.h)
(1)在D:\Android_NDK\app\src\main\java目录下生成com.example.android_ndk.JNITest.h头文件
(2)Terminal中执行如下指令,生成头文件
(3)复制com.example.android_ndk.JNITest.h头文件复制到jni目录下
(4)com.example.android_ndk.JNITest.h可能出现问题
#include<jni.h>报错
解决方式,给出jni.h的完整目录,例如:
(5)jni目录新建C程序(Name为test,Type为.c)
注意1:与com.example.android_ndk.JNITest.h中保持一致
4、jni目录下创建Android.mk
添加:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JNITest
LOCAL_SRC_FILES := test.c
include $(BUILD_SHARED_LIBRARY)
5、jni目录下创建Application.mk
添加:
APP_MODULES :=JNITest
APP_ABI := all
6、修改build.graddle
主要记录库文件中的位置
ndk{
moduleName "JNITest"
}
sourceSets.main{
jni.srcDirs = []
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
manifest.srcFile 'src/main/AndroidManifest.xml'
jniLibs.srcDirs = ['src/main/libs']
jniLibs.srcDir "src/main/libs"
}
7、生成库文件
Terminal中进入jni目录下,输入命令ndk-build
2.4 运行结果
3、JNI程序传递参数调用
(Java调用C,判断传递参数是否相同)
3.1
新建JNI类,添加checkUser()方法
3.2 生成头文件
方法与前文类似
3.3
编写Java调用的C程序
jni目录下,新建checkuser.c(JNI类中checkUser()方法将调用此C程序
3.4 修改Android.mk,添加需要编译的C文件,编译
3.5 MainActivity.java中调用JNI类中的checkUser()方法
3.6 实验结果
3.7 调用步骤
4. JNI更新UI界面
4.1 界面中增加一个按钮,用于开启线程
【注】子线程用于控制UI界面的更新
4.2 Handler机制更新UI
主线程中handleMessage
4.3 子线程中
根据C程序中返回的值,通过sendMessage方法,传递给UI更新的内容
4.4 运行结果
运行前:
运行后:
5. C程序调用Java方法
5.1 调用顺序
5.2 新建一个Java方法(用于调用C程序)
5.3 在前文JNI类中编写(被C调用的)Java方法
5.4 C程序中testsum.c中调用Java方法
5.5 运行结果