webRTC原理及Android使用WebRTC实现P2P通信
webRTC原理及Android使用WebRTC实现P2P通信1 背景在WebRTC(Web Real-Time Communication)出现之前,用户想要实现音视频聊天,流媒体播放等实时通信,需要依赖于专有协议、客户端软件或浏览器插件,例如在浏览器上通过在浏览器上安装Flash插件实现音视频采集和传输,然后用RTMP协议将音视频流传输到服务器中转,再由服务器分发给接收端。这种方式存在延迟较高,且需安装插件,兼容性等问题。 直到 2011 年,Google 收购了专注音视频处理技术的 GIPS(Global IP Solutions)公司,将其核心技术开源和整合为 WebRTC,并凭借浏览器原生支持(无需插件,自带音视频处理),低延时(P2P点到点通信)等特性,才彻底改变了实时通信的开发方式。 如今webRTC虽然名字带web,但是早已不仅仅局限于浏览器,已经广泛支持桌面端、移动端甚至物联网设备。 2 关键概念和原理WebRTC是一种支持p2p的实时通信技术,那么什么是P2P? 2.1 P2P传统的中继通信模式中,数据需通过服务器进行转发(如:客户端 A → 中继服务器 → 客户端 ...
Linux驱动基础——基于 goldfish 内核的驱动开发与测试
Linux驱动基础——基于 goldfish 内核的驱动开发与测试1 前言在上篇《Ubuntu 下编译 goldfish 内核并使用模拟器运行》中,我们成功编译了goldfish内核,今天我们在这个环境上尝试编写和编译几个简单的驱动,初步了解Linux驱动开发的基本流程和原理。 在 Linux 系统中,内核是操作系统的核心负责 CPU 调度、进程管理、内存管理、设备管理、文件系统、网络通信等一系列底层资源的管理与调度。与之对应的是用户空间,这里运行着各种应用程序、库文件和系统服务。 出于安全性和稳定性的考虑,Linux 将内核空间和用户空间进行了严格隔离。用户空间程序无法直接访问内核空间数据,只能通过系统调用这一受控的机制向内核请求服务。 内核模块是内核的一种可扩展机制,允许我们将功能以模块的形式编译,并在运行时动态地加载或卸载,而无需重启系统。内核模块可以在需要时加载到内核,也可以在不需要时移除,从而提升了系统的灵活性和可维护性。当然,也可以选择直接将模块静态编译进内核映像。 驱动则是一种特殊类型的内核模块,专门负责管理和控制特定类型的硬件设备。驱动通常会在 /dev 目录下创建对应 ...
Ubuntu 下编译goldfish内核并使用模拟器运行
Ubuntu 下编译goldfish内核并使用模拟器运行前言要学习Android Framework开发,通常需要下载AOSP(Android Open Source Project)项目。AOSP包含了Android操作系统的全部源代码,但并不包含内核部分。若需进一步学习驱动开发,则需另行下载内核源码。 需要特别说明的是,Android系统使用的内核并非原生Linux Kernel,而是基于Linux内核进行了深度定制,加入了进程间通信(Binder)、低内存管理等Android专属特性。内核有很多版本,我们可以选择谷歌官方维护的Android通用内核(Android Common Kernel, ACK),也可根据实际设备情况选用厂商开源的内核(需注意部分设备可能要求解锁Bootloader)。 简单起见,本文选用goldfish内核作为学习对象。该内核是Android模拟器专用版本,特别适合在虚拟环境中进行驱动开发测试。 值得注意的是,虽然Android基于Linux内核构建,但是AOSP是不需要和内核编译到一起的,而是在设备启动时,Bootloader 负责选择并加载内核,然后 ...
使用apktool实现一个apk修改和打包脚本
使用apktool实现一个apk修改和打包脚本1 背景最近接到一个需求,app有多个服务器环境,上传发布时可以根据所处环境生成对应的配置参数以供app初始化时使用,我们选择的方法是在服务器对上传的apk进行解包插入配置文件并重新打包及签名,再发布。主要用到apktool及签名工具apksigner的相关知识,顺便了解一下如将java代码打包成可执行程序及脚本的使用。 2 用到的工具2.1 apktoolApktool 是一个开源的逆向工程工具,用于 反编译(解包)和回编译(重新打包)Android APK 文件,这里会用到其中的解包和打包命令 。安装方式 从apktool官网下载最新版的jar文件,重命名为apktool.jar 下载Apktool的启动脚本(右键保存),其作用是简化运行 Apktool 的命令行调用。不同平台的脚本不同,window上是apktool.bat,linux则是不带后缀的apktool。 将jar文件和脚本文件保存至自定义的目录,然后将该路径添加到配置环境变量Path中,也可以复制到Path默认的目录,windows是 C://Windows,Linux ...
Ubuntu 下编译LibreOffice Android版
前言LibreOffice 是一套开源且免费的办公软件,类似于 Microsoft Office 和 Apache OpenOffice。它包括文字处理、电子表格、演示文稿、绘图、数据库等功能模块。LibreOffice可执行于各种系统平台,包括Microsoft Windows、MacOS及GNU/Linux,LibreOffice 也提供了 Android 平台的版本,支持Office文档的浏览和少量的编辑功能。本文介绍在Ubuntu下编译LibreOffice 的Android 版本,生成apk及so文件。 本文所用编译环境: Ubuntu 22.04.3 LTS, 64Bit gcc/g++ 12.3.0,LibreOffice 要求版本12或以上 jdk 17.0.10,根据Gradle版本而定 ndk 25.2.9519653,LibreOffice 要求版本23~25 1 下载1.1 克隆源代码在LibreOffice中文社区源码介绍页面可以获取到仓库地址,除了官方仓库外,也提供了国内镜像。使用git clone命令将源码下载下来,源码非常大, ...
基于nginx搭建v2ray服务端配置vmess tls websocket
前言 vps:一台在墙外的vps服务器,它能自由上网 v2ray:负责你的网络与vps之间的网络通讯 VMess:一个加密传输协议,通常作为 V2Ray 客户端和服务器之间的桥梁。 nginx:作为web服务器,负载均衡服务器,邮件服务器等,本例用到web服务器功能部署网站 websock:一个传输协议,支持全双工,大概用来客户端与服务端中传输数据包 tls:传输层安全协议,用来加密http 流程:{浏览器} <–(socks) {V2Ray 客户端 inbound <-> V2Ray 客户端 outbound} <–(VMess)–> {V2Ray 服务器 inbound <-> V2Ray 服务器 outbound} <–(Freedom)–> {目标网站}–> 123456flowchart LR; A[用户浏览器] -->|请求访问| B(域名解析到VPS IP); B -->|443端口| C[Nginx]; C -->|WebSocket| D[v2ray]; D ...
Ubuntu 下编译AOSP源码
前言AOSP是谷歌维护的一个开源项目,它包含了Android系统的源码和功能。 狭义的Android系统是谷歌的一个商标,除了包括asop的源码部分,还包括手机处理器、摄像头等硬件所需的固件等内核设备驱动,以及要谷歌移动服务(GSM、如Chrome、Google Play等等。其他第三方厂商在AOSP的基础上构建出自己的RoM,获得Android商标的授权后也可以标注Android的字样。 编译完AOSP后,可以导入Android studio进行阅读学习、修改和调试。谷歌提供了的nexus和pixel手机的硬件驱动代码,它们是使用AOSP作为原生系统,因此我们如果有nexus和pixel手机也可以对AOSP进行定制并刷到设备上。 编译配置要求 16 GB 以上的内存,越大越好,这里是指构建过程的可用内存, Google 建议提供 64 GB。 400G以上可用磁盘空间。代码占150-200GB,构建产物占150多G,重复构建占用更多 Ubuntu 18.04 以上,64位。官方现已不再支持在 Windows 或 MacOS 上进行构建。 以下以获取android-13.0.0_ ...
Ubuntu下使用GoMobile构建AndroidLibXrayLite/AndroidLibV2rayLite的arr包
前言V2Ray 是 Project V 项目下的一个核心工具,主要负责网络协议、路由等网络通信功能的实现。Xray 是由 V2Ray 项目衍生出来的一个全新的网络代理工具,其目标是对 V2Ray 进行优化和改进,以提供更好的性能和功能。 V2Ray和Xray主要是使用 Go 语言( Golang)编写的。Go 是一种由 Google 开发的开源编程语言,它提供了丰富的标准库和并发支持,非常适合构建高性能的网络应用程序。go语言的项目可以通过Gomobile库将Go代码构建为可以在移动平台上运行的原生应用程序或依赖库。 AndroidLibV2rayLite和AndroidLibXrayLite 就是基于V2Ray和Xray的 Android 库,通过这个库,可以在 Android 应用中集成 V2Ray(Xray) 功能,实现网络代理、加密通信等功能。 本文构建环境 Ubuntu 22.04.3 LTS Desktop 64-bitopenjdk 17.0.10Android sdk 34, NDK 26.2.11394342go 1.22.1 1 搭建环境1.1 安装jdk1 ...
Ubuntu下编译envoy mobile
Ubuntu下编译envoy mobile前言Envoy 是一个开源的高性能、可扩展的代理服务,最初由 Lyft 公司开发。它设计用于处理现代的微服务架构中的网络通信,并提供了许多功能,包括负载均衡、服务发现、路由、认证、授权等。Envoy 被广泛用于构建和部署云原生应用程序以及微服务体系结构。 Envoy Mobile 是 Envoy 的移动端版本,专门设计用于在移动应用程序中处理网络流量。envoy 提供了官方依赖,不过提供的api有限,如果需要对其进行定制则需要重新编译构建aar 1api("io.envoyproxy.envoymobile:envoy:0.5.0.20231016") 本文将介绍在Linux下编译envoy mobile,生成aar文件的流程。 1 使用环境硬件要求 内存8G以上,建议12G以上 磁盘空间50G以上,建议使用SSD 科学上网(可访问google、github等网站) 编译环境 Ubuntu 22.04.3 LTS Desktop 64-bit Java 8 以上 Android SDK Platform 30 Androi ...
ubuntu 下部署envoy 并作为前端代理
前言Envoy 是一个开源的高性能、可扩展的代理服务,最初由 Lyft 公司开发。它设计用于处理现代的微服务架构中的网络通信,并提供了许多功能,包括负载均衡、服务发现、路由、认证、授权等。Envoy 被广泛用于构建和部署云原生应用程序以及微服务体系结构。本文将通过将envoy作为前端代理来演示envoy的安装、配置和简单使用。 本文使用环境 Ubuntu 22.04.3 LTS Desktop 64-bit 1 安装envoy 编译比较复杂,可以使用Envoy 社区提供的docker镜像和getenvoy项目,不过getenvoy所使用的版本比较老。在Linux下最简单的方式还是直接使用官方的envoy预编译二进制文件。 1.1 下载 从Envoy 的 GitHub 发行版页面下载 Ubuntu 的最新版的envoy预编译二进制文件,这里选择“envoy-1.28.0-linux-x86_64”1https://github.com/envoyproxy/envoy/releases 1.2 安装envoy新建项目目录,将文件复制到该目录下(本文使用/home ...