android建立NDK项目调用jrtplib与pc机进行通讯
2013-06-10 01:22
609 查看
按上两次的文章,编译好windows 平台(http://blog.csdn.net/nickwar/article/details/8962344)和android平台上使用的jrtplib库(http://blog.csdn.net/nickwar/article/details/8962482)之后,
就可以做进一步的应用开发了,但测试了一下发现,两边通讯不起来,
查资料发现,网络数据传输有大小端的区别(binendian和littleendian),
这就像是吃煮鸡蛋先从大头磕开还是小头磕开的问题,比较无聊,
但windows平台上编译的配置是默认littleendian的,但android(linux)上配置是默认大端的bigendian
所以,回到android平台编译的那一节,找到jrtplib源码目录下的CMakeLists.txt,打开它,
找到下面这段代码并注释其中相应的的行,重新编译即可获得littleendian的库
if (CMAKE_CROSSCOMPILING)
# option (JRTPLIB_USE_BIGENDIAN "Target platform is big endian" ON)
# if (JRTPLIB_USE_BIGENDIAN)
# set(RTP_ENDIAN "#define RTP_BIG_ENDIAN")
# else (JRTPLIB_USE_BIGENDIAN)
set(RTP_ENDIAN "// Little endian system")
# endif (JRTPLIB_USE_BIGENDIAN)
else (CMAKE_CROSSCOMPILING)
# test_big_endian(JRTPLIB_BIGENDIAN)
# if (JRTPLIB_BIGENDIAN)
# set(RTP_ENDIAN "#define RTP_BIG_ENDIAN")
# else (JRTPLIB_BIGENDIAN)
set(RTP_ENDIAN "// Little endian system")
# endif (JRTPLIB_BIGENDIAN)
endif (CMAKE_CROSSCOMPILING)
创建android ndk项目,
把上一节生成的android运行库libjrtplib.a, libthread和头文件拷到jni目录下,这里我使用的是静态库,
打开Anroid.mk并编辑为如下内容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jthread
LOCAL_SRC_FILES := libjthread.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := jrtplib
LOCAL_SRC_FILES := libjrtplib.a
LOCAL_STATIC_LIBRARIES := jthread
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloJni
LOCAL_SRC_FILES := HelloJni.cpp
LOCAL_STATIC_LIBRARIES := jthread jrtplib
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
然后参考jrtplib自带的样例,编写android上的代码,不再细说
在pc上运行example1.exe
在android上运行编写好的代码即可
截图:
android代码在github上:
就可以做进一步的应用开发了,但测试了一下发现,两边通讯不起来,
查资料发现,网络数据传输有大小端的区别(binendian和littleendian),
这就像是吃煮鸡蛋先从大头磕开还是小头磕开的问题,比较无聊,
但windows平台上编译的配置是默认littleendian的,但android(linux)上配置是默认大端的bigendian
所以,回到android平台编译的那一节,找到jrtplib源码目录下的CMakeLists.txt,打开它,
找到下面这段代码并注释其中相应的的行,重新编译即可获得littleendian的库
if (CMAKE_CROSSCOMPILING)
# option (JRTPLIB_USE_BIGENDIAN "Target platform is big endian" ON)
# if (JRTPLIB_USE_BIGENDIAN)
# set(RTP_ENDIAN "#define RTP_BIG_ENDIAN")
# else (JRTPLIB_USE_BIGENDIAN)
set(RTP_ENDIAN "// Little endian system")
# endif (JRTPLIB_USE_BIGENDIAN)
else (CMAKE_CROSSCOMPILING)
# test_big_endian(JRTPLIB_BIGENDIAN)
# if (JRTPLIB_BIGENDIAN)
# set(RTP_ENDIAN "#define RTP_BIG_ENDIAN")
# else (JRTPLIB_BIGENDIAN)
set(RTP_ENDIAN "// Little endian system")
# endif (JRTPLIB_BIGENDIAN)
endif (CMAKE_CROSSCOMPILING)
创建android ndk项目,
把上一节生成的android运行库libjrtplib.a, libthread和头文件拷到jni目录下,这里我使用的是静态库,
打开Anroid.mk并编辑为如下内容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jthread
LOCAL_SRC_FILES := libjthread.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := jrtplib
LOCAL_SRC_FILES := libjrtplib.a
LOCAL_STATIC_LIBRARIES := jthread
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloJni
LOCAL_SRC_FILES := HelloJni.cpp
LOCAL_STATIC_LIBRARIES := jthread jrtplib
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
然后参考jrtplib自带的样例,编写android上的代码,不再细说
在pc上运行example1.exe
在android上运行编写好的代码即可
截图:
android代码在github上:
https://github.com/F-Sidney/HellojrtplibAndroid.git
相关文章推荐
- android下面通过ndk建立一个虚拟触摸屏设备可以被sendevent调用
- Android项目设置为自动进行ndk-build
- Android使用NDK调用C语言写的SO进行加密
- 在window下,简单利用NDK编译c/c++文件,在android项目中调用。
- 借助NDK,Android与C动态链接库的相互调用
- Android建立模拟器进行调试
- 最全面的Android和JavaEE项目(S2SH)使用WebService进行相互通信的讲解(Android篇)
- 【转】NDK上建立自己的项目
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法实现边缘检测代码(2)
- JNI_Android项目中调用.so动态库
- Android调用相机程序和图片处理程序获得原图并且进行图片处理
- android手机客户端与pc机进行socket通信
- 通过jni调用OpenCv跟直接调用android版openCv对图片进行简单的变换
- Android-调用本地方法传递数组参数/NDK-JNI开发实例(五)
- Android App应用调用已安装市场,进行软件评分的功能代码实现
- cocos2d-x3.0beta下建立android开发环境(mac+eclipse+ndk)
- Android项目笔记四:Android端的socket客户端建立
- android 平台上使用opencl 调用gpu 进行加速
- android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】 推荐
- android Settings项目建立