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

article/2025/8/24 19:25:37

源码及编译

步骤 1:创建一个空目录来存放源码:

mkdir aosp
cd aosp

步骤 2:获取最新版本的 repo 并签出 android-8.1.0_r1 分支:

repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r1

其中,android-8.1.0_r1 代表源码标记,代表我们将要获取 Android 8.1 的源码,如需查看其他版本的源码标记,可参阅 源代码标记和 build。

步骤 3:将 Android 源码从默认清单中指定的代码库下载到本地工作目录:

repo sync

步骤 4:创建本地分支并关联 repo 上的所有仓库:

repo start ycx-dev --all	

步骤 5:使用 envsetup.sh 脚本初始化编译环境:

source ./build/envsetup.sh

步骤 6:选择编译目标:

lunch aosp_arm64-eng

编译目标的格式说明:编译目标的格式是 BUILD-BUILDTYPE ,如 aosp_arm64-eng 这个目标,它的 BUILD 是 aosp_arm64,BUILDTYPE 是 eng 。

BUILD 指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境,例如 aosp_arm64-eng 中的 aosp(Android Open Source Project) 代表 Android 开源项目,arm 表示系统是运行在 arm 架构的处理器上的,arm64 则是指 64 位 arm 架构处理器

想查看 Android 设备的 cpu 架构,可以执行命令:adb shell getprop ro.product.cpu.abi

BUILDTYPE 指的是编译类型,通常有三种:

  • user:表示编译出的系统镜像版本可以用来正式发布到市场,这个版本是不能 root 的
  • userdebug:在 user 版本的基础上开放了 root 权限和 debug 权限
  • eng:表示开发工程师版本,拥有 root 权限,此外还附带了许多 debug 工具

如果我们在终端输入 lunch 命令,将会列出所有的编译目标:

在这里插入图片描述

步骤 7:开始编译(设置8个线程同时编译):

m -j8

参与编译的线程并不是越多越好,通常是根据你机器 cup 的核心来确定,公式为:core * 2,即当前 cpu 的核心的 2 倍

我们可以执行 cat /proc/cpuinfo| grep "cpu cores"| uniq 命令查看电脑 cpu 的核心数。

如果编译过程一切顺利,我们会在终端看到如下画面,表示编译成功!

在这里插入图片描述

步骤 8:如果我们 lunch 选中的编译目标是 1-6, 那么我们可以直接执行如下命令运行虚拟机看效果了:

emulator

稍等片刻,我们就可以在虚拟机上操作我们刚刚编译成功系统固件了。

如果我们 lunch 选中的编译目标是非 1-6, 那么我们可以编译的固件运行在真机上,具体步骤如下。

步骤 9:进入 fastboot 模式

adb reboot bootloader

步骤 10:解锁引导加载程序

fastboot flashing unlock

步骤 11:刷写设备

fastboot flashall -w

-w 选项会擦除设备上的 /data 分区;该选项在第一次刷写特定设备时可以加上,其他情况下不加也行。

刷写顺利的话,终端打印如下画面,则说明刷机成功了,此时机器会自动重启,稍等机器自动重启即可。

在这里插入图片描述

如果不想刷写所有分区,可以单独刷写某个指定分区,具体的命令为:

fastboot flash <分区名> <镜像文件名.img>

其中,<分区名> 指的是要刷写到哪个分区,比如 system、userdata 等;<镜像文件名.img> 指的是要刷写的 img 文件名称。

例如,如果想单独刷写 system.img,则可以输入以下命令:

fastboot flash system system.img

刷写完成后,不能直接简单的重启设备。需要执行以下命令来重新启动设备:

fastboot reboot

该命令会使设备从 fastboot 模式退出,并自动重启到正常的 Android 系统中。

编译问题

错误 1:flex-2.5.39: loadlocale.c:130:_nl_intern_locale_data

在这里插入图片描述

解决方法:在终端输入命令:export LC_ALL=C,然后重新编译即可。

