美文网首页WebRTC
WebRTC Android 源码编译

WebRTC Android 源码编译

作者: goodl | 来源:发表于2017-06-25 17:13 被阅读583次

环境

首先要有一个快速稳定的VPN,建议买一个,因为真的值。
Android的编译只能在Linux环境下进行,参考:webrtc.org

Android development is only supported on Linux.

我在Mac上编译过,缺少一些依赖,后来放弃了,建议使用Ubuntu14.04或16.04。
我这里使用 Ubuntu12.04(Parallels Desktop)+ ExpressVPN。
有文章说可以使用shadowsocks的,我也尝试过,在执行build/install-build-deps.sh时会有问题:

________ running '/usr/bin/python src/third_party/binutils/download.py' in '/home/ting/dev/webrtc'
NOTICE: You have PROXY values set in your environment, but gsutil in depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environment variable from being used.
To use a proxy in this situation, please supply those settings in a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environment var.

________ running 'download_from_google_storage --no_resume --platform=linux* --no_auth --bucket chromium-clang-format -s src/buildtools/linux64/clang-format.sha1' in '/home/ting/dev/webrtc'
NOTICE: You have PROXY values set in your environment, but gsutil in depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environment variable from being used.
To use a proxy in this situation, please supply those settings in a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environment var.
0> Downloading src/buildtools/linux64/clang-format...

网上也有对应的解决办法,你可以尝试下。

准备

1.安装虚拟机Ubuntu14.04(建议不少于50G)

代码下载完近6G(编译后超过10G):


webrtc_06.png

再加上系统,整个虚拟机40G左右:


Snip20170625_24.png
2.安装配置JDK8,JDK7编译时会报错:
util.build_utils.CalledProcessError: Command failed: ( cd /home/ting/dev/webrtc/src; third_party/android_tools/sdk/tools-lint/bin/lint -Werror --exitcode --showall --xml out/Debug/gen/build/android/prepare_android_lint_cache/result.xml --config out/Debug/gen/build/android/prepare_android_lint_cache/config.xml /tmp/tmpaEjNsE/SRC_ROOT1 )
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/tools/lint/Main : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:442)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:64)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:354)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:348)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:347)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:312)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

[554/8362] CXX obj/webrtc/pc/peerconnection/rtpsender.o
ninja: build stopped: subcommand failed.

原因是JDK版本不匹配

The reported major numbers are:
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

当然你也可以修改编译的Android SDK Tools和gradle配置来使用jdk7

3.安装 git:
$ sudo apt-get install git

除此之外,不需要提前安装依赖,install-build-deps.sh会检测环境并安装所需依赖的。

安装 depot_tools

安装 deport_tools

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

为方便使用,添加环境变量:

$ sudo gedit /etc/profile

## 在最后添加
export PATH=$PATH:/home/ting/dev/depot_tools

激活生效:

$ source /etc/profile

验证:

$ which gn

获取代码

$ mkdir webrtc && cd webrtc
$ fetch --nohooks webrtc_android

这一步会耗时很长,如果你的VPN不够快,那么这一步需要极大的耐心和毅力,不要怀疑你的电脑是不是死机了:


webrtc_fetch_source.png

就是这样,没有任何输出,完全不知道进度。可能几十分钟,可能几小时,你会看到结果:


webrtc_fetch_ok.png

然后同步代码:

$ gclient sync
webrtc_sync.png

安装编译所需依赖

$ cd src
$ ./build/install-build-deps.sh

这一步中间需要同意许可,输入root密码等,可能会遇到如下界面:


Snip20170625_4.png

这个按确定没反应,鼠标点击也没有反应,别慌,按tab就可以按确定了。

编译

  • 生成项目:
$ gn gen out/Debug --args='target_os="android" target_cpu="arm"'

To build for ARM64: use target_cpu="arm64"
To build for 32-bit x86: use target_cpu="x86"
To build for 64-bit x64: use target_cpu="x64"

  • 生成Release版本:
$ gn gen out/Debug --args='is_debug=false'
  • Clean编译内容:
$ gn clean out/Debug
  • 全部编译:
$ ninja -C out/Debug

这一步有进度显示,感觉好很多:


Snip20170624_3.png
  • 编译AppRTCMobile:
$ ninja -C out/Debug AppRTCMobile

因为上面已经全部编译过了,这里就没什么可编的了。

  • 生成Android Studio项目:
$ build/android/gradle/generate_gradle.py --output-directory $PWD/out/Debug \
--target "//webrtc/examples:AppRTCMobile" --use-gradle-process-resources \
--split-projects
  • Android Studio 打开项目:

选择使用Android Studio’s SDK:


Snip20170625_5.png
  • 选择使用 Gradle wrapper:
Snip20170625_6.png
  • 测试

手机安装编译后的app:```
$ adb install out/Debug/apks/AppRTCMobile.apk



开启你的WebRTC之旅吧
![Snip20170625_17.png](https://img.haomeiwen.com/i6349226/c41e00e14d6cc605.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/800)


## 参考:
>https://webrtc.org/native-code/android/
https://webrtc.org/native-code/development/prerequisite-sw/
https://webrtc.org/native-code/development/
http://dev.chromium.org/developers/how-tos/install-depot-tools
https://chromium.googlesource.com/chromium/src/+/master/docs/android_build_instructions.md

相关文章

网友评论

    本文标题:WebRTC Android 源码编译

    本文链接:https://www.haomeiwen.com/subject/mzcrcxtx.html