pixel 3XL 源码下载 编译 刷机
参考博客:
Android 9.0 -源码下载编译
Android 9源码下载+编译+Pixel 2XL刷机
Android系统源码编译及刷机实战
[Android原声机刷机包镜像下载地址]:
https://developers.google.cn/android/images
文章目录
1. 镜像地址:
下载repo
curl -k https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
修改REPO_URL:
REPO_URL = ‘https://gerrit-googlesource.lug.ustc.edu.cn/git-repo’
初始化仓库:
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.0.0_r1(对应分支版本,参考“#2具体下载机型参考”)
2. 具体下载机型参考:
Android 的最新分支情况,如果看不全, 可以将语言切换成英文。
具体原因不清楚。
https://source.android.google.cn/setup/start/build-numbers
3. 驱动下载地址(刷真机需要下载对应的驱动):
https://developers.google.cn/android/drivers
- 驱动下载和使用方式(pixel 3XL为例):
- 下载驱动文件
- 找到对应一套代码的驱动(使用详细版本"PQ3A.190605.003"来查找需要的驱动),下载得到两个压缩文件, 解压。
- 将解压后的文件拷贝到源码工程根目录。
- 然后依次运行这两个shell脚本。
- 会提示你查看证书,按Enter键一行行的查看,出现下面的输入提示时,
输入 I ACCEPT,解压到了vendor 目录下。另外的自解压脚本也是这样执行
驱动配置OK!!!
4. 编译:
- 编译准备工作文档
https://source.android.google.cn/setup/build/building
- 对应产品的运行版本选择(lunch 产品先择)
https://source.android.google.cn/setup/build/running
我的是pixel 3XL, 所以选择的是:aosp_crosshatch-userdebug
以上, 编译完成后就可以通过fastboot命令进行刷机了。
5. Android R编译问题
- 关闭ODex优化:
diff --git a/crosshatch/BoardConfig.mk b/crosshatch/BoardConfig.mk
index b105aa9..92e8a94 100644
--- a/crosshatch/BoardConfig.mk
+++ b/crosshatch/BoardConfig.mk
@@ -14,6 +14,10 @@
# limitations under the License.
#
+WITH_DEXPREOPT := false
+DEX_PREOPT_DEFAULT := nostripping
+WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY := true
+
TARGET_BOOTLOADER_BOARD_NAME := crosshatch
TARGET_SCREEN_DENSITY := 560
TARGET_RECOVERY_UI_MARGIN_HEIGHT := 165
- 编译
- 编译kernel
make showcommands -j8 bootimage - 编译Android:
m -j8
- 修改swap交换区大小
1.首先用命令free查看系统内 Swap 分区大小
###@ubuntu:~$ free -h
total used free shared buff/cache available
Mem: 7.8G 4.0G 756M 2.0M 3.0G 3.4G
Swap: 800M 578M 200M
可以看到 Swap 只有 800M
增加Swap分区
1.创建一个 Swap 文件
找一个空间足够的目录用来存放swap文件
mkdir /swap
cd /swap
root@ubuntu:/swap# dd if=/dev/zero of=swapfile bs=1024 count=8000000
8000000+0 records in
8000000+0 records out
8192000000 bytes (8.2 GB, 7.6 GiB) copied, 39.0723 s, 210 MB/s
把生成的文件转换成 Swap 文件
root@ubuntu:/swap# mkswap -f swapfile
Setting up swapspace version 1, size = 7.6 GiB (8191995904 bytes)
no label, UUID=40ad094d-4be3-4d31-8148-00c636d524d7
2.激活 Swap 文件
sudo swapon swapfile
再次查看 free -h 的结果。
tjj@ubuntu:~$ free -h
total used free shared buff/cache available
Mem: 7.8G 4.0G 756M 2.0M 3.0G 3.4G
Swap: 4.8G 578M 4.2G
OK!
如果需要卸载这个 swap 文件,可以进入建立的 swap 文件目录。执行下列命令。
sudo swapoff swapfile
如果需要一直保持这个 swap ,可以把它写入 /etc/fstab 文件。
/swap/swapfile /swap swap defaults 0 0
6. 下载和编译Android内核源码
1.下载内核代码
下面是官方下载地址以及git库的版本区别,国内下载还得使用清华源进行下载
git clone http://android.googlesource.com/kernel/common.git # 通用的Linux内核,后面6套都是以该源码为基础;
git clone http://android.googlesource.com/kernel/exynos.git # 用于使用三星Exynos芯片的Android设备,典型代表是Nexus 10;
git clone http://android.googlesource.com/kernel/goldfish.git # 用于Android模拟器的内核源码;
git clone http://android.googlesource.com/kernel/msm.git # 用于使用高通MSM芯片的Android设备,典型代表是ADP1(G1)、ADP2(G2)、Nexus One和Nexus 4;
git clone http://android.googlesource.com/kernel/omap.git # 用于使用德州仪器(TI)OMAP芯片Android设备,典型代表是PandaBoard和Galaxy Nexus;
git clone http://android.googlesource.com/kernel/samsung.git # 用于使用三星Hummingbird芯片的Android设备,典型代表是Nexus S;
git clone http://android.googlesource.com/kernel/tegra.git # 用于使用NVIDIA (Tefra)芯片Android设备,典型代表是Xoom和Nexus 7。
HTC手机可以在以下地址下载指定设备的Linux内核源码:
http://www.htcdev.com/devcenter/downloads
注:内核代码下载我们也使用 清华源 http://mirrors.ustc.edu.cn/aosp/kernel/ ,这里需要注意此网站下载速度较慢,因此使用下面命令较快,git库可根据需求进行替换,我下载了模拟器内核
git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git
cd goldfish
git branch -a
git checkout remotes/origin/android-goldfish-2.6.29
2.编译内核代码
1. 配置交叉编译工具
sudo vim /etc/profile # 打开环境变量配置文件,配置交叉编译工具
export PATH=$PATH:~/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin
2. 配置makefile文件
cd goldfish
vim Makefile # 打开makefile文件找到并配置如下两个参数
ARCH ?=arm
CROSS_COMPILE ?=/home/user/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/
arm-linux-androidkernel-
3. 开始编译
make goldfish_defconfig # 生成配置文件
make # 编译命令
4. 运行当前内核版本的模拟器
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage
3. 查看内核版本
adb shell
cd proc
cat version
内核编译过程中如果出现Out of memory error错误,配置jdk内存重新编译即可
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server