移植UDT到android
在开发过程中,需要使用UDT协议,由于server端使用的是c++版本的udt库,而Android版本在使用udt java版本和c++版本通信时,发现一些问题,google后发现目前的java version can not talk with c++ version,所以只能通过将UDT移植到android上,然后通过JNI的方式进行调用,下面就列出移植过程,供大家参考。
1、下载UDT4 C++版本,下载android ndk,存放在路径/path/android-ndk-r8b,
设置系统变量export PATH=$PATH:/path/android-ndk-r8b
2、创建udtforAndroid的jni版本,路径:/path/udt4adr/udtforAndroid/jni,编写Android.mk文件:
LOCAL_PATH := $(call my-dir)
LOCAL_CFLAGS := -DLINUX
LOCAL_CPPFLAGS := -DLINUX
LOCAL_C_INCLUDES := /usr/include/c++/4.5/
LOCAL_CPP_EXTENSION:=.cpp
include $(CLEAR_VARS)
LOCAL_MODULE := udt
LOCAL_SRC_FILES := md5.cpp common.cpp window.cpp list.cpp buffer.cpp packet.cpp channel.cpp queue.cpp ccc.cpp cache.cpp core.cpp epoll.cpp api.cpp
include $(BUILD_SHARED_LIBRARY)
使用NDK-BUILD,生成libudt.so
3、创建udtClient的jni版本:路径:/path/udtClient/jni, 编写Android.mk文件:
LOCAL_PATH := $(call my-dir)
LOCAL_CPP_EXTENSION:=.cpp
include $(CLEAR_VARS)
PATH_TO_UDT_SOURCE:=./include/
PATH_TO_LIBUDT_SO:=/Users/jiangsai2006/Documents/21.99merry/udtClient/jni
LOCAL_C_INCLUDES += $(PATH_TO_UDT_SOURCE)
LOCAL_LDLIBS += -L$(PATH_TO_LIBUDT_SO) -ludt
LOCAL_MODULE := connect
LOCAL_SRC_FILES := connect.cpp
include $(BUILD_SHARED_LIBRARY)
使用生成libconnect.so
4、将这两个动态库加入到工程里:libs/armeabi/目录下
5、在程序里load动态库,并定义native接口,如下:
static {
System.loadLibrary("udt");
System.loadLibrary("connect");
}
public nativeint connect2Server();
6、如果在c++代码中使用了stl,可以定义Application.mk文件,然后加入如下内容:
APP_STL := stlport_static
更多相关文章
- Android(安卓)dp方式的屏幕适配工具使用(bat批处理方式)
- Android(安卓)uiautomator实例使用
- Android编译Native C 模块
- android中的下载问题
- 神奇的 Magisk
- Android的4种文件类型
- Android之SQLite数据库使用
- android学习笔记之AIDL
- 横竖屏切换【Android】