Android12 源码下载、编译、刷机、单编调试Framework

这篇具有很好参考价值的文章主要介绍了Android12 源码下载、编译、刷机、单编调试Framework。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

深入学习Android系统框架开发前,首先要搭建Android工程的开发环境(建房子前先搞地基),详细的配置要求和操作步骤见官网说明 Establishing a build environment,本文也汇总了Android 12工程源码的下载、编译和刷机的实操过程。

在开始代码下载之前,先强调下源码编译对硬件/软件的要求:

硬件要求:

  • 如果是 Android 2.3.x (Gingerbread) 及更高版本(包括 master 分支),需要 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。
  • 如果要检出代码,至少需要 250 GB 可用磁盘空间;如果要进行构建,则还需要 150 GB。如果要进行多次构建,则需要更多空间。
  • 至少需要 16 GB 的可用 RAM,但 Google 建议提供 64 GB。

软件要求:

  • 系统要求安装Ubuntu 18.04.1及以上版本。
  • OpenJDK

详细说明可参考官网:Requirements

个人建议:如果电脑配置不够,可以用云电脑产品来代替,比如“天翼云电脑”,可以选择超强的配置和Ubuntu系统,实现Study Work Anywhere。调试终端可以使用模拟器,但有条件的话推荐用Google发布的终端设备来调试,如Pixl3L、Pixl4,闲鱼上很多。

1. 代码下载

官方教程参考Source control tools,Downloading the source,包含源码管理工具Git,Repo,Gerrit,Android Code Search,Android Studio,Android Debug Bridge (ADB)的说明和源码下载。在国内因为墙而导致无法初始化repo,本教程以国内的镜像站点为例子,比如科大 AOSP 镜像站点,或者北京外国语大学开源软件镜像站。

如官方文档所介绍,AOSP各个模块源码通过Git来托管,如果要下载整个工程,需要脚本工具来集中同步和管理所有模块的Git(代码仓库),Repo工具的作用就是如此。

1.1 下载Repo工具

mkdir ~/bin
PATH=~/bin:$PATH
curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo

1.2 安装和配置Git

sudo apt install git
git config --global user.name "xxxx" 
git config --global user.email "xxxx@example.com"

配置好git后可以通过git config --list查看是否成功,比如我的:

user.name=quexl1
user.email=quexl1@xxxx.cn

1.3 创建工程目录

在本地建立一个工作目录(名字任意,我买的机器是Pixel4,代号是flame,这里以 aosp_12.0_flame 为例子)

mkdir aosp_12.0_flame
cd aosp_12.0_flame

1.4 初始化Repo仓库

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-12.1.0_r11
## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'

如不后面不带"-b",默认会下载所有的代码,默认分支是 master。
我这里同步最新的12.0版本,因此使用的分支是:android-12.1.0_r11

这里需要注意,默认的 repo 使用的地址是 REPO_URL = ‘https://gerrit.googlesource.com/git-repo’ ,这里我们需要修改 REPO_URL,否则会出现无法下载的情况

  • 方法1:在你的 rc 文件里面,加入一条配置即可:REPO_URL=”https://gerrit-googlesource.proxy.ustclug.org/git-repo"
  • 方法2:直接打开 ~/bin/repo, 把 REPO_URL 一行替换成下面的: REPO_URL = ‘https://gerrit-googlesource.proxy.ustclug.org/git-repo’

下载好 .repo 之后会有下面的信息

➜  Android12 repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
Downloading Repo source from https://gerrit-googlesource.proxy.ustclug.org/git-repo

... A new version of repo (2.17) is available.
... You should upgrade soon:
    cp /home/gracker/Code/Android12/.repo/repo/repo /home/gracker/bin/repo

Downloading manifest from git://mirrors.ustc.edu.cn/aosp/platform/manifest
remote: Enumerating objects: 91965, done.
remote: Total 91965 (delta 0), reused 0 (delta 0)

Your identity is: quexl1 <quexl1@xxxx>
If you want to change this, please re-run 'repo init' with --config-name

repo has been initialized in /home/aosp_12.0_flame

1.5 同步代码

上面的步骤初始化 .repo 文件后,代码同步要执行 repo sync 来进行下载。由于镜像站的限制和下载过程中可能会遇到的问题,建议大家用 -j4 来下载

repo sync -j4

2. 驱动下载

代码下载完成之后,我们先不着急编译,如果要想在真机上跑,需要下载一些厂商闭源的驱动文件,这样后续编译的代码才可以跑到真机上,此处对应的 官方文档

2.1 下载对应机型的驱动

由于我同步的代码是android-12.1.0_r11 分支,驱动程序需要在这里下载 https://developers.google.cn/android/drivers

以我的 pixel 4 为例,下载的代码是android-12.1.0_r11,TAG对应的驱动BUILD ID我们可以在这里查:https://source.android.google.cn/docs/setup/about/build-numbers,因此我需要下载的驱动是
android源码下载,环境搭建,android

点击 Link 下载两个文件,然后进行解压到代码根目录,然后执行 sh 脚本释放驱动到合适的位置,二进制文件及其对应的 makefile 将会安装在源代码树的 vendor/ 层次结构中。

