Android 源码编译笔记

一、下载源码

1、安装Repo
	确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:

		mkdir ~/bin
		PATH=~/bin:$PATH

	下载安装curl:
		https://blog.csdn.net/qq_31458537/article/details/87914443

	下载 Repo 工具,并确保它可执行:

		curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
		chmod a+x ~/bin/repo

	下载安装git:
		https://blog.csdn.net/qq_42690368/article/details/82319238
		
		git config --global user.name "zhangjianliang"
		git config --global user.email "[email protected]"
		
	根据用户名及邮箱生成密钥(该密钥会用在该账号中):ssh-keygen -t rsa -C "[email protected]"
	
		/home/admin/.ssh/id_rsa
		
	下载android源码:	
		repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.2_r28
		
	搭建编译环境:
		https://source.android.com/source/initializing

二 下载驱动(2个),上传到源码根目录,解压执行驱动的sh文件

解压驱动文件,得到两个可执行文件.
把可执行文件移到源码根目录, 执行可执行文件

三 开始编译

    单独模块编译(假设编译 系统 Setting):
    	source build/envsetup.sh
    	mmm packages/apps/Settings/

单独模块编译后刷入系统:

 取消校验
	adb disable-verity
重启手机

刷入编译后的模块		
	source build/envsetup.sh
	lunch 21
	mmm packages/apps/Settings
	adb root
	adb remount
	adb shell rm -rf /system/priv-app/Settings
	adb shell am start com.android.settings/.Settings
	adb push out/target/product/bullhead/system/priv-app/Settings /system/priv-app/
	adb shell am start com.android.settings/.Settings

编译完的安装:把编译完的包下载到本地,执行以下命令

		adb reboot bootloader
		fastboot flash boot boot.img
		fastboot flash recovery recovery.img
		fastboot flash system system.img
		fastboot flash userdata userdata.img
		fastboot flash cache cache.img
		fastboot flash vendor vendor.img
		fastboot reboot

全编译

source build/envsetup.sh
lunch 21
export LC_ALL=C
m -j8
#在后台运行
#nohup m -j8

单独编译模块

生成可导入 Android Studio 调试的项目:

//准备编译命令
source build/envsetup.sh
//单独编译 idegen 模块
mmm development/tools/idegen/
//生成 Android Studio 的配置文件
development/tools/idegen/idegen.sh
在源码根目录执行命令
sh development/tools/idegen/idegen.sh
会在源码根目录生成 android.ipr
最后导入源码根目录的 android.ipr 

最终生成可导入 android studio 的项目

重新编译源码时,清除缓存:

1、在源码目录的根目录下,make clobber 删除之前编译生成的所有文件,方便重新编译
2、再退回到根目录,执行sourcebuild/envsetup.sh,lunch,make.

擦除刷入的旧模块

fastboot erase system
fastboot erase userdata
fastboot erase cache
...

添加系统API或者修改@hide的API后,需要执行

make update-api,然后再make

四、系统差分升级

系统编译完之后,执行命令生成ota差分包
差分升级包,减少系统升级流量损耗
	source build/envsetup.sh
	lunch 21
	make otapackage
	 生成文件的目录:out/target/product/msm8974/obj/PACKAGING/target_files_intermediates/
差分包的制作
	./build/tools/releasetools/ota_from_target_files  -i     <差分包名>。

五、系统签名

生成系统签名、对系统ota包签名、对系统应用签名

1.系统如何制作独立的签名
	build/target/product/security ,有个readme,里面有个链接 ,有批量生成key的方法,可以生成pk8 与 x509文件,还有叫你系统怎么用这个签名
	遇到了生成的时候报了个错,导致x509没有生成,原因是填写的参数 cn地区之类的长度超过两位导致

2.生成签名后,把releaseKey.xxx 重命名为 testkey.xxx,把所有签名移到 /build/target/product/security 覆盖系统默认签名

3.配置环境
source build/envsetup.sh
lunch aosp_bullhead-userdebug
4.生成系统编译文件
make otapackage
生成文件的目录	out/target/product/msm8974/obj/PACKAGING/target_files_intermediates/

5.差分包的制作
build/tools/releasetools/ota_from_target_files  -i     <差分包名>。

使用生成的系统签名


六、系统应用常驻后台

系统应用常驻后台

application 配置 android:persistent,验证后台常驻效果
使用后台打印日志验证

系统应用、系统签名放置

七、内置app

需要注意的是,如果app使用的 so 是32位,系统是64位,需要在 Android.mk 中配置 LOCAL_MULTILIB := 32
查看系统位数:adb shell getprop ro.product.cpu.abi

你可能感兴趣的:(笔记)