【Android】Android的JNI基础编程

Android的JNI基础编程

代码下载:Android JNI程序下载

编程环境:

Android Studio 3.4

compileSdkVersion 28

minSdkVersion 22

targetSdkVersion 28

目录

Android的JNI基础编程

1. 环境配置

2. 简单的JNI程序

2.1 创建工程项目

2.1 新建Java项目(用于调用C程序)

2.3 配置JNI调用(生成库文件、C程序)  

2.4 运行结果

3、JNI程序传递参数调用 

3.1 新建JNI类,添加checkUser()方法

3.2 生成头文件

 3.3 编写Java调用的C程序

3.4 修改Android.mk,添加需要编译的C文件,编译 

3.5 MainActivity.java中调用JNI类中的checkUser()方法 

3.6  实验结果 

3.7 调用步骤 

4. JNI更新UI界面

4.1 界面中增加一个按钮,用于开启线程 

4.2 Handler机制更新UI 

4.3 子线程中 

4.4 运行结果 

5. C程序调用Java方法

5.1 调用顺序 

5.2 新建一个Java方法(用于调用C程序) 

5.3 在前文JNI类中编写(被C调用的)Java方法 

5.4 C程序中testsum.c中调用Java方法 

5.5 运行结果 


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程序)  

 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 运行结果 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值