首页 » Android » android jni调用so库

android jni调用so库

原文 http://blog.csdn.net/bzlj2912009596/article/details/76474740

2017-08-01 10:20:08阅读(641)

今天,讲讲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库就讲完了、


就这么简单。




最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