在开发过程中,需要使用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



更多相关文章

  1. Android(安卓)dp方式的屏幕适配工具使用(bat批处理方式)
  2. Android(安卓)uiautomator实例使用
  3. Android编译Native C 模块
  4. android中的下载问题
  5. 神奇的 Magisk
  6. Android的4种文件类型
  7. Android之SQLite数据库使用
  8. android学习笔记之AIDL
  9. 横竖屏切换【Android】

随机推荐

  1. Activity-Spinner使用
  2. android RecycleView实现下拉刷新和上拉
  3. Android Studio 报No resource found tha
  4. 比比看,Android和Mango到底有什么不同?
  5. Android 开发集锦
  6. android activity的生命周期,四种启动模
  7. android 开发时出现 Please ensure that
  8. 让TextView 自带滚动条
  9. Android:TextView 自动滚动(跑马灯)
  10. React Navigation Android(安卓)返回键事