android jni开发 调用 第三方 动态链接库
来源:互联网 发布:淘宝网卖什么赚钱 编辑:程序博客网 时间:2024/05/18 02:08
在android jni编程时,编译时默认会先清空libs/armeabi目录,所以不能直接把第三方动态库放在libs/armeabi目录中
要解决这个问题:
1. 在jni目录下创建prebuilt子目录(目录名可自定义).
2..将第三方.so放到prebuilt中
3. 编写Android.mk文件
Android.mk实际上是个轻量级的Makefile.
用来允许你将源文件组织在一个“module”中,每个Android.mk中可以定义一个或多个modules. 你也可以在多个modules中使用相同的源文件
写之前先介绍一个简单例子:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := cocos2dLOCAL_MODULE_FILENAME := libcocos2dLOCAL_SRC_FILES := hellocpp/main.cpp \ ../../Classes/Include/Basic/Player.cpp \ ../../Classes/Include/Basic/Room.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \$(LOCAL_PATH)/../../Classes/Include \$(LOCAL_PATH)/../../Classes/Iwylib include $(BUILD_SHARED_LIBRARY)
我们来解释下这几行代码:
1.LOCAL_PATH := $(call my-dir) :
一个Android.mk文件首先必须定义好LOCAL_PATH变量,它用于在开发树中查找源文件。这里 my-dir,由编译系统提供,用于返回当前路径(即包含Andorid.mk文件的 目录)
2. include $(CLEAR_VARS) :
CLEAR_VARS由编译系统提供,指定让GUN MAKFILE为你清除LOCAL_XXX变量。
3 .LOCAL_MODULE := XXX :
LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个module。名称必须是唯一的 而且不包含任何空号。注意编译系统会自动产生合适的前缀和后缀。 此处会生成libXXX.so 文件。
4. LOCAL_MODULE_FILENAME :
这个变量是可选的,允许你重新定义生成文件的名称。
5. LOCAL_SRC_FILES :
这个是编译module的源文件列表(例如:.c , .cpp , .so ....)。这些源文件都是相对于LOCAL_PATH的
6. LOCAL_C_INCLUDES :
当编译所有源代码时(c, c++ )将会添加到包含搜索路径中,
(这些要放在 LOCAL_CFLAGS / LOCAL_CPPFLAGS 中对应包含的flag的前面)
7. include $(BUILD_SHARED_LIBRARY) :
创建自己的动态链接库
下面具体讲 如何配置 引用第三方动态链接库
include $(CLEAR_VARS) LOCAL_MODULE := crypto LOCAL_MODULE_FILENAME := libcryptoLOCAL_SRC_FILES := prebuilt/libcrypto.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)
1. include $(CLEAR_VARS) 在生成每个 module之前都有清除一下变量
2. LOCAL_SRC_FILES : 所要引起的 动态链接库的 路径, prebuilt 是自己在jni目录下建的文件夹
3.LOCAL_EXPORT_C_INCLUDES 获取 .so文件 下的 头文件路径
4. include $(PREBUILT_SHARED_LIBRARY)
指向一个编译脚本,这个脚本用来指向一个预编译动态库。不像BUILD_SHARED_LIBRARY 和 BUILD_STATIC_LIBRARY, LOCAL_SRC_FILES的值必须是一个
编译好的动态库的路径(如foo/libfoo.so),而不是源文件。
LOCAL_SHARED_LIBRARY := cryptoLOCAL_SHARED_LIBRARY 连接第三方库
下面是Android.mk完整配置: 注意 (#-------------------------------)之间的内容
LOCAL_PATH := $(call my-dir)#--------------------------include $(CLEAR_VARS) LOCAL_MODULE := crypto LOCAL_MODULE_FILENAME := libcryptoLOCAL_SRC_FILES := prebuilt/libcrypto.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS) LOCAL_MODULE := ssl LOCAL_MODULE_FILENAME := libsslLOCAL_SRC_FILES := prebuilt/libssl.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)#--------------------------include $(CLEAR_VARS)LOCAL_MODULE := cocos2dcpp_sharedLOCAL_MODULE_FILENAME := libcocos2dcppLOCAL_SRC_FILES := hellocpp/main.cpp \ ../../Classes/Include/Basic/Player.cpp \ ../../Classes/Include/Basic/Room.cpp \ ../../Classes/Include/Basic/Task.cpp \ ../../Classes/Iwylib/snappy-c-master/snappy.c \ ../../Classes/Iwylib/http_request.cpp \ ../../Classes/Iwylib/httpwork.cpp \ ../../Classes/Iwylib/login_cache.cpp \ ../../Classes/Iwylib/MsgLayer.cpp \ ../../Classes/Iwylib/ODSocket.cpp \ ../../Classes/Iwylib/rapidjson_util.cpp \ ../../Classes/Iwylib/room_type_info_parse.cpp \ ../../Classes/Iwylib/room_type_info.cpp \ ../../Classes/Iwylib/session_mgr.cpp \ ../../Classes/Iwylib/sock_codec.cpp \ ../../Classes/Iwylib/socket.cpp \ ../../Classes/Iwylib/tcp_socket.cpp \ ../../Classes/Iwylib/tool.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \$(LOCAL_PATH)/../../Classes/Include \$(LOCAL_PATH)/../../Classes/Iwylib \$(LOCAL_PATH)/../../Classes/Modules \$(LOCAL_PATH)/../../Classes/Modules/Network \$(LOCAL_PATH)/../../Classes/Modules/room_sel LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static LOCAL_WHOLE_STATIC_LIBRARIES += spine_static LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static#--------------------------LOCAL_SHARED_LIBRARY := crypto LOCAL_SHARED_LIBRARY := ssl#---------------------------include $(BUILD_SHARED_LIBRARY)$(call import-module,.)$(call import-module,audio/android) $(call import-module,Box2D) $(call import-module,editor-support/cocosbuilder) $(call import-module,editor-support/spine) $(call import-module,editor-support/cocostudio) $(call import-module,network) $(call import-module,extensions)
- android jni开发 调用 第三方 动态链接库
- android JNI 调用第三方动态库
- Android-jni 调用第三方动态库
- JNI开发基础系列--链接第三方动态库
- android JNI学习之二 调用第三方动态库
- 在android里调用第三方动态链接库.so
- JNI技术之Java调用C/C++编写的第三方dll-动态链接库
- Android.mk JNI 调用第三方库
- g++编译动态库。测试java jni调用第三方动态库。[android studio IDE]
- 使用JNI 调用第三方c++动态库
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- hrbust1053 Warcraft III (完全背包裸题)
- 【SpringMVC系列二】 EasyUI+SpringMVC--Maven项目--WEB-INF安全目录访问jsp
- Java基础----内部类实现Thread
- xcode 左边导航栏中,类文件后面的标记“A”,"M","?"……等符号的含义
- JS和CSS初尝试
- android jni开发 调用 第三方 动态链接库
- 《深入浅出Windows Phone 8应用开发》之蓝牙编程
- Android应用签名
- 旋转数组的最小数字
- HDU3265 线段树 线扫描
- this关键字,抽象类和索引器
- poj 3661 Running(dp)
- Win8.1 & WP8: 蓝牙Rfcomm应用
- OJ刷题之《牛顿迭代法求根》