当前位置:网站首页 > 技术博客 > 正文

android webview 源码



webRTC源码,有RTC web的,也是默认的,也有RTC android的,还有RTC ios的,可以根据项目需要,拉取不同的源码。当然了,其实不同的仓库源码,底层库基本一样的,直白的说,C++的代码基本一样,大部分是公共的代码,不然它也不敢宣称自己是跨平台的。RTC所谓跨平台,就是底层库(C++实现)是同一个,但针对不同的平台,比如对android,会包一层java API来是适配,给android开发着使用,ios或者web也一样(web就是包一层JS API)。

话不多说,下面开始介绍如何拉取源码,以及如何编译。

 

设置环境变量, home目录的.bashrc,末尾添加两句话

 
 

命令fetch和gclient,甚至包括下面编译用的gn,就是上面1.1 安装的工具,所以如果你执行失败,请确认1.1有没有设置正确喔。

命令执行了,会拉取webRTC源码,且额外加了android相关的依赖,例如Android SDK/ NDK。整个工程大概21G,主要占用的是第三方依赖,在third_party目录下,大概17G+,其中third_party/Android相关依赖有6G+。所以拉取时,请确保存储空间充裕。

另外,如果是基于浏览器的,那命令如下:

 

编译以android的webRTC源码来说明。
代码拉下来,就一个src目录。
进入src目录,使用gn命令,生成编译RTC android需要的文件。

 

然后开始编译:

 

这个命令是编译代码,生成so库。不会生成android apk。如果要生成demo apk,用如下命令:

 

ps:
如果你之前ubuntu没有下载android sdk/ndk,那么,在源码目录下,设置一下sdk/ndk的环境变量:

 

这里介绍3种开发方式。

3.1.1 生成Android demo app源码

用如下命令,生成一个AndroidStudio可以打开的工程。

 

3.1.2 引入工程

一切顺利的话,可以编译成功,但是,在2021-04-15左右的master的代码,Sync时会遇到失败。

 

再Sync,应该过了,但是遇到了新的错误:

也就是说,有同样的R.class在不同的module出现。

这个问题,还没有得到解决。所以下面提出另外的开发方式。

上面的方法,编译有问题,而且工程很多是相对路径,要看代码特别不方便。所以,我们可以自己把rtc源码抓出来,自己编译。
如标题说的,总共需要3个东西:
android demo源码,就是一个使用RTC android API的例子工程,在examples/androidapp目录下。
rtc android java层源码,指的就是RTC给android封装的JAVA API。当然了,API就是薄薄的一层,实际工作在so完成,所以还需要一个so。so名字是libjingle_peerconnection_so.so。

下面给出具体步骤:

3.2.1 创建一个干净的工程,app模块放官方的example代码

在这里插入图片描述
工程创建好了,就有一个默认的app 模块。

从webrtc-android/src/examples/androidapp目录中,复制目录src res AndroidManifest.xml 替换到新建的工程。

把webrtc-android/src/examples/androidapp/third_party/autobanh/lib的autobanh.jar放到新建的工程的app/libs目录。(autobanh.jar是WebSocket的java包,rtc android有依赖)

3.2.2 创建一个新的Module,存放rtc源码

在这里插入图片描述
包名如上。module_name可以自己随便取。包名用org.webrtc,是因为RTC android的java API都是这个包名,咱得一致。

该模块都需要拷贝什么目录呢?
其实可以根据3.1,生成的工程来看,目前需要如下目录:
a) 自动生成的文件
out/Debug/gen/sdk/android/peerconnection_java/generated_java/input_srcjars/org/webrtc
这个数量很少,截至2021-5-1,只有3个。
NetworkPreference.java Priority.java VideoCodecType.java

b) sdk/android/src/java/

c) sdk/android/api

d) rtc_base/java/src

e) modules/audio_device/android/java/src

上面的文件全部拷贝到新模块的org/webrtc目录下。

3.2.3 加入so库

前面第二节,提到了编译。会生成so库。

在@ 3.2.2 建立的模块内,src/main下,建立jniLibs/armeabi,然后把上面的库,拷贝到目录中。

ps:
如果项目需要修改so,可以修改对应的c++代码,然后用第二节的编译命令来编译。

3.2.4 Sync并解决问题

然后做如下替换:
Edit->Find->Replace In Path
在这里插入图片描述
(ps: 当然了,你也可以自己加上android-support的库,也能Sync过)

3.2.5 收尾

千万我们自己手动拷贝了android java api和so,其实这个组合在一起就是一个aar。webRTC的android源码,最后对外输出的就是一个aar。所以,如果你不需要修改java api,那也可以直接用RTC的工具,生成aar来使用。

所以要跑Demo的话,可以自己编译aar,然后用examples/androidapp的源码,自己弄一个工程,工程依赖aar,就可以跑起和3.1一样的Demo了。下面是具体步骤:

3.3.1 编译aar

执行如下脚本:

 

如果想修改,可以打开脚本文件,修改变量。

最后的aar,就生成在src根目录。叫做libwebrtc.aar。

3.3.2 建立工程并做一些修改

建立一个新工程,包名如下:
在这里插入图片描述

创建好了,就有一个默认的app目录。

从webrtc-android/src/examples/androidapp目录中,复制目录src res AndroidManifest.xml 替换到新建的工程。

把webrtc-android/src/examples/androidapp/third_party/autobanh/lib的autobanh.jar和生成的libwebrtc.aar放到新建的工程的app/libs目录。

修改app/build.gradle
在这里插入图片描述
最后Sync,会发生一个错误,是Nullable找不到。没关系,全局替换成androidx的就行。

Edit->Find->Replace In Path, 做如下替换:
import android.support.annotation.Nullable;
import androidx.annotation.Nullable;

最后再Sync,然后编译apk,理论上可以编译成功。

第三步,各种操作猛如虎,终于编译出官方给的demo apk了,也能看代码,也能自己加日志学习了。但是apk跑起来,怎么运行呢?

首先,最基本的RTC功能就是视频通话,那就需要2个端,需要把两个apk装在2个手机上。
在这里插入图片描述
跑起来怎么运行呢?
如这篇文章说的webRTC基本原理,运行demo还需要一个信令服务器。google官方的客户端demo,就要用google官方的信令服务器了。

Google自己线上也运行了这个服务器,地址是。打开后是这样:
在这里插入图片描述
第三节编译的apk,默认就是连接到这个服务器。不信代码可以搜一下appr.tc。

另外,如果是纯学习用,不是商用,那不需要用google官方的信令服务器+demo,可以有另一套简单的,后面另一篇文章展开。

而如果修改Android java API,可以参考@3.2。

如果还需要修改so,建议用Virtual Studio来作为IDE开发。查代码用Virtual Studio,编译so用第二节的命令。

  • 上一篇: display弹性布局教程
  • 下一篇: html框架技术
  • 版权声明


    相关文章:

  • display弹性布局教程2024-11-22 11:01:04
  • 黑客软件 黑客工具箱2024-11-22 11:01:04
  • 思科模拟器3560交换机2024-11-22 11:01:04
  • linux中rename命令详解2024-11-22 11:01:04
  • 系统封装后怎么备份2024-11-22 11:01:04
  • html框架技术2024-11-22 11:01:04
  • 迭代器iterator和listiterator2024-11-22 11:01:04
  • 主流数据库管理系统2024-11-22 11:01:04
  • seq1m2024-11-22 11:01:04
  • 数字图像基本处理实验2024-11-22 11:01:04