WebRTC for Android-源码编译篇

作者: DevSiven | 来源:发表于2017-04-19 10:15 被阅读5156次

    目录

    • 编译环境搭建
    • 代码同步
    • 编译参数配置
    • 源码编译
    • 踩过的问题
    • 总结

    一、编译环境搭建

    首先,WebRTC源码编译,官方也说明得很清楚,只能在Linux平台进行编译(笔者在mac os 编译过,后来因为缺少arm架构等编译依赖文件放弃,具体参考官网),这里笔者使用时ubutun 14.0.1 + vmware。

    当然,这整个过程中,翻墙是不可缺少的,具体可以参考笔者的博客《shadowsocks+proxychains 让ubuntu翻墙飞起来》

    (一) 依赖工具环境配置

    depot_tools 是同步代码的时候download下来的,但是笔者这里首先先说下依赖文件的环境配置,如果有需要先下载的,请跳转depot_tools工具
    ** 具体配置 **
    1、添加环境变量

        sudo gedit /etc/profile # 针对每个用户
    
        # 在最后添加下面语句
        export PATH=$PATH:/home/siven/siven/softSetup/depot_tools # depot_tools路径
    
    

    2、激活生效

        source /etc/profile #重启全局生效,否则只针对该bash有效
    

    3、验证

        which gn # 如果正常打印出gn命令路径,说明成功
    

    二、代码同步

    1、同步准备

       mkdir webrtc 
       cd webrtc
    

    2、代码下载

        # 选择android 分支版本
        fetch --nohooks webrtc_android
        # 同步代码
        gclient sync
    

    等待... 源码、第三方库、依赖文件鱼等大概16G左右(虚拟机记得配置存储大于20G喔,默认是20G)

    3、依赖环境配置

        # 当代码下载完整
        cd src
        ./build/install-build-deps.sh
    

    这里环境配置也许会遇到以下问题:
    ** Automatic java installation filed **


    webrtc-0.png

    这里直面意思是在配置jdk环境的时候报错。由于ubuntu会自带openjdk 并且版本是1.7.这里webrtc代码打包的jdk环境是java8(控制台信息也建议jdk 8shifou beianz ),所以这里解决方法是卸载原来的openjdk,自己手动安装jdk,而且版本要求是1.8,这里如何配置jdk,笔者就不说明了~

    三、编译参数配置

    1、参数配置

    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"

    四、源码编译

    (一) 全编译

    全编译指的是所有源代码的编译,编译文件会稍多,并且编译时间会稍长

    ninja -C out/myWebRTC # myWebRTC 指的是编译输出文件夹
    
    (二) 编译Android studio 项目

    1、项目编译

    ninja -C out/myWebRTC AppRTCMobile
    

    2、gradle 构建文件生成
    Android studio 项目是依赖gradle进行构建编译的,在上面步骤编译出来的项目并没有gradle依赖文件,因此还需要进行编译生成

    build/android/gradle/generate_gradle.py --output-directory $PWD/out/myWebRTC \
    --target "//webrtc/examples:AppRTCMobile" --use-gradle-process-resources \
    --split-projects
    

    执行结束后就会在当前 ** out/myWebRTC **目录下出现 gradle文件夹,即工程正在的目录

    3、open the project
    直接启用Android studio,import 当前gradle生成目录,即 out/myWebRTC/gradle

    五、踩过的问题

    (一)环境配置踩的坑
    ** Automatic java installation filed **
    上面环境配置已经说明解决方式

    (二)工程项目踩的坑
    1、编译报错
    第一次Import项目的时候,会出现R文件编译报错,如下图所示

    webrtc-1.png

    ** 原因分析 **:
    对于java,命名类名、包名、或者是变量名,我们都不可以以系统关键词命名,例如int、interface、class、package等。这里R文件报错地方指向package,所以问题应该定位在Project生成R文件的时候,由于工程包名使用了package关键字,所以编译会出现报错。

    ** 解决 **:
    R文件包名生成跟AndroidManifest.xml有关,因此只需要修改src/build/android/AndroidManifest.xml 下的package name 即可,如下图所示:

    webrtc-2.png

    2、运行报错
    由于读者用的是小米手机,由于系统自带的miui优化,运行安装apk的时候会出下以下报错,如图所示:

    webrtc-3.png

    ** 解决 **:
    只需要在IDE设置instant Run,取消Enable Instant Run即可,如图所示:

    webrtc-4.png

    六、总结

    翻墙,翻墙。没有这个前提什么都干不了源码编译时体力活,如果编译成功后就总结下,对自己是很有帮助的,笔者就踩过很多坑总之,多记笔记,多总结吧!

    好了,下面开启webrtc之旅吧~

    webrtc-5.png

    BY SIVEN - HORI-GZ
    2017.4.18

    相关文章

      网友评论

        本文标题:WebRTC for Android-源码编译篇

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