Mac OS10.12 编译Android源码8.1

2023-05-16

内容
介绍mac os10.12拉取android源码,并且编译后,刷入手机的过程。
下载的rom是android 8.1,手机是pixel

准备工作
硬盘大小
本人Mac磁盘空间只有256GB,而编译8.1源码,至少需要150GB以上空间,所以使用了一个移动硬盘进行源码存储。

软件
安装JDK 8
安装git
安装XCode 10.11-10.12都行
安装android sdk(后面刷机用)
PS:按照下面的流程执行的时候,如果出现缺少软件再自行补上就行。

建立磁盘映像
打开磁盘工具
在菜单中 文件 - 新建映像 - 空白映像
填写映像信息

因为是用移动硬盘,所以位置选的硬盘。大小200GB,格式必须是Mac OS扩展(区分大小写,日志式),点击存储,漫长的等待。
拉取源码
1. 下载代码同步工具repo
使用google官方地址下载:

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

如果无法访问storage.googleapis.com,可以使用清华的地址:

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

2. 修改环境变量
为了让repo在拉取代码的时候,走国内清华的地址,需要把下面这一行加入到环境变量配置文件中。

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

3. 拉取源码
3.1. 打开刚刚建立好的Android.dmg


3.2. 建立工作目录
cd /Volumes/AOSP/
mkdir work
cd work

3.3. 查询特定的 Android 版本(列表)
我选取的是android-8.1.0_r15分支,对应pixel手机的分支。对应的细分版本号是OPM1.171019.021,这个细分版本号一会下载驱动需要用到。


3.4 初始化repo仓库
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r15    

3.5 同步源码
repo sync -f -j5

漫长的等待…,可以提前进入下一个环节,驱动下载。

下载驱动
编译之前,需要下载好驱动,否则编译后的镜像即使刷到手机上也无法启动系统(驱动下载)根据当时sync的时候拉取的细分版本号OPM1.171019.021,以及手机的型号pixel,下载对应的驱动,

下载好之后,解压得到sh脚本文件,拷贝到编译所在目录,刚刚建立的work目录里。
依次执行脚本,会在当前目录生成vendor目录,运行脚本的时候,需要不断的按回车看协议内容,到最后再输入I ACCEPT回车同意协议。
技巧: 长按回车,直到第八条协议,放慢速度一条一条按,直到提示输入I ACCEPT。

启动编译
依次执行

source build/envsetup.sh

执行lunch命令

$ lunch

You're building on Darwin

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     4. aosp_mips64-eng
     5. aosp_x86-eng
     6. aosp_x86_64-eng
     7. full_fugu-userdebug
     8. aosp_fugu-userdebug
     9. aosp_car_emu_arm-userdebug
     10. aosp_car_emu_arm64-userdebug
     11. aosp_car_emu_x86-userdebug
     12. aosp_car_emu_x86_64-userdebug
     13. mini_emulator_arm64-userdebug
     14. m_e_arm-userdebug
     15. m_e_mips-userdebug
     16. m_e_mips64-eng
     17. mini_emulator_x86-userdebug
     18. mini_emulator_x86_64-userdebug
     19. uml-userdebug
     20. aosp_dragon-userdebug
     21. aosp_dragon-eng
     22. aosp_marlin-userdebug
     23. aosp_marlin_svelte-userdebug
     24. aosp_sailfish-userdebug
     25. aosp_walleye-userdebug
     26. aosp_walleye_test-userdebug
     27. aosp_taimen-userdebug
     28. aosp_angler-userdebug
     29. aosp_bullhead-userdebug
     30. aosp_bullhead_svelte-userdebug
     31. hikey-userdebug
     32. hikey960-userdebug

Which would you like? [aosp_arm-eng] 24

这里因为的手机是pixel,而且需要的是userdebug系统,所以输入24,回车。

开始编译:

make -j40

漫长的等待…

刷入手机
编译系统完成后,在out/target/product/sailfish/目录下,能看到很多.img后缀的文件,此时,就可以愉快的刷机了。

手机进入开发者选项,打开OEM解锁,打开USB调试
执行adb reboot bootloader进入bootloader模式(需要安装Android SDK并配置环境变量)
进入bootloader模式后,需要解锁bootloader,执行fastboot flashing unlock,手机会进入到解锁页面,用音量上下键选中unlock选项,使用电源键确认。
解锁bootloader之后,再次进入bootloader模式,进入work目录,执行fastboot flashall -w刷入,等待重启,如果没有做下载驱动这一步,即使刷入,还是无法进入系统,此时,只需要重新下载驱动,再次执行编译命令。
点击查看更多刷机相关的内容

