AOSP下载编译

130 阅读4分钟

linux环境:ubunto 18.04.5 8g内存+600g硬盘 安装下载代码所需工具 sudo apt install curl repo git 下载配置repo mkdir ~/bin/ curl mirrors.tuna.tsinghua.edu.cn/git/git-rep… -o ~/bin/repo chmod +x ~/bin/repo

vim ~/.bashrc 最后一行加入下面内容 export REPO_URL='mirrors.tuna.tsinghua.edu.cn/git/git-rep…' source ~/.bashrc

配置git环境,email和name配置成自己的名称 git config --global user.email “you@example.com” git config --global user.name “Your Name”

下载AOSP压缩包,使用科大源 curl -OC - mirrors.ustc.edu.cn/aosp-monthl… 解压 tar xf aosp-latest.tar cd aosp # 解压得到的 aosp 工程目录

这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录 同步所有目录: repo sync # 正常同步一遍即可得到完整目录 同步某分支: cd .repo/manifests.git # 进到git仓库描述目录 git branch -a | cut -d / -f 3 | grep android-12 #查看目标版本分支 cd aosp repo start android-12.0.0_r31 --all

坑点: 1.repo sync报错: stderr: error: Entry 'xxx.py' not uptodate. Cannot merge. 原因:需要更新repo版本 解决: cd .repo/repo git pull cd ../../ 再repo sync

2.已有仓库如何改用科大源 如果您已经从官方同步了 AOSP 仓库,现在希望使用科大的 AOSP 仓库,请修改 .repo/manifests.git/config ,将 url = android.googlesource.com/platform/ma… 修改成 url = git://mirrors.ustc.edu.cn/aosp/platform/manifest

3.如果下载时出现提示找不到Python的错误,请执行如下步骤: sudo apt install python2.7 sudo ln -s /usr/bin/python2.7 /usr/bin/python

代码编译 编译工具安装 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

编译代码 cd ~/work/android/aosp/ source build/envsetup.sh 下面选择自己想要的版本,如果想要启动模拟器的话,要选择sdk开头的,比如aosp_car_x86_64-userdebug是无法启动模拟器的,sdk_car_x86_64-userdebug 可以启动模拟器 lunch sdk_car_x86_64-userdebug m -j4

启动模拟器 emulator -verbose -gpu swiftshader_indirect -memory 4096 -accel on -partition-size 1024 -cores 4 -skin polestar_2

坑点: 报错1 emulator: command not found错误 解决 启动前要先导入环境 source build/envsetup.sh 选择编译参数 lunch sdk_car_x86_64-userdebug

报错2 Ubuntu emulator: ERROR: No initial system image for this configuration! 单独编译systemimage make systemimage(耗时,大概需要7小时)

扫盲 mm(make module)命令用于编译当前目录下的模块。当你使用mm时,它会找到当前目录对应的Android.mk文件,并且只编译这个目录下定义的模块。 例如:进入到frameworks\base\services\目录,直接运行mm命令编译模块

mmm(make module matches)命令与mm类似,也是用于编译特定的模块,但它允许你指定一个路径。这意味着你可以从任何地方执行mmm命令,并提供要编译模块的路径作为参数。 例如,你可以在源码的根目录下运行mmm frameworks\base\services\来编译位于frameworks\base\services\目录下的模块。

make命令编译模块代码 模块:make Launcher3 代码路径: packages/apps/Launcher3 生成包目录:out/target/product/emulator_x86_64/system_ext/priv-app/Launcher3 adb install -t -d Launcher3.apk

模块:make SystemUI 代码路径:frameworks\base\packages\SystemUI 生成包目录:out/target/product/emulator_x86_64/system_ext/priv-app/SystemUI adb push SystemUI.apk /system_ext/priv-app/SystemUI 注:有的公司SystemUI在 packages/apps/目录下集成,生成apk的位置也会不同,需要看对应目录下是否有Android.bp或者mk之类的文件。比如原生代码在frameworks\base\packages\SystemUI目录有Android.bp文件,说明SystemUI就是在这个目录下集成。

模块:make services 代码路径:frameworks\base\services 生成包目录:out/target/product/emulator_x86_64/system/framework/services.jar adb push services.jar /system/framework/

模块:make framework (android 11之前的代码使用) 模块:make framework-minus-apex(android 11及其之后的代码使用) 代码路径:frameworks\base
生成包目录:out/target/product/emulator_x86_64/system/framework/framework.jar adb push framework.jar /system/framework/

模块:make framework-res 代码路径:frameworks\base\core\res 生成包目录:out/target/product/emulator_x86_64/system/framework/framework-res.apk adb push framework-res.jar /system/framework/ 注:建议先make framework在编译该模块,因为framework-res依赖framework

AIDEGen教程 blog.csdn.net/yubo_725/ar… yebd1h.smartapps.cn/pages/blog/… 以Setting为例 source build/envsetup.sh lunch aidegen Settings -i s 已经编译过了,那么可以加上-s参数 aidegen Settings -s -i s