当前位置:   article > 正文

【Android】Android的JNI基础编程_android jni 编写方法

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 

添加:

  1. LOCAL_PATH := $(call my-dir) 
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE := JNITest
  4. LOCAL_SRC_FILES := test.c
  5. include $(BUILD_SHARED_LIBRARY)

5、jni目录下创建Application.mk

添加:

  1. APP_MODULES :=JNITest
  2. APP_ABI := all

6、修改build.graddle

主要记录库文件中的位置

 

  1. ndk{
  2.     moduleName "JNITest"
  3. }
  4. sourceSets.main{
  5.     jni.srcDirs = []
  6.     res.srcDirs = ['src/main/res']
  7.     assets.srcDirs = ['src/main/assets']
  8.     manifest.srcFile 'src/main/AndroidManifest.xml'
  9.     jniLibs.srcDirs = ['src/main/libs']
  10.     jniLibs.srcDir "src/main/libs"
  11. }

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/133172
推荐阅读
相关标签
  

闽ICP备14008679号