赞
踩
代码下载:Android JNI程序下载
编程环境:
Android Studio 3.4
compileSdkVersion 28
minSdkVersion 22
targetSdkVersion 28
目录
3.4 修改Android.mk,添加需要编译的C文件,编译
3.5 MainActivity.java中调用JNI类中的checkUser()方法
Android Studio 中SDK Manager下载NDK、LLDB、CMake
1、在与MainActivity.java同级目录下创建JNITest.java
2、编写JNITest.java
3、
MainActivity.java中调用get()方法
4、编写
activity_main.xml
生成库文件、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
(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.1 界面中增加一个按钮,用于开启线程
【注】子线程用于控制UI界面的更新
4.2 Handler机制更新UI
主线程中handleMessage
4.3 子线程中
根据C程序中返回的值,通过sendMessage方法,传递给UI更新的内容
4.4 运行结果
运行前:
运行后:
5.1 调用顺序
5.2 新建一个Java方法(用于调用C程序)
5.3 在前文JNI类中编写(被C调用的)Java方法
5.4 C程序中testsum.c中调用Java方法
5.5 运行结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。