错误 2:xmllint: command not found

解决方法:在终端输入命令:sudo apt-get install libxml2-utils,然后重新编译即可。

编译单模块并运行

例如,我们修改了 SystemUI 模块的代码,需要编译到机器上运行看看效果,那么可以这样,

步骤 1:在当前源码目录下执行编译命令:

make SystemUI

稍等片刻,就可以看见编译成功了:

在这里插入图片描述

步骤 2:获得系统写入权限:

adb root && adb remount

步骤 3:接下来把编译产物 push 到设备上即可:

adb push out/target/product/xxx/product/priv-app/SystemUI /system/product/priv-app/

步骤 4:重启设备上层:

adb shell stop && adb shell start

重启完毕后即可看到修改后的效果了。


http://chatgpt.dhexx.cn/article/o6p8cUj1.shtml

相关文章

Android源码下载编译(高通)

0 前言 本文介绍如何下载高通平台的Android源码&#xff0c;然后进行编译。 相关&#xff1a;《Android源码下载&编译&#xff08;TI&#xff09;》 1 安装工具 下载Android源码需要git&#xff0c;repo等工具&#xff0c;启动repo是Google写的一个专门用于下载Android源码…

Window下载Android源码

Android 10源码下载 想要研究Android 源码的同学可以用此方法进行下载。源码从清华大学开源软件镜像站&#xff08;https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/&#xff09;下载。 使用Linux的同学直接参照清华镜像站提供的使用帮助(https://mirrors.tuna.tsinghua.edu…

下载安卓源码

安卓内核源码下载教程 准备环境如何选择你想要下载的版本ubuntu环境配置 准备环境 Ubuntu 18.04 安装 最好是用这个版本或者高于这个版本的,低版本的有一些环境问题可能会让你很难受我使用的是VMware Workstation 16 ProPixel 3 XL、Pixel 3、Pixel 2 XL、Pixel 2、Pixel XL、…

Android13源码下载及全编译流程

一、源码下载 1.1、配置要求 官方推荐配置请参考&#xff1a;https://source.android.google.cn/docs/setup/start/requirements?hlzh-cn&#xff0c;重点有如下几项&#xff1a; 1.1.1、硬件配置要求 1、内存至少 16GB&#xff0c;实测建议至少 32G。 2、磁盘至少 250GB&am…

Java 工厂设计模式

简介 工厂设计模式在java中有大量的应用&#xff0c;如spring框架&#xff0c;这种类型的设计模式属于创建型模式。在工厂设计模式中&#xff0c;创建逻辑不会对客户端暴露&#xff0c;可以通过一个对外接口创建所需对象。 工厂模式使用场景 需要频繁创建对象且这些对象多处…

简单工厂设计模式

简单工厂设计模式 刚开始学设计模式,犹如刚睁开眼看世界的孩子,满眼都是惊奇,原来代码的世界可以如此的精彩纷呈.当然这些都是前辈智慧的结晶.简单工厂设计模式是接触的第一个设计模式,看完后更多的是不懂和迷糊.不过相信慢慢会懂得其精髓的. 简单工厂设计模式是创建型(就是把对…

Java工厂设计模式详解

前言 工厂设计模式在开发过程中有大量的运用&#xff0c;不管是spring框架&#xff0c;还是诸多的中间件&#xff0c;都有着工厂设计模式的体现 比如&#xff0c;手机生产工厂&#xff0c;当提供了相关生产手机的原材料&#xff0c;工厂就可以按要求生产出手机 工厂模式介绍 …

Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)

