android jni调用so库

释放双眼,带上耳机,听听看~!

今天,讲讲android studio 使用jni调用其他so库的使用。

首先说一下在网上查找资料时,对于调用第三方so库,有人说有两种方法:

1.    对于so库的API符合JNI格式(即使用javah指令生成的头文件中那种格式),可以在Java代码中声明它对应的native方法,直接调
用。

    比如,jni方法名为: jstringJNICALL
Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv *,jobject);   

(即前缀 Java+包名+类名+方法名)

    那么这个方法名就是在java中声明的native方法名:publicnative
String  stringFromJNI();

 

2.    对于so库的API不符合JNI格式,需要自己编写c/c++源文件,在该源文件实现自己的JNI格式native函数,在JNI函数中调用第三方so库的函数,再在java中调用自己实现的JNI格式的native方法。这种方法更加灵活。

一.首先需要配置NDK环境。

这个可以直接参考这篇博客http://blog.csdn.net/xiaoyu_93/article/details/52870395;

 

二.编写简单的jni程序,然后编写

Android.mk文件,Application.mk文件。

 

编写jni程序很简单,在网上自己找资料就可以。主要是在Android.mk里调用so库

Android.mk的代码:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := HW_H265dec_Andr               //HW_H265dec_Andr是库的名称
LOCAL_SRC_FILES := libHW_H265dec_Andr.so
LOCAL_EXPORT_C_INCLUDES := src/main/jni
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_SHARED_LIBRARIES := HW_H265dec_Andr
LOCAL_MODULE := HWH265_API
LOCAL_SRC_FILES =: HWH265_APIs.cpp             //HWH265_APIs.cpp是C++文件的名称
include $(BUILD_SHARED_LIBRARY)
TARGET_CPU_API := armeabi                         //表示编译平台只是移动平台
APP_ABI := armeabi

 

这个就是告诉HWH265_APIs.cpp引用了libHW_H265dec_Andr.so库。

接着在HWH265_APIs.cpp就可以调用库的代码。

Application.mk的代码很简单:

APP_STL:=gnustl_static
APP_CPPFLAGS:=-frtti -fexceptions
APP_ABI := armeabi #表示 编译目标 ABI(应用二进制接口)

这样就完成了jni导入so库。

android jni调用so库就讲完了、

就这么简单。

人已赞赏
Android文章

android Json处理换行符

2020-4-10 14:17:08

Android文章

android jni打印log信息

2020-4-10 15:31:48

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索