AndroidStudio中查看源码
在android源码中有这么一个目录development/tools/idegen。
顾名思义,是生成ide的project文件,主要是生成intellij的project文件,可用于AndroidStudio。

1. 在整个Android源码全编成功之后,然后编译idegen模块,用以生成Android studio的工程配置文件,编译成功之后就生成了idegen.jar(out/host/darwin-x86/framework/idegen.jar),运行如下命令:
$ mmm development/tools/idegen/

注:如果刚才编译AOSP的那个命令行窗口关闭了,必须要在执行source build/envsetup.sh一次,用了初始化编译环境。

2. 在源码根目录生成对应的android.ipr、android.iml IEDA工程配置文件。以便于AndroidStudio可以打开项目
sudo ./development/tools/idegen/idegen.sh

android.ipr:通常是保存工程相关的设置,比如编译器配置,入口,相关的libraries等
android.iml:则是主要是描述了modules,比如modules的路径,依赖关系等.
android.iws:则主要是包含了一些个人工作区的设置.

3. 导入Android Studio
由于Android源码太大,导入之前,需要对studio进行配置

1. 修改VM内存大小
打开IDEA 菜单栏 Help > Edit Custom VM Options,添加

-Xms1g 
-Xmx5g

2. 修改文件大小限制,打开区分大小写选项
打开IDEA 菜单栏 Help -> Edit custom properties, 添加

idea.max.intellisense.filesize=100000
idea.case.sensitive.fs=true

重启Android Studio,然后打开Android.ipr就可以查看源码了。首次导入会很慢。

编译遇见的坑
源码拉取,以及编译顺序大家都会,但是编译坑太多,坑得记一下,以免后面再掉下去。解决完问题好,重新执行上面的命令编译命令即可。

在出现报错之后,仔细查看FAILED: XXXXX这一行下面的提示,进行问题的定位。

Fuck Jack-Server
jack-server报错如下