2.2 驱动提取

下载的内容解压后,是两个 sh 文件,以我的 Pixel 4 为例,在代码根目录执行,使用 D 来向下翻页,直到最后手动输入 I ACCEPT

# 解压缩 extract-google_devices-crosshatch.sh
./extract-google_devices-flame.sh
# 解压缩  ./extract-qcom-crosshatch.sh
 ./extract-qcom-flame.sh

3. 代码编译

代码和驱动都下载好之后,就可以开始代码的编译工作了,由于新版本不再支持 Mac 编译,所以建议大家还是使用 Linux 来进行编译,推荐使用Ubuntu。

3.1 设置编译环境

官方文档:Establishing a build environment

Ubuntu 18.04 以上直接运行安装交叉编译依赖的工具:

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

注意如果apt-get找不到源,可以通过修改apt-get的源来解决,自行百度。也可以使用我这份源替换/etc/apt下的sources.list

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

sudo apt-get update //更新;

3.2 初始化编译环境

官方文档:Building Android

在工程源码根目录执行

source build/envsetup.sh

3.3 选择编译目标

lunch

会输出编译目标列表提供选择。

You're building on Linux

Lunch menu .. Here are the common combinations:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_barbet-userdebug
     4. aosp_bluejay-userdebug
     5. aosp_bramble-userdebug
     6. aosp_bramble_car-userdebug
     7. aosp_car_arm-userdebug
     8. aosp_car_arm64-userdebug
     9. aosp_car_x86-userdebug
     10. aosp_car_x86_64-userdebug
     11. aosp_cf_arm64_auto-userdebug
     12. aosp_cf_arm64_phone-userdebug
     13. aosp_cf_x86_64_auto-userdebug
     14. aosp_cf_x86_64_foldable-userdebug
     15. aosp_cf_x86_64_pc-userdebug
     16. aosp_cf_x86_64_phone-userdebug
     17. aosp_cf_x86_64_tv-userdebug
     18. aosp_cf_x86_phone-userdebug
     19. aosp_cf_x86_tv-userdebug
     20. aosp_cheetah-userdebug
     21. aosp_cloudripper-userdebug
     22. aosp_coral-userdebug
     23. aosp_coral_car-userdebug
     24. aosp_flame-userdebug
     25. aosp_flame_car-userdebug
     26. aosp_oriole-userdebug

选择自己机器的代号名称即可,我的Pixel 4的机器代号是flame,因此选择24。

在这里可以查看所有机型对应的代号:selecting-device-build

3.4 编译

执行make编译,可以选择12或者32线程编译。

make -j12

耐心等待编译成功之后,会有下面的输出

注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
[100% 777/777] Target vbmeta image: out/target/product/flame/vbmeta.img

#### build completed successfully (03:57 (mm:ss)) ####

4. 刷机

编译好之后下面开始刷机,以我的测试机器 Pixel 4 为例,依次执行下面的命令

adb reboot fastboot

# 等待手机进入 fastboot 界面之后
fastboot flashall -w

# 刷机完成之后,执行 fastboot reboot 长期系统即可
fastboot reboot

注意:fastboot flashall -w命令如果在工程外面执行,要配置$ANDROID_PRODUCT_OUT目录环境

刷机截图如下:
android源码下载,环境搭建,android
之后手机会自动重启,然后进入主界面,至此,我们的代码下载-编译-刷机的这部分就结束了。

如果在刷机的过程中遇到问题,可刷官方的刷机包拯救 :https://developers.google.cn/android/images

5. 挂载system分区

DM-verity 是Android 系统安全的重要部分,它能保证Android 的 vendor 和 system 镜像文件中的内容是真实可靠的。所以如果打开了DM-verity功能那么如果我们通过fastboot修改android系统的system分区或者vendor分区,那么DM-verity校验时就会出错,因此在fastboot之前需要先将DM-verity解锁。
adb root
adb reboot bootloader
fastboot devices
fastboot flashing unlock
fastboot reboot(稍等系统重启完毕)

此时发现oem选项已经变灰色了。
adb root
adb disable-verity
adb reboot
adb root
adb remount可以成功remount /system为读写模式

注意:fastboot 需要安装对应的驱动才可以使用。

好了,以上就是Android 12 源码下载、编译和刷机的全过程。
如果想在Pixl4上搭建Android13的开发环境,只需要在上面的步骤中替换源码的分支,以及对应的Google和厂家驱动即可。

flame Android13(T)
build id:TP1A.221005.002.B2
source branch:android-13.0.0_r31

6. 单编译Framework模块

在平时的开发中如果我们修改了系统框架,可以重新生成系统镜像并替换查看效果。如果修改涉及的模块比较独立,比如framework和services,可以通过单编Framework模块的方式,提高开发效率,方法如下。

单编framework.jar并替换

首先修改完framework/base/core部分的代码后,通过以下命令编译framework.jar

make framework-minus-apex

