Android Studio cmake方式jni开发,在c层使用其它动态链接库*.so
2016-11-16 01:30
627 查看
最近在研究Google推荐的cmake方式的ndk开发,遍寻网络居然很难找到如何在c层调用其它动态链接库函数(cmake方式),经过不懈努力,终于找到了可行的方法;本人初次涉及ndk开发,如有失误之处,请指教; 本文完整项目:
http://download.csdn.net/detail/qq372848728/9684002
忘记清理编译文件了,占用空间可能有点大;
本文主要介绍如何通过编译libjpeg动态链接库,然后再如何访问libjpeg的库函数;
首先当然是创建cmake方式的Android Studio project,
注意勾选Include c++选项,该选项会自动创建cmake配置文件以及cpp文件夹,当然,如果熟悉cmake也将普通工程转为cmake方式的project,后面的选项默认即可,直接next;
项目创建完成之后注意:
这里的group最好选择Project,方便后面修改cmake配置文件;
项目创建完成之后,需要导入要用到的so文件libjpeg.so,这里我已经提前通过ndk编译好了,如下图放置到libs文件夹即可,然后将libjpeg.so源码里的.h文件放到cpp目录下,
然后修改Module下build.gradle文件在android节点下加入以下配置
sourceSets {
main {
jniLibs.srcDirs = [‘libs’]
}
}
sync一下即可,当然如果没有编译好的libjpeg.so,可按照如下方式编译(需要预先配置好ndk开发环境,具体度娘),首先下载libjpeg源码,去http://www.ijg.org/下载.zip格式的,解压,然后在解压后的文件夹里新建jni文件夹,然后将libjpeg的所有文件移动到jni文件夹里,如图
现在还需要在上一步的jni文件夹里新建Android.mk文件,mk文件内容如下:
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_SRC_FILES :=jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c \ jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \ jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c \ jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \ jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c \ jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c \ jquant2.c jutils.c jmemmgr.c jmemnobs.c LOCAL_C_INCLUDES := $(LOCAL_PATH) LOCAL_CFLAGS += -O3 -fstrict-aliasing -fprefetch-loop-arrays \ -DANDROID -DANDROID_TILE_BASED_DECODE -DENABLE_ANDROID_NULL_CONVERT LOCAL_MODULE := libjpeg LOCAL_MODULE_TAGS := optional # unbundled branch, built against NDK. LOCAL_SDK_VERSION := 17 include $(BUILD_SHARED_LIBRARY)
最后打开jni文件夹的上级目录,按住shift+鼠标右键,
选择在此处打开命令窗口,然后输入ndk-build 回车(如果没有配置ndk开发环境,此命令无效)
,即可编译出libjpeg.so文件;
重头戏来啦,由于需要使用libjpeg的库函数,所以需要该库的头文件
如图放置即可
如果此时你去调用libjpeg的库函数,你就会发现用不了,只是为什么呢?是因为没有修改cmake的配置文件,打开项目内的CMakeLists.txt文件,添加如下信息
add_library( libjpeg SHARED IMPORTED ) set_target_properties(libjpeg PROPERTIES IMPORTED_LOCATION D:/Android/WorkSpaseForAS/TestLibjpeg/libjpeg/libs/${ANDROID_ABI}/libjpeg.so)
并修改target_link_libraries成如下配置
target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. ${log-lib} libjpeg)
这里就可以在native-lib.cpp里使用libjpeg了,
当然还需要include 头文件:
extern "C" { #include "setjmp.h" #include "jpeglib.h" #include "jconfig.h" #include "cdjpeg.h" }
嗯,先到这里了,下一次可能会讲如何将libjpeg解码的bmp数据生成Android 的Bitmap然后显示到屏幕上,也是在本文的基础上,通过c层调用libjpeg.so。
相关文章推荐
- Android笔记之使用CMake进行JNI开发(Android Studio)
- 实现Android Studio JNI开发C/C++使用__android_log_print输出Log
- AndroidStudio Cmake学习--如何漂亮的使用jni
- android开发 使用cmake构建jni工程,并添加opencv模块
- Android studio JNI开发的三种方式
- AS2.2使用CMake方式进行JNI/NDK开发
- Android Studio JNI开发(1)------CMake编译原生库
- android jni方式调用c++代码并在其它app中使用生成的.so文件
- Android studio JNI开发的三种方式
- AS2.2使用CMake方式进行JNI/NDK开发
- AS2.2使用CMake方式进行JNI/NDK开发
- AndroidStudio2.2中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
- AndroidStudio使用CMake编译jni的C/C++文件
- 记录Android studio JNI开发的三种方式(推荐)
- JNI NDK (AndroidStudio+CMake )开发第一个项目的流程
- AS2.2使用CMake方式进行JNI/NDK开发
- AS2.2使用CMake方式进行JNI/NDK开发
- 实现Android Studio JNI开发C/C++使用__android_log_print输出Log
- AS2.2使用CMake方式进行JNI/NDK开发
- 【基于Windows系统】教你如何在Android中使用JNI以及NDK开发环境搭建