[ 53% 48295/89583] Ensuring Jack server is installed and started
FAILED: setup-jack-server 
/bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar  2>&1 || (exit 0) ) && (JACK_SERVER_VM_ARGUMENTS=\"-Dfile.encoding=UTF-8 -XX:+TieredCompilation\" prebuilts/sdk/tools/jack-admin start-server 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update server prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar 4.11.ALPHA 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools/jacks/jack-4.32.CANDIDATE.jar 4.32.CANDIDATE || exit 47 )"
Unsupported curl, please use a curl not based on SecureTransport
Launching Jack server java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/var/folders/v3/qcs7l6gd5l954fzkrg13z0h40000gn/T/ -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /Users/chenwangwang/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher

解决方案:

###1. 删除原来安装的jack-server

rm -r ~/.jack-server

###2. 自己尝试安装jack-server

prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar

上面的命令,是从报错信息里复制出来的,不同的android版本可能不一样。

###3. 安装jack-server报错

Unsupported curl, please use a curl not based on SecureTransport

curl不对,不能是基于SecureTransport的curl,需要重新下载,并编译一个带OpenSSL的curl。
下载curl,解压,命令行进入到解压后的目录。

首先使用下面命令查看自己的openssl版本

ls /usr/local/Cellar/openssl/

我的机器上,openssl版本是1.0.2g

得到版本后,依次执行:

./configure --prefix=/usr/local/curl --with-ssl=/usr/local/Cellar/openssl/1.0.2g
make
make install

这里的1.0.2g是我机器上的openssl版本,需要根据自己机器的openssl做替换。

接着,/usr/local/curl/bin 添加到环境变量,然后然后使用source命令使环境变量立即生效。

再使用curl --version查看当前curl的信息,如果出现openssl,而不是SecureTransport则说明替换curl成功。

下面是我替换之后的信息:

curl 7.61.0 (x86_64-apple-darwin16.7.0) libcurl/7.61.0 OpenSSL/1.0.2g zlib/1.2.8
Release-Date: 2018-07-11
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy

4. 再次安装jack-server
替换掉curl之后,重新安装jack-server

prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar

顺利通过。

5. 尝试启动jack-server
启动之前,先把jack-server杀掉,进入到源码编译目录,接着

./prebuilts/sdk/tools/jack-admin kill-server

然后尝试启动:

./prebuilts/sdk/tools/jack-admin start-server

成功启动,而不是一直卡着。

6. 清除刚刚的测试环境
杀了jack-server服务

./prebuilts/sdk/tools/jack-admin kill-server

移除已经安装的jack-server

rm -r ~/.jack-server

7. 重新编译
上面步骤完成后,重新编译源码

make -j40

/bin/bash: xz: command not found
报错信息:
Couldn't find end of symbol
[ 80% 33059/41252] target Strip (mini debug info): libandroid_net (out/target/p...t/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so)
FAILED: out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so 
/bin/bash -c "(rm -f out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.dynsyms out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.funcsyms out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.keep_symbols out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.debug out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.mini_debuginfo.xz ) && (if prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-strip --strip-all -R .comment out/target/product/sailfish/symbols/system/lib64/libandroid_net.so -o out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so; then prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-objcopy --only-keep-debug out/target/product/sailfish/symbols/system/lib64/libandroid_net.so out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.debug && prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-nm -D out/target/product/sailfish/symbols/system/lib64/libandroid_net.so --format=posix --defined-only | awk '{ print \$1 }' | sort >out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.dynsyms && prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-nm out/target/product/sailfish/symbols/system/lib64/libandroid_net.so --format=posix --defined-only | awk '{ if (\$2 == \"T\" || \$2 == \"t\" || \$2 == \"D\") print \$1 }' | sort >out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.funcsyms && comm -13 out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.dynsyms out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.funcsyms >out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.keep_symbols && prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-objcopy --rename-section .debug_frame=saved_debug_frame out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.debug out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.mini_debuginfo && prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-objcopy -S --remove-section .gdb_index --remove-section .comment --keep-symbols=out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.keep_symbols out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.mini_debuginfo && prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-objcopy --rename-section saved_debug_frame=.debug_frame out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.mini_debuginfo && rm -f out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.mini_debuginfo.xz && xz out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.mini_debuginfo && prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-objcopy --add-section .gnu_debugdata=out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so.mini_debuginfo.xz out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so; else cp -f out/target/product/sailfish/symbols/system/lib64/libandroid_net.so out/target/product/sailfish/obj/SHARED_LIBRARIES/libandroid_net_intermediates/libandroid_net.so; fi )"
/bin/bash: xz: command not found

解决方案:
没有安装xz解压工具,参考mac安装xz解压命令

bison错误
FAILED: out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h 
BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d  --defines=out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h -o out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c external/selinux/checkpolicy/policy_parse.y

解决方案
为bison打补丁,重新编译(Patch bison fix for High Sierra and build bison:):
进入aosp主目录work

cd external/bison
git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
mm
cd ../..
cp out/host/darwin-x86/bin/bison prebuilts/misc/darwin-x86/bison/

ERROR: Unable to create a plug-in (e00002be)
描述
执行fastboot flashall -w刷机的时候,报错:

ERROR: Unable to create a plug-in (e00002be)

报错原因是因为AOSP自带的fastboot版本太低了,在源码目录执行fastboot --version

BJ1664:work chenwangwang$ fastboot --version
fastboot version 0.0.0-eng.chenwa.20180806.145659
Installed as /Volumes/AOSP/work/out/host/darwin-x86/bin/fastboot

解决方案
自行下载最新的SDK,解压后,仍然是在源码编译根目录,执行命令

/Users/liangqiu/android/android-sdk-macosx/platform-tools/fastboot flashall -w

/Users/liangqiu/android/android-sdk-macosx/platform-tools/fastboot是加压后的SDK里,fastboot路径。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac OS10.12 编译Android源码8.1 的相关文章

随机推荐

  • Android JNI(一)——NDK与JNI基础

    本片文章大纲如下 xff1a 1 导读2 什么是NDK3 为什么使用NDK4 NDK到SO5 JNI 一 导读 在Android OS上开发应用程序 xff0c Google提供了两种开发包 xff1a SDK和NDK 你可以从Google
  • Android JNI学习(四)——JNI的常用方法的中文API

    一 Interface Function Table 接口函数表 每个函数都可以通过JNIEnv参数访问 xff0c JNIEnv类型是指向一个存放所有JNI接口指针的指针 xff0c 其定义如下 xff1a typedef const s
  • 详解android项目配置签名文件的完整流程

    1 背景 接手的项目近期需要上线 xff0c 于是复习了一下项目签名文件配置流程 xff0c 这里做个系统性总结 2 最终目标 根据需求为debug包与release包配置签名文件 xff0c 快速满足中小型项目的需要 3 创建签名文件 要
  • ArrayList循环删除陷阱及迭代器介绍

    一 ArrayList循环删除陷阱 模板测试代码如下 xff1a public class ArrayListRemove public static void main String args ArrayList lt String gt
  • 启动加载器BootLoader

    启动加载器 使用u boot在qemu上模拟执行u boot命令 在嵌入式操作系统中 xff0c BootLoader是在操作系统内核运行之前运行 可以初始化硬件设备 建立内存空间映射图 xff0c 从而将系统的软硬件环境带到一个合适状态
  • EventBus3.0详细分析

    在进入主题之前 xff0c 我们先保持着这样几个疑问 xff0c EventBus的使用三要素里 xff0c 我们为什么要去定义事件方法 xff0c 并且用到了 64 subscribe 注解 xff1f EventBus getDefau
  • git 拉取远程分支到本地

    步骤 xff1a 1 新建一个空文件 xff0c 文件名为file 2 初始化 git init 3 自己要与origin master建立连接 xff08 下划线为远程仓库链接 xff09 git remote add origin gi
  • module中依赖arr

    在高版本的AndroidStudio并且使用了版本的gradle出现了上述问题可以按着如下引用 在你工程根目录下新建一个文件夹YouLib xff0c 将你的aar文件放入 xff0c 然后在该目录下新建一个build gradle文件 在
  • Android Studio aar包引用方式

    主工程 第一种方式 1 将aar包复制到app libs目录下 2 在app的build gradle文件中配置如下 xff1a android repositories flatDir dirs 39 libs 39 implementa
  • MacOs “无法打开***,因为无法验证开发者...”

    在终端执行如下指令 sudo spctl master disable 执行完上面指令后 xff0c 在 安全性与隐私 设置的 允许从以下位置下载的App 中会新增一个任何来源 xff0c 如下面的对比图 xff0c 然后应用在运行中就不会
  • mac编译android源码-创建磁盘映像

    因为mac默认的磁盘环境是不区分大小的 xff0c 而git并不支持此类文件系统 xff0c 所以我们需要创建我们所需要的磁盘映像用来存放下载的源码 首先你需要找在mac上的磁盘工具 xff0c 一般是在应用程序列表 其他文件夹里面 2 如
  • android源码编译-如何在Mac中卸载openjdk15

    说明 之前在mac上使用intellij idea时 xff0c 由于没有在Mac上安装过jdk xff0c 所以就在intellij idea中下载了openjdk15版本 后来觉得想要换一个旧点的版本 xff0c 就想卸载了openjd
  • Mac OS查看和设置JAVA_HOME

    下载java https www java com zh CN download 1 查看JAVA版本 打开Mac电脑 xff0c 查看JAVA版本 xff0c 打开终端Terminal xff0c 通过命令行查看笔者的java版本 xff
  • Android源码编译–jdk版本查询

    2 1 Android源码所需JDK版本 根参考资料 1 的说明 xff0c 在android src build core main mk中对jdk的版本进行查询 xff0c 以确定当前系统是否安装了特定版本的jdk xff0c 因此可以
  • android源码编译 ninja: build stopped: subcommand failed.

    接着编译 make j8 线程加多少个具体看机器配置 xff0c 问题也最可能是这一步骤引起的 xff0c 如果是虚拟机的话 xff0c 建议不要加线程 xff0c 直接使用make执行
  • Ubuntu环境下完美安装python模块numpy,scipy,matplotlib

    不同的ubuntu版本安装过这三个模块几次了 xff0c 然而总是出现各种问题 xff0c 最近一次是在ubuntu 16 04 LTS server版本安装的 xff0c 总的来说安装的比较顺利 先把pip安装好 sudo apt get
  • prebuilts/misc/darwin-x86/bison/bison: Bad CPU type in executable

    方案一 cd external bison touch patch high sierra patch vim patch high sierra patch With format string strictness High Sierr
  • android源码编译 坑

    bash lunch command not found 先调用 build envsetup sh 再执行 lunch Can not find SDK Can not find SDK 10 6 at Developer SDKs Ma
  • 获取当前MacOSX SDK

    xcrun show sdk path 打印出 Library Developer CommandLineTools SDKs MacOSX sdk xcrun show sdk version 打印出 10 15 4 xcode sele
  • Mac OS10.12 编译Android源码8.1

    内容 介绍mac os10 12拉取android源码 xff0c 并且编译后 xff0c 刷入手机的过程 下载的rom是android 8 1 xff0c 手机是pixel 准备工作 硬盘大小 本人Mac磁盘空间只有256GB xff0c