编译Android源码详细教程|环境配置+常见错误解决+镜像生成全流程

文章目录CloseOpen

    • 环境配置:照着做,半小时搞定基础依赖
    • 常见错误解决:遇到问题不用慌,直接查这里
    • 镜像生成:最后一步,抄作业就行
      • 必须用Ubuntu系统编译吗?Windows或macOS不行吗?
      • repo同步源码时频繁中断怎么办?
      • 编译Android源码需要多少硬件资源?
      • 编译好的镜像怎么刷入手机?
      • 依赖库安装提示“无法定位包”怎么办?

    环境配置:照着做,半小时搞定基础依赖

    首先得选对系统——别瞎折腾Windows或macOS,直接用Ubuntu(推荐20.04或22.04版本)。不是我偏心Ubuntu,是Android源码对它的兼容性最好,我试过CentOS,结果依赖库冲突更麻烦,最后又乖乖换回Ubuntu。接下来一步一步来,每步都给你写死,直接复制命令就行:

    第一步:换国内镜像源。默认的Ubuntu源在国内访问跟龟爬似的,直接换成清华或阿里云的源。操作很简单:打开/etc/apt/sources.list文件(用sudo nano /etc/apt/sources.list),把里面的内容全换成清华源的配置(直接去清华源官网复制对应Ubuntu版本的内容),然后执行sudo apt-get update更新缓存。我之前没换源的时候,下一个git包都要等5分钟,换了之后10秒搞定,这一步绝对不能省。
    第二步:装基础依赖库。直接复制这条命令执行: sudo apt-get install git-core curl repo openjdk-11-jdk python3-distutils python3-pip libncurses5-dev libssl-dev libsqlite3-dev libxml2-dev libxslt1-dev zlib1g-dev

    这里要注意,不同Android版本对应不同JDK——比如Android 11及以上用OpenJDK 11,Android 7-10用OpenJDK 8,我把对应关系整理成表格,你直接对照着装:

    Android版本 对应JDK版本 安装命令
    Android 11+ OpenJDK 11 sudo apt-get install openjdk-11-jdk
    Android 7-10 OpenJDK 8 sudo apt-get install openjdk-8-jdk
    Android 6及以下 Oracle JDK 7 需手动下载安装

    第三步:配置repo工具。repo是Google用来管理Android源码的“大管家”,先建个bin目录放repo:mkdir ~/bin,然后下载repo脚本:curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo,给repo加执行权限:chmod a+x ~/bin/repo,最后把bin目录加到环境变量(不然系统找不到repo):export PATH=~/bin:$PATH——记得把这句话写到~/.bashrc里(用nano ~/.bashrc),这样每次开机都有效。我之前没加环境变量,结果执行repo命令提示“command not found”,折腾半小时才发现是路径问题,你可别犯这错。
    第四步:同步源码。先建个目录放源码(比如mkdir android_source && cd android_source),然后初始化repo:repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest(用清华镜像,比Google原生快10倍),接着同步:repo sync -j4j后面是线程数,根据CPU核心来——4核用j4,8核用j8,太多容易超时)。同步中断没关系,再执行一次repo sync就行,repo会自动续传。我第一次同步时因为WiFi不稳定,中断了三次,后来换有线网络,一次就成功了。

    常见错误解决:遇到问题不用慌,直接查这里

    编译时最崩溃的是突然报错,但90%的错误都是“套路”,我把高频问题整理好了,你直接对号入座:

  • repo同步超时
  • (提示“connection timed out”)

    解决方法:要么换清华/阿里云镜像,要么加超时参数——repo sync -j4 timeout=120timeout=120是允许超时2分钟)。Google官方文档明确说过,增加超时时间能解决大部分同步问题,我亲测有效。

  • 依赖库缺失
  • (提示“missing dependency”)

    比如缺libncurses5-dev,直接执行sudo apt-get install libncurses5-dev就行。重点是看报错信息里的关键词——比如“ncurses”“ssl”,搜对应的包名,别瞎猜。我之前缺libxml2-dev,直接装这个包就好了,没什么技术含量。

  • make报错“out of memory”
  • (内存不够)

    解决方法:加swap分区。先创建4G swap文件:sudo fallocate -l 4G /swapfile,设权限:sudo chmod 600 /swapfile,格式化:sudo mkswap /swapfile,启用:sudo swapon /swapfile。要是还不够,把swap加大到8G。我编译Android 12时8G内存不够,加了4G swap就搞定了。

  • 签名验证失败
  • (镜像装不上手机)

    表现是“signature verification failed”,解决方法有俩:要么生成自己的签名(用keytool生成密钥库,放到build/target/product/security目录),要么用测试签名——编译时加参数:make -j8 PRODUCT_DEFAULT_DEV_CERTIFICATE=build/target/product/security/testkey。我第一次编译没注意签名,结果镜像装不上,换成测试签名就好了。

    镜像生成:最后一步,抄作业就行

    环境对了,错误解决了,接下来生成镜像超简单,跟着做:

  • 初始化环境
  • :进入源码目录,执行source build/envsetup.sh——这步是加载编译需要的变量和函数,必须做。

  • 选目标设备
  • :执行lunch,选aosp_arm-engaosp_arm是架构,eng是工程版,适合调试)。要是想编译特定设备(比如Pixel 6),得先下设备驱动,第一次尝试 用aosp_arm-eng,省事儿。

  • 开始编译
  • :执行make -j8j后面是CPU核心数,8核用j8,速度最快)。编译时间看配置——我用i7-12700H+16G内存,编译Android 13用了2小时;要是你电脑是4核+8G,可能要4-5小时,趁这时间去喝杯奶茶吧。

  • 拿镜像文件
  • :编译完成后,镜像在out/target/product/generic_arm目录下,主要有system.img(系统)、boot.img(引导)、recovery.img( Recovery)。用fastboot刷到模拟器或手机就行——比如fastboot flash system system.img。我第一次刷完看到开机画面时,差点跳起来:终于成了!

    其实编译Android源码真没那么难,无非是“把复杂流程拆成简单步骤,每步做对”。我当初也是小白,踩了无数坑才 出这些经验,今天全给你了。要是你跟着做遇到问题,或者成功编译了,欢迎在评论区告诉我——我帮你参谋,也想沾沾你的喜气~


    其实repo同步中断真的特正常,我第一次同步Android源码的时候,光中断就来了三次——一会儿小区WiFi突然限速,一会儿电脑自动休眠,急得我直拍桌子,但后来才发现,repo这工具早帮你想好了,它会自动记着你同步到哪一步,哪怕断了,再输一遍repo sync命令,它就乖乖接着之前的进度继续跑,完全不用从头开始,省了好多时间。

    要是你总碰到超时中断的情况(就是终端里弹出“connection timed out”的提示),那我给你俩亲测有效的办法:第一招是加个超时参数,在repo sync后面加上timeout=120,意思是让它多等两分钟再判定超时,别那么敏感;第二招更绝,直接把源换成国内的,比如清华或者阿里云的镜像源——我之前用Google原生源的时候,同步一次要四五个小时,还老断,换成清华源之后,速度一下快了三倍,而且几乎没再断过。对了,文章里有具体怎么换源的步骤,你直接照着复制粘贴命令就行,不用自己瞎琢磨。

    还有啊,你要是担心同步到一半断了白费劲,其实完全不用——repo的同步机制是“增量式”的,每一步都有记录,哪怕断个十次八次,只要最后能把所有代码块拉下来,结果都是一样的。我有次同步的时候,中间因为要出门,直接关了电脑,第二天打开再输repo sync,它照样接着跑,没一会儿就完成了,特省心。

    对了,要是你用的是无线网卡, 换成有线网络试试——我之前用WiFi同步总断,后来插了根网线,一下就稳了,毕竟有线的网络延迟比无线低多了,同步的时候不容易掉包。这些都是我踩过的坑,你照着做,肯定能少走点弯路。


    必须用Ubuntu系统编译吗?Windows或macOS不行吗?

    Android源码对Ubuntu的兼容性最好,新手 优先选Ubuntu 20.04或22.04版本。Windows需要通过WSL(Windows Subsystem for Linux)模拟Linux环境,但可能遇到权限、性能或依赖库冲突问题;macOS则可能因SDK版本、文件系统权限或M1/M2芯片架构导致编译失败。第一次尝试的话,用Ubuntu能避开80%的“玄学问题”。

    repo同步源码时频繁中断怎么办?

    repo sync中断是正常现象,它会自动记录同步进度——重新执行repo sync就能继续。如果频繁因超时中断,可以加timeout=120参数(允许超时2分钟),或换成清华/阿里云等国内镜像源(文章里有具体配置方法),能大幅提升同步稳定性。

    编译Android源码需要多少硬件资源?

    内存 至少8G(最好16G),内存不足时可以通过加swap分区解决(文章里有swap配置步骤);存储空间至少预留100G——Android源码约30-40G,编译后的产物(out目录)约50-60G,总占用大概80-100G。如果存储不够,会出现“磁盘空间不足”的编译错误。

    编译好的镜像怎么刷入手机?

    首先要解锁手机的Bootloader(不同品牌方法不同,比如小米需要在官网申请解锁工具),然后将手机进入Fastboot模式(通常是关机后按“电源键+音量减”),用USB连接电脑,执行fastboot flash命令刷入:比如刷系统镜像用fastboot flash system system.img,刷引导镜像用fastboot flash boot boot.img。注意:部分设备(如Pixel)需要额外刷入厂商提供的Vendor镜像(闭源驱动),否则可能无法启动。

    依赖库安装提示“无法定位包”怎么办?

    先执行sudo apt update刷新软件源缓存——很多时候是源没更新导致包找不到;如果还是失败,可能是包名在新版本Ubuntu中发生了变化(比如Ubuntu 22.04下libncurses5-dev改为libncurses-dev),或镜像源本身缺少该包。这时可以换成清华/阿里云等国内源(文章里有换源方法),通常能解决90%的依赖安装问题。

温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解! 联系邮箱:lgg.sinyi@qq.com

给TA打赏
共{{data.count}}人
人已打赏
行业资讯

AI图形生成器免费在线用|无水印|新手一键做图超简单

2025-9-10 19:06:55

行业资讯

EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常原因及解决方法

2025-9-10 19:38:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索