在Ubuntu12.10-32bit上构建、测试WebRTC之Android示例WebRTCDemo

参考资料:

http://www.webrtc.org/reference/getting-started

http://www.webrtc.org/reference/getting-started/prerequisite-sw

http://code.google.com/p/webrtc/issues/detail?id=1435

http://code.google.com/p/webrtc/source/browse/trunk/src/video_engine/main/test/android_test/Android.mk?spec=svn2817&r=2817

http://www.verydemo.com/demo_c131_i2918.html

1.废话

笔者是一个不熟悉Linux操作系统的小鸟。为了想跑一跑Google项目WebRTC中的Demo--video_engine,笔者花费了大量的时间和精力在网上查资料并进行尝试但是由于Google代码更新很快,网上的不少资料都随着时间推移失效,外加WebRTC项目本身的问题,笔者走了不知道多少弯路,最终勉强才算把Demo跑了起来。在这里我把这一过程做一个简单的分享,希望能给和我一样的小鸟一点帮助,也希望有大高玩点出我的错误,为我指一条明路。Orz..

下面步入正题。


2.获取WebRTC项目代码


2.1安装Depot_tools

整个WebRTC项目的文件都是通过Depot_tools同步下来的,为了得到它需要装两个东西:

sudo apt-get install git-core

sudo apt-get install subversion

待安装完成后就可以克隆Depot_tools了:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

然后把Depot_tools的路径写到.bashrc里(这样就不用每次打开一个终端都写一次):

gedit ~/.bashrc

在文件最后添加即可

export PATH="$PATH":home/xxx/depot_tools

搞完之后注销一下,再愉快地登陆并打开终端,输入 gclient进行测试。成功的话会有一陀指令说明显示出来,接下来就可以获取WebRTC的trunk了。


2.2获取代码,准备make

在终端里输入

gclient config https://webrtc.googlecode.com/svn/trunk

然后这里有一步比较关键,就是到trunk目录里找到一个名为“ .client ”的文件,编辑它在它的最后添加一行:

target_os = ['android', 'unix']

如果不添加就等着被坑爹吧。接下来你就可以轻松愉快地sync代码啦:

gclient sync

东西很多,等吧。

待完成后,到目录/trunk/third_party/android_tools/下你可以看到sync下来的sdk和ndk,把它们在系统里的路径分别写到环境变量里(可以写到.bashrc中)。

export ANDROID_SDK_ROOT=xxxxxxx/SDK

export ANDROID_NDK_ROOT=xxxxxxx/NDK

注意这里很关键,SDK你可以去官网下,但是,这个NDK请务必使用sync下来的这版,除非你是大神知道自己用其它办法也能实现

接下来有一个专门为ubuntu准备的脚本,运行它从而可以把编译项目所需的工具安装起来:

 ./build/install-build-deps.sh

又是一阵等待,如果不想等,也可以参考 这里 只安装必不可少的部分。

结束后就可以进入编译环节。


2.3编译WebRTC

首先生成makefile文件:

source ./build/android/envsetup.sh --try-32bit-host

gclient runhooks

注意!如果在runhooks的时候报如下错:

/trunk/third_party/android_tools/ndk//toolchains/arm-linux-androideabi-4.6/prebuilt/linux-i686/bin/*-gcc: not found


则需要进入目录/trunk/third_party/android_tools/ndk//toolchains/arm-linux-androideabi-4.6/prebuilt/把linux-x86改成linux-i686,然后再在ndk-build之前把它改回来,即还原成linux-x86。

然后

make

待make完成后你应该能在trunk/out/debug目录下发现大量 .a格式的文件。


3.build WebRTCDemo

下面为构建WebRTCDemo生成 .so文件

cd webrtc/video_engine/test/android/

ndk-build

成功后会生成libwebrtc-video-demo-jni.so 。


到这里,烦躁的工作就基本结束了,下面只需要把/trunk/webrtc/video_engine/test/android这个项目import到你的eclipse中测试就可以啦。

注意一开始刚导进去的时候项目本身有错误,是因为有几个文件没被包含在里面,你只要到webrtc目录里搜索相应的文件并添加到项目里即可,添加完成后的样子应该是:

在Ubuntu12.10-32bit上构建、测试WebRTC之Android示例WebRTCDemo_第1张图片



 












4 曾遇到的各种错误


错误1.

在ndk-build的时候报错:

Android NDK: Check that jni/../../../../../out/Debug/libvideo_engine_core.a exists  or that its path is correct 

原因是没有按照2.2所述那样添加 target_os = ['android', 'unix'] ,需要按上面所述的步骤推倒重来。其它类似找不到.a的错误也可以尝试如此解决。

错误2.

在ndk-build的时候报错:

Assembler messages: Fatal error: invalid -march= option: `armv7-a'  error 1 ..

或者报错:

arm-linux-androideabi-ld: Syntax error: "(" unexpected ...

原因是NDK的版本不对,请使用trunk/thirdparty/androidtools/里的NDK

错误3.

在ndk-build的时候报错:

make: /home/liuhao/depot_tools/trunk/third_party/android_tools/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc: Command not found

原因很可能是之前没有按2.3中所述那样没把路径改回来。

错误4.

在runhooks的时候报错:

/bin/sh: 1: /home/liuhao/depot_tools/trunk/third_party/android_tools/ndk//toolchains/arm-linux-androideabi-4.6/prebuilt/linux-i686/bin/*-gcc: not found

原因见2.3

错误5.

在运行demo的时候报错:

Could not find class 'android.graphics.SurfaceTexture

原因是需要至少支持API11。

错误6.

在运行demo的时候报错:

NoClassDefFoundError : org.webrtc.voiceengine.(或者其它class)

解决方法见上述3。


你可能感兴趣的:(在Ubuntu12.10-32bit上构建、测试WebRTC之Android示例WebRTCDemo)