基于CentOS7.9编译Android10源码

背景

基于一台CentOS 7远程服务器,下载AOSP源代码Android 10,并且编译完成,运行安卓模拟器。由于后期开发面向系统级应用,为了方便调试,需要打开模拟器设备的可读/写权限。

工作内容有:

1、配置服务器环境

2、下载并编译源码

3、生成图形界面,运行安卓模拟器

4、设备可调试可读写

环境准备
安装python3
// 检查更新,安装系统包
yum update-check
yum update

通过repo下载安卓源代码要使用python3,服务器默认环境安装python2,因此需要从网上下载python3安装包,并切换。

// 安装python的依赖库
yum install gcc gcc-c++
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel make libffi-devel
// 下载python3
wget http://npm.taobao.org/mirrors/python/3.9.0/Python-3.9.0.tgz

// 解压
tar -zxvf Python-3.9.0.tgz  

// 进入文件夹
cd Python-3.9.0

// 配置安装位置到目录 /usr/local/python3 ..
./configure prefix=/usr/local/python3

// 安装
make && make install

安装成功后,在/usr/local/目录下面,会出现一个python3的文件夹
在这里插入图片描述

建立python3软链接

ln -s /usr/local/python3/bin/python3.9 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.9 /usr/bin/pip3

在这里插入图片描述

删除原有的python2链接,修改成python3链接

rm -rf /usr/bin/python
ln -s /usr/bin/python3 /usr/bin/python

在这里插入图片描述

由于CentOS系统的yum指令依靠python2来执行,此时也需要将相应的命令调整成python2

vim /usr/bin/yum
把 #! /usr/bin/python 修改为 #! /usr/bin/python2

vim /usr/libexec/urlgrabber-ext-down
把 #! /usr/bin/python 修改为 #! /usr/bin/python2

将系统python版本切换成python3之后,开始使用repo拉取AOSP源代码

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-10.0.0_r40

repo sync
编译源代码

安装JDK8

sudo yum install -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 java-1.8.0-openjdk-headless.x86_64

安装依赖库

sudo yum install -y libstdc++.i686 libstdc++-devel.i686 perl cpio expat-devel gettext-devel autoconf glibc.i686 glibc-devel.i686 zlib-devel.i686 libX11-devel.i686 ncurses-devel.i686 ncurses-libs.i686 gperf flex bison patch unzip

此时需要注意,前面讲到repo拉取AOSP源码需要使用python3,这里在编译的时候却需要使用python2,否则会出现类似错误error: system-qemu-x86.img

@ 为了方便在python2和python3之间进行切换,可以使用alternatives指令,将不同的python版本加入进来,灵活地进行切换

// 首先确认系统原始状态
alternatives --display python
// 将不同版本加入系统
alternatives --install /usr/bin/python python /usr/bin/python2 1
alternatives --install /usr/bin/python python /usr/bin/python3 2
// 加入系统后再显示确认
alternatives --display python
// 进行选择配置
alternatives --config python

在这里插入图片描述

一切准备就绪,开始编译AOSP源代码

source build/envsetup.sh
lunch 8
make -j16
运行模拟器
emulator 

模拟器运行期间,遇到如下问题,需要注意:

问题1:

qemu-system-x86_64: error while loading shared libraries: libpulse.so.0: cannot open shared object file: No such file or directory

解决:

yum install pluseaudio 

问题2:

emulator: ERROR: x86_64 emulation currently requires hardware acceleration!
Please ensure KVM is properly installed and usable.
CPU acceleration status: This user doesn’t have permissions to use KVM (/dev/kvm)

解决:

yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python python-virtinst libvirt-client virt-install virt-viewer

lsmod |grep kvm // 查询kvm是否挂载成功

systemctl start libvirtd
systemctl enable libvirtd

问题3:

qemu_ram_alloc_user_backed: call
Segmentation fault

解决:

sudo setenforce 0
加载图形界面

如上操作后,基于AOSP源代码的安卓模拟器已经可以正常启动,但是由于我们是远程连接CentOS服务器编译运行,所以我们现在还看不到模拟器界面,要求在本地能够看到模拟器界面,因此需要借助一些工具。

大致思路如下:

本地Windows10机器采用 MobaXterm 连接远程CentOS服务器,在服务器上运行 GUI 程序 (即 安卓模拟器),通过 SSH X11 Forwarding,转发到本地进行界面显示。

安装图形依赖库

sudo yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock

配置参数

sudo vim /etc/ssh/sshd_config