编译出framework.jar后,先用第五步的方法执行remount。然后把framework.jar push到system/framework/下面,同时还要删除这个目录下面的oat,arm,arm64三个目录(不删除会一直卡在开机动画),最后再运行下面的命令重启zygote,这样新替换的framework.jar就生效了。

adb shell stop;
adb shell start;

单编services.jar并替换

首先修改完framework/base/services部分的代码后,通过以下命令编译services.jar

mmm framework/base/services -j12

编译出services.jar后,先用第五步的方法执行remount,然后push services.jar到system/framework下面,重启即可。

参考

Android12 AOSP开发环境搭建
Establishing a build environment
Requirements
Source control tools
Downloading the source
Soong Build System
Codenames, tags, and build numbers
Flashing devices
Factory Images for Nexus and Pixel Devices
Driver Binaries for Nexus and Pixel Devices
科大 AOSP 镜像站点
北京外国语大学开源软件镜像站文章来源地址https://www.toymoban.com/news/detail-780222.html

到了这里,关于Android12 源码下载、编译、刷机、单编调试Framework的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Android】系统源码下载及编译

    步骤 1 :创建一个空目录来存放源码: 步骤 2 :获取最新版本的 repo 并签出 android-8.1.0_r1 分支: 其中, android-8.1.0_r1 代表源码标记,代表我们将要获取 Android 8.1 的源码,如需查看其他版本的源码标记,可参阅 源代码标记和 build。 步骤 3 :将 Android 源码从默认清单中指定的

    2024年02月13日
    浏览(52)
  • Android13源码下载和编译过程详解

    作为Android开发者人人都应该有一份自己Android源码,这样我们就可以随时对自己有疑惑的地方通过亲手调试来加强理解 官方推荐配置请参考:AOSP使用入门文档,重点有如下几项: 1.1.1 硬件配置要求 至少需要 250 GB 可用磁盘空间;如果要进行构建,则还需要 150 GB。如果要进行多

    2024年02月14日
    浏览(70)
  • 国内镜像下载Android10源码并编译(实测)

    1.安装ubuntu,不会的百度,一大把。 2.安装编译环境必要软件 3.python安装可能失败,建议单独安装 4.下载repo工具,打开Terminal输入命令 5.修改~/bin/repo下的REPO_URL字段为国内镜像 6.初始化git仓库设置用户名和邮箱 7.创建存放源码的目录,并同步代码 8.拖执行报python错 “/usr/bin/

    2024年02月14日
    浏览(53)
  • Android AOSP源码编译——AOSP下载(一)

    一、电脑配置 Ubuntu16.04 + 16G,硬盘的大小最好大于300G (我这边是找了个win电脑装了双系统 没有使用虚拟机的方式) 二、基础环境配置 1、安装git 配置git email和name 2、安装依赖工具(需要确认的就一直y就好) 3、安装python 执行 python --version 可以看到ubuntu自带的python版本是Python 2.

    2024年02月13日
    浏览(50)
  • ubuntu编译 linphone sdk android源码下载

    2024年02月07日
    浏览(46)
  • Android Framework | AOSP源码下载及编译指南(基于Android13)

    AOSP(Android Open Source Project)是Android操作系统的开源项目,通过下载和编译AOSP源码,您可以获得原始的Android系统,并进行定制和开发。本教程将向您介绍如何下载AOSP源码并进行编译的步骤。 如何只是浏览查看AOSP源码,则没必要下载源码,可以使用google提供的Code Search工具进

    2024年01月16日
    浏览(58)
  • Rockchip平台rk3588源码下载编译(基于Android13)

    下载地址 服务器镜像下载 需要向RK申请SDK使用权限。 由于AOSP使用的repo管理源码仓库,所以为了方便开发者获取repo工具,RK也提供了repo工具的下载 本文介绍了如何使用Markdown撰写一篇关于搭建自己的repo代码服务器的文章。以下是详细的步骤和指导。 环境准备 在开始之前,

    2024年02月03日
    浏览(71)
  • 国内镜像:极速下载编译WebRTC源码(For Android/Linux/IOS)(二十四)

    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏: Audio工程师进阶系列 【 原创干货持续更新中…… 】🚀 优质专栏: 多媒体系统工程师系列 【 原创干货持续更新中…… 】🚀 人生格言: 人生从来没有捷径

    2024年01月17日
    浏览(60)
  • uboot源码下载以及编译

    环境:ubuntu 20.04 uboot官网在进入之后如下所示: 我们可以直接选择Obtaining the source进入到获取源码的网址 在点击Obtaining the source进入到新的网址之后就会看到下面提示去获取uboot的源码: The source of the U-Boot project is maintained in a Git repository. You can download the source via A mirror of th

    2024年02月02日
    浏览(49)
  • 如何下载ImGui源码并编译运行

    1. 通过Git download ImGui源码 如何通过Git下载ImGui源码之前已有介绍,这里附上ImGui源码地址: http://github.com/ocornut/imgui 复制下面的地址,利用Git Bash Here命令下载源码 ImGui源码中已经有.sln,因此不需要cMake build即可直接启动 2. 运行后的ImGui界面 界面上提供了几种基于OpenGL和DX不同

    2024年02月13日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包