环境

Android的编译只能在Linux环境下进行,参考:http://webrtc.github.io/webrtc-org/

Android development is only supported on Linux.

我在Mac上编译过,缺少一些依赖,后来放弃了,建议使用 Ubuntu。
我这里使用 Ubuntu12.04(Parallels Desktop 虚拟机)。

准备

1.安装虚拟机 Ubuntu18.04

代码加编译后大小 25G :

➜ du -sh webrtc25G webrtc
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.oninja: 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 gclient

获取代码

➜ 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-android.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 "//examples:AppRTCMobile" --use-gradle-process-resources \--split-projects --canary
  • Android Studio 打开项目:

选择使用Android Studio’s SDK:


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

手机安装编译后的app:
➜ adb install out/Debug/apks/AppRTCMobile.apk ,电脑打开web页面:https://appr.tc/ ,手机和电脑进入同一个房间就可以视频了。

开启你的WebRTC之旅吧


Snip20170625_17.png

参考:

http://webrtc.github.io/webrtc-org/native-code/android/

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Nginx系列教程(一)| 手把手教你在Linux环境下搭建Nginx服务
  3. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  4. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  5. rk3326 android 8.1 上传sftp时候jsch类报错
  6. 【Android(安卓)Native Code开发系列】 五 运行、调试编译的Nati
  7. Android(安卓)集成 Zxing 条码扫描器
  8. android XML 解析代码
  9. linux上调试python in android

随机推荐

  1. Android(安卓)Studio com.android.dex.De
  2. Android(安卓)View从源码的角度分析事件
  3. ListView和ScrollView的下拉和上拉的回弹
  4. Android——App内文件分享功能
  5. Android(安卓)开发之布局细节对比:RTL模式
  6. Android(安卓)style详解
  7. Android(安卓)-- Android的广播机制(Broad
  8. Android零基础入门第2节:Android(安卓)系
  9. Android再添新功能 支持汉语语音指令
  10. Android(安卓)不得不说的VideoView的一些