高通安卓12--编译

1.编译流程

全部编译命令:

复制代码
source build/envsetup.sh

lunch //选择29,lito-userdebug

//lunch lito-user

bash build.sh dist -j32 2>&1|tee 1.log

执行完,会编译所有的镜像

其他编译命令(这是安卓内置命令)

(如果文件没生成,可以尝试删除一下之前的镜像文件)

复制代码
make aboot -- 编译 bootloader;

make bootimage -- 编译 kernel;

make systemimage -- 编译 system;

make userdataimage -- 编译 userdata;

make recoveryimage -- 编译 recovery;

mmm packages/apps/Contacts -- mmm 编译指定目录的模块,如编译联系人;

编译如果报错,可以使用

复制代码
make clean

编译结束,执行命令

复制代码
. meig_sparseimage.sh

会在 sparseimage 文件夹下生成分包文件以及 xml

当前高通平台的编译设计是,先在qssi lunch里编译system和vendor,再在lito lunch里编译其他,结束时打包成super.img

如果需要单独编译system.img,lunch时选择qssi,再使用make systemimage 生成的system需要在fastbootd(fastboot reboot fastboot)模式下才能刷入

2.镜像分包

编译完成之后,要把out下的所有数据拷贝到sparseimage下面

复制代码
cp out/target/product/lito/*.img sparseimage/

执行分包的命令,这个脚本只是拷贝了需要分包的文件,还有些文件没有一起搞过来

复制代码
./meig_sparseimage.sh

将sparseimage下的所有文件覆盖之前的内容

烧录,就可以启动了

3.编译命令

1.通过Android内置make命令编译

初始化编译环境

复制代码
source build/envsetup.sh

编译 system.img

复制代码
lunch qssi-userdebug

make target-files-package

编译除system.img外的其他img

复制代码
lunch xx-userdebug

make target-files-package

(如果文件没生成,可以尝试删除一下之前的镜像文件)

(这个方式要先在lunch的时候选择QSSI)

复制代码
make aboot -j8 -- 编译 bootloader;

make bootimage -j8 -- 编译 kernel;

make systemimage -j8 -- 编译 system;

make userdataimage -j8 -- 编译 userdata;

make recoveryimage -j8 -- 编译 recovery;

mmm packages/apps/Contacts -j8 -- mmm 编译指定目录的模块,如编译联系人;

单独编译内核

如果之前已经编译过,可能需要单独清理一下

首先进入kernl源码目录

执行

复制代码
make mrproper

再退回到根目录,执行

复制代码
source build/envsetup.sh

lunch

make

2.高通提供的build.sh脚本编译

初编译所有img,包括system和其它img

复制代码
source build/envsetup.sh

lunch XX-userdebug

./build.sh dist -j24 2>&1|tee 1.log

编译system.img,产物在qssi目录下

复制代码
source build/envsetup.sh

lunch xx-userdebug

./build.sh dist qssi_only -j24 2>&1|tee 1.log

编译super.img

复制代码
source build/envsetup.sh

lunch xx-userdebug

./build.sh dist merge_only -j24 2>&1|tee 1.log

编译其它img,例如vendorimage,如果不指定会编译其它所有img,产物在XX目录下

复制代码
source build/envsetup.sh

lunch xx-userdebug

./build.sh vendorimage dist target_only -j24 2>&1|tee 1.log

命令说明

--dist,这个选项是用来生成OTA包的;

--qssi_only,这个选项是用来编译qssi的;

--target_only,这个选项是用来编译用户自己的target;

--merge_only,如果一起传入的参数有dist就生成ota,如果支持动态分区就会生成动态分区;

什么是qssi,什么是用户自己的target:

qssi是qcom single system image,就类似原来的system分区。

用户自己的target,就类似原来的vendor分区。

AndroidQ以前只用lunch自己项目的target就可以进行编译了,现在随着Treble架构的强制推行,system和vendor要强制解耦了。

快速编译

第一次编译后最好不要make clean,不然部分编译还是很慢,如果担心部分编译无法更新编译生成的文件,那么就先在out目录里面把obj文件夹中相关的.o文件和镜像目录中的文件删除,再部分编译,就一定会更新了。

相关推荐
HLC++10 小时前
Linux的进程间通信
android·linux·服务器
爱笑鱼13 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
爱笑鱼14 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
壮哥_icon15 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
用户693717500138416 小时前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端
蝉蜕日记16 小时前
AccumuPDF高级版 v2.57 | 视图文转换PDF,合并分割压缩
android·智能手机·pdf·生活·软件需求
吐了啊取名字太难16 小时前
美颜系统AI修图本地跑并支持Mac、win、安卓、iOS不卡顿
android·人工智能·windows·数码相机·mac·ai编程
阿pin18 小时前
Android随笔-Retrofit
android·retrofit
想取一个与众不同的名字好难18 小时前
安卓自定义颜色选择器
android
我命由我1234518 小时前
Android 开发问题:java.lang.NoSuchMethodError:No virtual method readAllBytes()
android·java·java-ee·kotlin·android studio·android-studio·android runtime