抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

跟大佬学习了一下类原生的编译,记录一下过程

准备工作

安装Ubuntu20.04
这就不细说了百度一堆
内存大于16G要不然有可能报错

搭建构建环境

参考谷歌文档https://source.android.com/setup/build/initializing#installing-required-packages-ubuntu-1804

安装依赖软件包

1
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

使用单独输出目录

正常编译完会在对应rom的out文件夹中,想修改路径用以下代码

1
export OUT_DIR=out_mytarget

安装repo

参考文档https://source.android.com/setup/develop#installing-repo
repo可能需要python可以提前装好

1
sudo apt-get install python

运行以下命令以使用您的 Linux 发行版中的官方软件包

1
2
sudo apt-get update
sudo apt-get install repo

我没装上,用的下面方法

安装repo tool

1
2
3
4
5
6
7
Make a directory where Repo will be stored and add it to the path
$ mkdir ~/bin
$ PATH=~/bin:$PATH
Download Repo itself
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
Make Repo executable
$ chmod a+x ~/bin/repo

验证repo是否安装成功

1
repo version

您会看到一个与下方内容相似的报告:

1
2
3
<repo not installed>
repo launcher version 2.15
(from /usr/bin/repo)

如果报告的repo launcher version编号为2.15或更高,则表明版本号正确,安装无误。
(from /usr/bin/repo) 表明是通过软件包进行安装的。
(from /home/<>/bin/repo) 表明是手动安装的。

到对应ROM的github跟着教程走,例如acme

为此rom创建一个文件夹

1
2
mkdir acme
cd acme

初始化repo

1
2
repo init -u https://github.com/AcmeUI/manifest.git -b taffy
repo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags

这里注意要选对版本,目前最新的是taffy,对应安卓13的版本

把设备相关的的包clone到项目中

1
2
3
4
5
6
git clone https://github.com/AcmeUI-Devices/android_device_xiaomi_cas-erofs device/xiaomi/cas
git clone https://github.com/AcmeUI-Devices/android_kernel_xiaomi_cas kernel/xiaomi/cas
git clone https://gitlab.com/Xayah/vendor_xiaomi_cas vendor/xiaomi/cas
git clone https://github.com/AcmeUI-Devices/android_hardware_xiaomi hardware/xiaomi
git clone https://github.com/AcmeUI-Devices/android_packages_apps_GCamGOPrebuilt packages/apps/GcamGOPrebuilt
//git clone https://github.com/ArrowOS-Devices/android_device_xiaomi_extras device/xiaomi/extras

开始编译

1
2
3
4
5
6
. build/envsetup.sh
lunch acme_cas-userdebug
#如果正常
mka bacon
#如果哪里报错或者修改了需要清理
mka clean

报错解决

找错误

首先需要找到错误,核心就是在一堆warning里找到Failed,比较费眼睛。需要往上翻log慢慢找,报错不会停,会被顶上去。
还可以去out文件夹里找verbose.log
少东西可以去lineage找找https://github.com/LineageOS

错误1

这里lineageos跑到一半遇到个错误
错误1
解决方法是按照图中报错到指定文件去删除错误行,这里是/device/xiaomi/cas/sepolicy/vendor/genfs_contexts文件删除两行
解决1

错误2

错误2
这次没找到报错代码,解决方法是在编译一次,用make bacon -j1跑一会儿停了再继续mka bacon,我遇到情况是到后期多线程经常失败需要用单线程跑
遇到137就这么跑就行了

错误3

有可能报错什么库没找到,按提示往上搜一下就出来了例如'openssl/bio.h' file not found

1
sudo apt install libssl-dev

错误4

报错xxx already defined by xxx
就是引用重复了,把去前面那个路径里把那段引用注释掉就行了

错误5

错误5
这个是缺少lineageos的资源文件device setting,很多类原生都是基于lineage演变过来的,去lineagegithub引用一份就行了
地址:https://github.com/LineageOS/android_packages_resources_devicesettings
按照之前的经验,参考上面那一堆clone放到package/resources/devicesettings目录下

知识点

mka和make的区别

mka是根据实际情况满线程跑
make可以指定线程数-j1代表线程数

评论