文章目录 创建型设计模式(简单工厂&#xff0c;工厂方法&#xff0c;抽象工厂)一.简单工厂模式引出简单工厂模式 二.工厂方法模式三.抽象工厂模式 Android源码中用到的工厂模式举例一.BitmapFactory 源码工厂模式详解(简单工厂)二.Retrofit的工厂模式(抽象工厂) 创建型设计模式…

工厂设计模式有什么用?

工厂方法是非常古老且常用的设计模式。原因主要是一个系统要运转起来一定会涉及到对象的实例化过程&#xff0c;如果对象的实例化分散在各种逻辑代码之间&#xff0c;那么就会非常零乱、难以维护&#xff0c;bug自然也多。 工厂方法的出现解决的就是对象创建的问题&#xff0c…

Java中的工厂设计模式

引出工厂模式 package www.java.test;interface Computer{void printComputer(); } class MacbookPro implements Computer{Overridepublic void printComputer() {System.out.println("This is a MacbookPro");} } class SurfaceBook implements Computer{Override…

Java工厂设计模式

工厂设计模式 一、面向对象的设计原则1.1 OCP&#xff08;开闭原则&#xff0c;Open-Closed Principle&#xff09;1.2 DIP&#xff08;依赖倒转原则&#xff0c;Dependence Inversion Principle&#xff09;1.3 LOD&#xff08;迪米特法则&#xff0c;Law Of Demeter&#xff…

设计模式—工厂设计模式

工厂设计模式 1.概述2.简单工厂模式2.1 结构2.2 实现2.3 优缺点2.4 扩展 3.工厂方法模式3.1 概述3.2 结构3.3 实现3.4 优缺点 4.抽象工厂模式4.1 概述4.2 结构4.3 实现4.4 优缺点4.5 应用场景 5.扩展模式5.1 第一步&#xff1a;定义配置文件5.2 改写工厂类 6.JDK源码解析—Coll…

工厂设计模式 - 详解

介绍 工厂模式是Java中最常用的设计模式之一&#xff0c;这种类型的设计模式数据创建型模式。 主要就是负责创建对象的&#xff0c;当我们使用new创建对象的时候会导致对该对象的耦合性很严重&#xff0c;当我们需要修改的时候需要对所有new的对象进行修改&#xff0c;违反了软…

【iOS】—— 工厂设计模式

工厂设计模式 文章目录 工厂设计模式设计模式概念设计模式七大准则开闭原则单⼀职责原则里氏替换原则依赖倒转原则接口隔离原则迪米特法则合成复用原则 类族模式简单工厂模式优点缺点主要作用示例文件分类实现效果&#xff1a; 工厂方法模式优点缺点主要作用&#xff1a;示例&a…

【设计模式】工厂模式(Factory Pattern)

1. 概述 工厂模式&#xff08;Factory Pattern&#xff09;是最常用的设计模式之一&#xff0c;它属于创建类型的设计模式。它提供了一种创建对象的最佳方式&#xff0c;在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通过一个共同的接…

设计模式之工厂模式,史上最强,不服来辩!

设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结&#xff0c;如果设计模式没学会&#xff0c;抽象能力肯定就不会太强。常见的设计模式有 23 种&#xff0c;今天我们只聊最简单的工厂模式。 工厂模式是属于创建型模式的&#xff0c;通过工厂获取一个一个的新对象。…

工厂设计模式

1、概念 工厂模式分三种&#xff1a;简单工厂模式、工厂方法模式、抽象工厂模式 简单工厂模式(Simple Factory Pattern)&#xff1a;属于类的创新型模式&#xff0c;又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例&#xf…

设计模式之工厂模式(factory pattern)

工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和…

sqlserver2008的SSMS连接sqlserver2016的时候提示‘索引超出了数组界限。’

解决&#xff1a;打sp3补丁。 http://www.microsoft.com/en-us/download/details.aspx?id44271

Matlab报错 :“位置 x 处的索引超出数组边界”

经常遇到“位置 x 索引超出数组边界”的报错&#xff0c;今天突然想到一个以前一直没有太留意的奇葩问题&#xff1a;这个报错里“位置x”指的是哪里&#xff1f;为什么一会是“位置3”&#xff0c;一会是“位置1”&#xff0c;有什么神秘的规矩吗&#xff1f; 善用搜索没发现…