腾讯云两种服务器方式的选择
第一种按量计费
- 选择
按量计费
的模式,可以后期动态调整配置 - 地区选择
中国香港
,不然等下没法repo直连谷歌 - 公网带宽选择
按使用流量
,拉到100Mbps,这里的流量计费模式是指,从服务器下载的流量才扣费,也就是后面我使用scp下载编译好的镜像到本地才扣费,使用高速带宽去repo不扣费 - cpu开始选择最低的,需要编译的时候再动态调整为高性能CPU
- 关机会扣硬盘费用,我选的300g硬盘,关机状态扣的0.15每小时
第二种竞价实例
- 选择
竞价实例
的模式,后期不能再动态调整,优势是费用为按量计费的一半(流量另计) - 地区选择
中国香港
,不然等下没法repo直连谷歌 - 公网带宽选择
按使用流量
,拉到100Mbps,这里的流量计费模式是指,从服务器下载的流量才扣费,也就是后面我使用scp下载编译好的镜像到本地才扣费,使用高速带宽去repo不扣费 - cpu开始直接选择最贵的,大概3元一小时
- 不支持关机不扣费
安卓官方教程
构建编译环境
服务器的ubuntu16.04使用的python是3.5版本的,低于repo要求的3.6,repo等下会失败,所以我不折腾了,云服务器操作系统选择ubuntu18.04
1.安装依赖包
sudo apt update
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
2.安装openjdk-8-jdk
sudo apt install openjdk-8-jdk
下载源代码
1.安装repo
- 确保您的主目录中有一个 bin/ 目录,并且它包含在您的路径中:
mkdir ~/bin
PATH=~/bin:$PATH
- 下载 Repo 启动器,并确保它可执行:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
2.同步源代码
mkdir your_dirname //创建一个工作目录
cd your_dirname
git config --global user.name "Your Name" // 复制即可
git config --global user.email "you@example.com" // 复制即可
// 这里需要去版本控制页面https://source.android.com/setup/start/build-numbers选择,后续还需要下载对应的驱动
// Build 标记 版本 支持的设备
// OPM2.171019.029 android-8.1.0_r20 Oreo Pixel 2 XL、Pixel 2、Pixel XL、Pixel、Nexus 5X
repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r20
repo sync
等待同步完毕,大概花了三小时。
下载驱动
wget https://dl.google.com/dl/android/aosp/google_devices-sailfish-opm1.171019.011-f3bafc8b.tgz
wget https://dl.google.com/dl/android/aosp/qcom-sailfish-opm1.171019.011-247af472.tgz
由于选择的是满速,所以比较小的基本都是秒下。
tar -zxvf google_devices-sailfish-opm1.171019.011-f3bafc8b.tgz // extract-google_devices-sailfish.sh
tar -zxvf qcom-sailfish-opm1.171019.011-247af472.tgz // extract-qcom-sailfish.sh
将解压后得到的extract-google_devices-sailfish.sh
和extract-qcom-sailfish.sh
复制到your_dirname
,并给与权限
chmod 777 *.sh
./extract-google_devices-sailfish.sh
./extract-qcom-sailfish.sh
出现Press Enter to view the license
后按回车,接下来一直按空格,直到出现让你输入I ACCEPT
,一定得是大写,错了就重来即可
源码编译
cd your_dirname
source build/envsetup.sh
lunch 24 // 或者先输入lunch 之后再选择版本,这里要注意对应版本
make -j48 // 由于我选购的是24核,所以就开了48个线程
等待编译结束,花了半小时
下载源代码到本地
先将home/ubuntu/your_dirname/out/target/product/sailfish
目录下面的img文件进行压缩
cp *.img /home/ubuntu/imgs //记得先创建相应的目录
cd imgs
7z a imgs.zip * // 大小是613M
scp ubuntu@host:/home/ubuntu/imgs.zip ./imgs.zip //这里会需要输入服务器的登录密码
制作源码包并刷机
去Factory Images for Nexus and Pixel Devices下载对应版本的"sailfish" for Pixel android-8.1.0_r20下载原厂镜像,这里就不要用服务器去下载了,再从服务器下载下来是需要扣费的,因为我们选择的是流量计费模式,所以使用本地的电脑下载即可,我使用的idm下载,也非常快
解压得到的系统镜像里面有 将zip包里面的所有img文件删除,并将我们编译后下载的img文件和android-info.txt一起再次打包成image-sailfish-opm2.171019.029.zip
(注意不要出现有文件夹的嵌套问题,也会提示你找不到android-info.txt,那就重新打包即可) 由于ubuntu下的权限问题,fastboot命令是有,但是使用flash-all.sh却提示找不到fastboot,所以我选择放到windows上来刷机了,有时间再试下kali,kali的root权限估计就没这些问题了。
手机进入bootloader后,USB链接然后运行flash-all.bat即可
如果出现了这个错,也是正常的,当然也可以修改一下flash-all.bat
把这个-w参数移除就好了。不移除也没关系,然后就可以愉快的搞机了遇到的问题(具体解决办法看报错)
遇到的第一个问题
FAILED: out/target/product/fugu/obj/STATIC_LIBRARIES/libedify_intermediates/lexer.cpp
/bin/bash -c "prebuilts/misc/linux-x86/flex/flex-2.5.39 -oout/target/product/fugu/obj/STATIC_LIBRARIES/libedify_intermediates/lexer.cpp bootable/recovery/edify/lexer.ll"
flex-2.5.39: loadlocale.c:130:_nl_intern_locale_data: ?? 'cnt ???
Aborted (core dumped)
[ 6% 3452/56388] //frameworks/base/libs/androidfw:libandroidfw clang++ ResourceTypes.cpp [linux]
ninja: build stopped: subcommand failed.
09:56:41 ninja failed with: exit status 1
去除所有本地化的设置,让命令能正确执行,bash 执行:
export LC_ALL=C
遇到的第二个问题(一开始我没看清楚,就只看最后一行,所以可能并不需要如下操作,遇到问题先看清楚吧)
make[1]: Leaving directory `/home/sunhz/sl8541e/out/target/product/sp8541e_srvm/obj/u-boot15'
make: Leaving directory `/home/sunhz/sl8541e/u-boot15'
[ 82% 3107/3782] Build hyb out/target/product/sp8541e_srvm/ob...h-hu.hyb 21515 unique nodes, 102669 total
ninja: build stopped: subcommand failed.
20:31:15 ninja failed with: exit status 1
- vim /etc/security/limits.conf 添加如下的行
# 解除服务器 所有用户文件数 进程限制
* soft nofile 10240
* hard nofile 10240
* soft noproc 10240
* hard noproc 10240
- 保存后,再输入ulimit -n 10240回车即可生效。
- 提示 ulimit 命令 执行(没提示也执行下)
sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"
再执行第二个步骤即可
4. 使用ulimit -a可以检查查看!
由于公众号不支持markdown的链接格式,我不整了,需要markdown文件的私聊我吧。
最后感谢肉丝姐的课程,感谢宝藏男孩乌师傅和TG的耐心解答~