一般我们编译源码,只需要在源码的根目录下执行三个命令就行
. build/envsetup.sh 或者source build/envsetup.sh
lunch 选择编译目标
make -j60
make 不带参数的编译方式是直接编译整个系统,我们也可以使用make带模块名或者使用mmm等命令单独编译某个模块。
首先找到对应模块的名称
Android.bp
android_app {
name: "MtkSettings",
overrides: [
"Settings",
],
Android.mk
LOCAL_PACKAGE_NAME := MtkSettings
LOCAL_OVERRIDES_PACKAGES := Settings
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
一些其他的模块或者是无源码的apk对应的名称是LOCAL_MODULE变量的值,具体看对应的Android.mk和Android.bp文件
单独编译Settings
make MtkSettings
或者使用 mmm vendor/mediatek/proprietary/packages/apps/MtkSettings/
可以看到out目录下的MtkSettings.apk文件修改时间是更新了的。
编译完成后打包刷机
有一点需要注意的是,在Android10及更高版本将system.img、vendor.img、product.img整合到super.img中,刷机也是用的super.img,单独编译完成后你需要重新生成system.img和super.img
生成system.img
make systemimage
生成super.img
out/host/linux-x86/bin/build_super_image -v out/target/product/{PROJECT_NAME}/obj/PACKAGING/check-all-partition-sizes_intermediates/misc_info.txt out/target/product/{PROJECT_NAME}/super.img
如果刷机后开机,在logo界面反复重启,需要重新生成vbmeta_system.img
生成vbmeta_system.img
out/host/linux-x86/bin/avbtool make_vbmeta_image --algorithm SHA256_RSA2048 --key device/mediatek/system/common/system_prvk.pem --padding_size 4096 --rollback_index 0 --include_descriptors_from_image out/target/product/{PROJECT_NAME}/system.img --include_descriptors_from_image out/target/product/{PROJECT_NAME}/product.img --output out/target/product/{PROJECT_NAME}/vbmeta_system.img
单编模块
make后接LOCAL_PACKAGE_NAME或者LOCAL_MODULE,如果编译模块对应的是Android.bp那就去找对应的name值
通过out/build-full_$(PROJECT_NAME).ninja 这个文件可以找到各种image的生成命令。

721

被折叠的 条评论
为什么被折叠?



