技术标签: webrtc
首先下载depot_tools
按官方教程来
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ export PATH=/path/to/depot_tools:$PATH
设置depot 的环境变量然后走 fetch webrtc_android的脚本 看官方链接https://webrtc.googlesource.com/src/+/main/docs/native-code/android/
$ fetch --nohooks webrtc_android $ gclient sync
这步骤操作完后会产生这两个目录
.gclient # A configuration file for you source checkout
src/ # Top-level Chromium source checkout.
首先运行下一些相关依赖
./build/install-build-deps.sh --android
Make sure your current working directory is src/ of your workspace. Then run:
$ gn gen out/Debug --args='target_os="android" target_cpu="arm64"'
如果编译debug版本加上下面这些参数
gn gen out/Debug --args='target_os="android" target_cpu="arm64" is_debug=true symbol_level=2 android_full_debug=true'
然后 autoninja -C out/Debug
You can specify a directory of your own choice instead of out/Debug
, to enable managing multiple configurations in parallel.
target_cpu="arm64"
target_cpu="x86"
target_cpu="x64"
$ autoninja -C out/Debug
弄完后生成能导入android studio的gradle依赖 用官方推荐的有个坑加上--canary会出错 去掉了这个参数
./build/android/gradle/generate_gradle.py --output-directory $PWD/out/Debug --target "//examples:AppRTCMobile" --use-gradle-process-resources --split-projects
然后编一个debug版的包
首先在
./build/toolchain/android/BUILD.gn 里注释这几行
...
template("android_clang_toolchain") {
...
_prefix = rebase_path("$clang_base_path/bin", root_build_dir)
cc = "$_prefix/clang"
cxx = "$_prefix/clang++"
ar = "$_prefix/llvm-ar"
ld = cxx
readelf = _tool_prefix + "readelf"
nm = _tool_prefix + "nm"
# 注释掉下面两行配置,即可实现 unstrip
# strip = rebase_path("//buildtools/third_party/eu-strip/bin/eu-strip",
# root_build_dir)
# use_unstripped_as_runtime_outputs = android_unstripped_runtime_outputs
...
}
...
然后编译脚本加两个参数
gn gen out/Debug --args='target_os="android" target_cpu="arm64" is_debug=true symbol_level=2 android_full_debug=true'
然后 autoninja -C out/Debug
android studio应用的时候同步更改
...
android {
...
buildTypes {
...
debug {
...
debuggable true // 必须设置为 true
jniDebuggable true // 必须设置为 true
minifyEnabled false // 必须设置为 false
}
}
...
packagingOptions {
...
// 如果不设置 doNotStrip,编译出来的安装包还是会丢失调试信息;
// 因为我们只编译了 arm64-v8a 架构的包,所以只需要配置这一行即可
doNotStrip "*/arm64-v8a/*.so"
}
}
...
debug llvm的路径还得配置下
参考链接代码片段_webRTC Android源码拉取与编译 https://webrtc.mthli.com/basic/webrtc-breakpoint/
webrtc android studio 断点调试 so debug configuration 选上so的地址 到jnilibs目录下 然后
在java层打一个断点 走到nativeXX方法的时候切到lldb debug 点这里暂停
/home/denghg/sourceCode/android_webrtc/dhg_AppRTCMobile/rtc_framework/src/main/jniLibs
到上面为止可以打上lldb命令行的debug了 然后还需要在android studio里直接图形化打c++的断点需要设置两个点 一个是symbol directories 到jni的目录
令一个是映射下源码路径 (我这是直接copy源码到rtc_framework路径下的也可以直接映射源码
下次试)
把webrtc的源码拷贝到rtc_framework/src/main 下面大概5G方便打c++的断点 [项目结构如图]
settings set target.source-map ./ /home/denghg/sourceCode/android_webrtc/dhg_AppRTCMobile/rtc_framework/src/main/src
附一张断点图
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数