修改关键的两个参数

在这里插入图片描述

重启sshd服务

sudo systemctl restart sshd.service

在这里插入图片描述

重新登录SSH,看到如上4个绿色勾勾,则表示辅助工具安装完成,测试一下

xclock

在这里插入图片描述

运行xclock,可以看到服务器端的时钟界面出现在客户端Windows桌面上,说明图形通讯成功,

此时,我们再运行安卓模拟器,就可以看到界面效果了。

在这里插入图片描述

调试模拟器
安装adb工具

系统默认没有安装,需要下载包解压

cd /opt
mkdir andSDK

wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
unzip sdk-tools-linux-3859397.zip

将tools目录添加至环境变量

vim /etc/profile
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export PATH=$PATH:/opt/andSDK/tools/bin

然后依靠sdkmanager安装platform-tools工具

sdkmanager --list
sdkmanager "platform-tools"

将platform-tools目录添加至环境变量

vim /etc/profile
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export PATH=$PATH:/opt/andSDK/tools/bin
// 新添加地方
export PATH=$PATH:/opt/andSDK/platform-tools

重启登录后生效,可以使用adb命令

可读写权限

编译AOSP源码的时候,lunch选择userdebug版本,如果安卓版本较低,可以直接执行adb root && adb remount 即可。笔者使用的是安卓10,使用此方法会导致 remount failed,经过网上查阅大量资料和实际测验,使用如下方式可以成功将userdebug版本的安卓10模拟器remount

首先,我们需要使用"可写"的方式启动模拟器,谷歌官方对可写(-writable-system)是这样解释的:

在这里插入图片描述

emulator -writable-system 

​ 注:使用命令选项 -wipe-data 可以清除模拟器中数据。

直接参考谷歌说法,似乎remount会非常顺利,可实际情况是,这样启动的模拟器,依然没办法remount成功

在这里插入图片描述

接下来的几个步骤非常重要,每一步的顺序可能都会影响remount效果

// 1. 获取root权限 
adb root
// 2. 关闭校验
adb shell avbctl disable-verity
// 3. 关闭启动时验证
adb shell avbctl disable-verification
// 4. 重启模拟器
adb reboot
===== 等待几秒钟,模拟器会自动重启,如果一直卡黑屏就重复上面的步骤执行 =====
// 5. 重新获取root权限
adb root
// 6. 挂载
adb remount

在这里插入图片描述

在这里插入图片描述

最终可以看到:remount succeeded,这样我们就可以真正操作system分区下的文件,进行系统应用开发调试了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是centos7.9编译安装nginx的步骤: 1. 安装编译nginx所需的依赖库: ``` yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxslt libxslt-devel gd gd-devel perl perl-devel perl-ExtUtils-Embed ``` 2. 下载nginx源码包: 可以到官网(https://nginx.org/en/download.html)下载最新的稳定版nginx源码包。 3. 解压源码包: ``` tar zxvf nginx-xxx.tar.gz ``` 4. 进入nginx源码目录,执行以下命令进行编译和安装: ``` ./configure --with-http_stub_status_module --with-http_ssl_module make && make install ``` 其中,--prefix参数指定nginx安装目录,--with-http_stub_status_module参数启用状态页模块,--with-http_ssl_module参数启用SSL加密支持。 5. 配置nginx: 进入/usr/local/nginx/conf目录,编辑nginx.conf文件,进行配置。这里给出一个简单的配置文件示例: ``` user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /usr/local/nginx/conf/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root /usr/local/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/local/nginx/html; } } server { listen 443 ssl; server_name localhost; ssl_certificate /usr/local/nginx/conf/server.crt; ssl_certificate_key /usr/local/nginx/conf/server.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /usr/local/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/local/nginx/html; } } } ``` 其中,listen参数指定监听端口,server_name参数指定域名,root参数指定网站根目录,ssl_certificate和ssl_certificate_key参数指定SSL证书和私钥文件路径。 6. 启动nginx: 进入/usr/local/nginx/sbin目录,执行以下命令启动nginx: ``` ./nginx ``` 7. 检查nginx是否启动成功: 执行以下命令查看nginx进程是否存在: ``` ps -ef | grep nginx ``` 执行以下命令检查nginx监听的端口是否打开: ``` netstat -tlnp | grep nginx ``` 如果输出类似以下内容,则说明nginx已经成功安装并启动: ``` tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN xxxx/nginx tcp 0 0 :::443 :::* LISTEN xxxx/nginx ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值