在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
不废话太多,Java与C之间联系的JNI的概念,这个要了解可以参考下面这个博客: https://www.jianshu.com/p/87ce6f565d37
此博客只说明如何将.C文件通过NDK打包成so库并且使用的一个简单demo.
第一步 创建用于引用本地os库的Java工具类目录工具类代码package zq.ndkdemo; public class NDKTools { static { System.loadLibrary("ndkdemomk-jni");//这里的"ndkdemomk-jni"是下面.mk文件里局部模块的值,这个到后面我会解释 } public static native String getNDKcontent();//您在Java里调用so库的静态方法 }
第二步 将Java工具类打包成.h文件打开Android studio的Terminal准备用javah打包.h文件, cd进入到app/src/目录下 然后输入 javah -o ndkdemoHFile.h -jni -classpath ./main/java/ zq.ndkdemo.NDKTools 命令.(下面会解释这条命令)解释一下这行命令javah -o ndkdemoHFile.h -jni -classpath ./main/java/ zq.ndkdemo.NDKTools
javah -o 你要打包的.h文件名加后缀 -jni -classpath 中间的路径 app包名+工具类名
输入这条命令后,如果没报错,你就会在src目录下获得您的.h文件,如下图:打开.h可以看到: /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class zq_ndkdemo_NDKTools */ #ifndef _Included_zq_ndkdemo_NDKTools #define _Included_zq_ndkdemo_NDKTools #ifdef __cplusplus extern "C" { #endif /* * Class: zq_ndkdemo_NDKTools * Method: getNDKcontent * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_zq_ndkdemo_NDKTools_getNDKcontent (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
第三步 创建jni文件夹并且将.h文件移入在main目录下创建一个jni文件夹
将我们打包好的.h文件移动到jni文件夹里第四步 创建c语言函数文件进入到jni文件夹里,点击创建任意名称加.c后缀的文件 打开写入代码如下: #include "ndkdemoHFile.h" JNIEXPORT jstring JNICALL Java_zq_ndkdemo_NDKTools_getNDKcontent (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"Hellow World,这是NDK的第一行代码"); } 注意!代码里最好别写注释特别是中文注释. #include "ndkdemoHFile.h"这行代码引用的就是.h文件名称 JNIEXPORT jstring JNICALL Java_zq_ndkdemo_NDKTools_getNDKcontent这行代码中 jstring 为返回值 Java_zq_ndkdemo_NDKTools_getNDKcontent 为 Java + 路径 + 类名 + 方法名称
第五步 创建.mk文件在jni目录下创建一个叫Android.mk的文件内容如下:LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ndkdemomk-jni LOCAL_SRC_FILES := ndkdemoCFile.c include $(BUILD_SHARED_LIBRARY)
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论