首页 > 编程知识 正文

android应用程序开发第三版(编译安卓源码服务器配置)

时间:2023-05-03 06:57:51 阅读:66357 作者:676

前言webRTC源代码可能是RTC web的,也可能是缺省的。 有些是RTC安卓的,有些是RTC ios的。 根据项目的需要,可以提取不同的源代码。 当然,实际上根据仓库的源代码,底层库基本上是相同的。 坦率地说,c的代码基本相同,大部分是公共代码。 否则,也不能自称是跨平台。 RTC跨平台是指基础库(c实现)相同,但对于不同的平台(例如android ),包括一层java API进行拟合。 开发成安卓使用。 ios和web也一样(web是包含一层JS API。

不用说,我将介绍如何提取源代码和编译源代码。

1源代码抽屉1.1安装必备工具depotgitclone https://chromium.Google source.com/chromium/tools/depot _ tools.git设置环境变量,home dide

exportwebrtc _ depot _ tools=/home/Chen Xiaofeng/webrtc _ source/depot _ toolsexportpath=$ path 3360 $ webrtc _ th

source ~/.bashrc

1.2引出源代码创建目录,进入目录,引出。

如上所述,webRTC源代码中有基于浏览器的,也有基本的,有基于android的,也有基于ios的。 根据你的需要,我建议分开取。 本文以安卓为例进行说明。 命令如下:

mkdirwebrtc _ androidcdwebrtc _ Android fetch---- nohookswebrtc _ androidgclientsync命令fetch和gclient,以及用于以下编译的gn

命令将引出webRTC源代码,并添加与Android相关的依赖关系,如android SDK/NDK。 整个项目约21G,主要占用第三方依赖。 在third_party目录中,约为17G,其中third_party/Android相关从属关系为6G。 所以,请留出充裕的存储空间来取出。

此外,对于基于浏览器的,命令如下:

mkdirwebrtccdwebrtcfetch---- nohookswebrtcgclientsync同样,将ios的fetch更改为fetch --nohooks webrtc_ios即可。

三种类型的webRTC基本代码基本相同。 只是平台依赖不同。

2编译在安卓的webRTC源代码中进行说明。

放下代码,使其成为src目录。

进入src目录,然后使用gn命令生成编译RTC android所需的文件。

$ gngenout/debug-- args=' target _ OS=' Android ' target _ CPU=' arm ' ',然后开始编译:

名为autoninja -C out/Debug的命令编译代码并生成so库。 不会生成安卓应用程序。 要生成demo apk,请使用以下命令:

auto ninja-cout/debugapprtcmobile此时进入out目录,有apk生成:

out/debug/apks/apprtcmobile.apk

ps:

如果ubuntu以前没有下载android sdk/ndk,请在源代码目录中设置sdk/ndk环境变量。

source build/Android/env setup.sh3使用AndroidStudio开发这里介绍的三种开发方式。

3.1公式推荐方式3.1.1要生成androiddemoapp源代码,请使用以下命令生成AndroidStudio可以打开的项目:

build/Android/grad le/generate _ grad le.py-- output-directory $ pwd/out/debug--target '/examples 3665292;

out/Debug/gradle

如果成功,编译会成功,但请注意,在2021-04-15左右的主控代码中,同步时会失败。

cannotresolveexternaldependencycom.Android.tools.build : aapt 2:4.1.1-6503028 becausenorepositories

显然,3.1.1的脚本似乎还不够,因为gradle文件没有仓库地址。 没关系。 请忍耐。 我们在最外层的build.gradle中添加以下语句。

all项目{ repositories }谷歌

() jcenter() }}

再Sync,应该过了,但是遇到了新的错误:
Entry name 'org/appspot/apprtc/R.class' collided
也就是说,有同样的R.class在不同的module出现。

官方讨论群,也有这个问题抛出来。
https://groups.google.com/g/discuss-webrtc/c/dtD7rXKeaHc

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

3.2 拷贝android demo源码 + rtc android java层源码+ RTC底层so

上面的方法,编译有问题,而且工程很多是相对路径,要看代码特别不方便。所以,我们可以自己把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库。
out/Debug/libjingle_peerconnection_so.so
在@ 3.2.2 建立的模块内,src/main下,建立jniLibs/armeabi,然后把上面的库,拷贝到目录中。

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

3.2.4 Sync并解决问题

app模块加上对新建模块的依赖,然后Sync,此时可能会有annotation找不到。那是因为RTC源码还依赖用android-support,而最新AS开发,一般都换成androidx的了,所以,两个模块都声明对androidx的依赖:
implementation ‘androidx.appcompat:appcompat:1.2.0’

然后做如下替换:
Edit->Find->Replace In Path

(ps: 当然了,你也可以自己加上android-support的库,也能Sync过)

3.2.5 收尾

一切顺利的话,就可以编译出apk了。这个工程,我已上传到github。项目地址:
https://github.com/newchenxf/AppRTCMobile

3.3 编译libwebrtc.aar + 创建新工程

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

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

3.3.1 编译aar

执行如下脚本:

./tools_webrtc/android/build_aar.py

这个脚本,会把所有平台的so都编译出来
DEFAULT_ARCHS = ['armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64']

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

最后的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,理论上可以编译成功。

4 运行

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

首先,最基本的RTC功能就是视频通话,那就需要2个端,需要把两个apk装在2个手机上。

跑起来怎么运行呢?
如这篇文章说的webRTC基本原理,运行demo还需要一个信令服务器。google官方的客户端demo,就要用google官方的信令服务器了。

google官方信令服务器,也是开源,项目地址:
https://github.com/webrtc/apprtc

Google自己线上也运行了这个服务器,地址是www.appr.tc。打开后是这样:

第三节编译的apk,默认就是连接到这个服务器。不信代码可以搜一下appr.tc。

apk使用这里随机创建的room id,理论上就可以建立通话。
不过,不过,我这没运行起来!有可能这个服务只是示例,实际需要自己本地部署。本地部署,可以参考AppRTC(WebRTC)服务器搭建。本地部署好了,记得apk的信令服务器地址代码,也改成你自己部署的服务器地址喔。本文不再展开。

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

总结

RTC Android的开发,如果是纯粹应用层开发,可以参考@3.3,编译官方aar使用即可,安全可靠。如果不想自己编译,只想同步最新的官方aar,那也行,在模块的gradle加如下依赖即可:
implementation 'org.webrtc:google-webrtc:1.0.+

如果想写死版本号,去官网查看具体版本号:
https://bintray.com/google/webrtc/google-webrtc

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

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

参考

[1] https://webrtc.googlesource.com/src/+/refs/heads/master/docs/native-code/development/index.md
[2] https://blog.csdn.net/H_O_W_E/article/details/105819423

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。