吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13019|回复: 39
收起左侧

[Android 原创] Ubuntu下编译Android源码

  [复制链接]
pcy190 发表于 2019-5-22 21:25
本帖最后由 pcy190 于 2019-5-22 21:29 编辑

最近尝试编译安卓源码,写了一下自己编译的过程,翻了一下自己的笔记,这里分享给大家。
这里尽可能使用的是国内的镜像源,速度应该比较快(包括后面的docker,也是大佬们修改过的脚本,这里感谢他们)

传统方法

JDK安装和版本切换

  • 安装Oracle JDK (此处编译Android4.4的源码,使用JDK6版本)
    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java6-installer
  • 也可以安装OpenJDK(安卓官方使用)(推荐)
    sudo add-apt-repository ppa:openjdk-r/ppa
    sudo apt-get update
    sudo apt-get install openjdk-7-jdk
  • JDK版本切换
    sudo update-alternatives --config java
    sudo update-alternatives --config javac

    安装依赖软件

    sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
    sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
    sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
    sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
    sudo apt-get install git-core gnupg flex bison gperf build-essential  
    sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
    sudo apt-get install libc6-dev-i386 
    sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
    sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
    sudo apt-get install lib32z-dev ccache bison

    下载 repo 工具

    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    ## 如果上述 URL 不可访问,可以用下面的:
    ## curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
    chmod a+x ~/bin/repo

    这里最好将加入到环境变量中,这样以后每次启动都不用再设置PATH

  • vim ~/.bashrc在文件最后添加
    export PATH=~/bin:$PATH

    然后刷新

    source ~/.bashrc
  • 如果是zsh的话,则编辑vim ~/.zshrc
    添加
    export PATH=~/bin:$PATH

    然后刷新

    source ~/.zshrc

下载和同步源码

参考 https://lug.ustc.edu.cn/wiki/mirrors/help/aosp#%E5%88%9D%E5%A7%8B%E5%90%8C%E6%AD%A5%E6%96%B9%E6%B3%951

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-7.1.1_r1
repo sync --force-sync --force-broken
  • 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
    REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
  • 同步也可以使用
    repo sync

    编译

    执行

    export USE_CCACHE=1
    export CCACHE_DIR=ccache
    prebuilts/misc/linux-x86/ccache/ccache -M 50G

    准备编译环境

    source build/envsetup.sh

    用lunch命令选择编译目标

    lunch aosp_angler-userdebug   //lunch aosp_arm64-eng
    make clobber
    make -j12
    所有的编译目标的格式都是:BUILD-BUILDTYPEBUILD指的是指定特性的结合,
    BUILDTYPE是下面列出的其中一个:
    Buildtype 用途
    user 有限的权限;适合一般用户
    userdebug 类似user模式,但有root权限和debug能力,适合debug
    eng 带有额外的debug工具的开发配置。

运行

export ANDROID_PRODUCT_OUT=out/target/product/generic
export ANDROID_BIN=out/host/linux-x86/bin
PATH=$ANDROID_BIN:$PATH

source build/envsetup.sh
lunch aosp_arm-eng
emulator64-arm -gpu off -memory 2048

PS

编译出错

编译出现flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertioncnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed. Aborted (core dumped)
可以将

export LC_ALL=C

添加到bashrc。或者直接执行。LC_ALL=C 是为了去除所有本地化的设置,让命令能正确执行。

make版本问题

编译Android源码需要make的版本为3.8.1或者3.8.2(在Ubuntu18上的make版本太新了)需要降版本

  • 在http://ftp.gnu.org/gnu/make/下载相应版本的压缩包,然后解压,切换目录
  • 执行
    ./configure --prefix=/usr
    make 
    sudo make install

    如果出现错误提示glob/glob.c:xxx:  undefined  reference  to __alloca'的错误,
    修改 /glob/glob.c为(即加两行注释)

    //      #if  !defined  __alloca  &&  !defined  __GNU_LIBRARY__
    #  ifdef        __GNUC__
    #    undef  alloca
    #    define  alloca(n)        __builtin_alloca  (n)
    #  else        /*  Not  GCC.    */
    #    ifdef  HAVE_ALLOCA_H
    #      include  <alloca.h>
    #    else        /*  Not  HAVE_ALLOCA_H.    */
    #      ifndef  _AIX
    #        ifdef  WINDOWS32
    #          include  <malloc.h>
    #        else
    extern  char  *alloca  ();
    #        endif  /*  WINDOWS32  */
    #      endif  /*  Not  _AIX.    */
    #    endif  /*  sparc  or  HAVE_ALLOCA_H.    */
    #  endif        /*  GCC.    */
    #  define  __alloca        alloca
    //      #endif

    保存后编译通过。(这个错误是glibc2.7引起的)

随笔

编译的时候make 12线程就会有这样的壮观场面

采用docker自动编译

linux至少要分配100g的硬盘空间。

安装docker

默认源中没有docker,我们需要在添加backports源,在/etc/apt/sources.list文件 加入下面这行

deb http://http.debian.net/debian jessie-backports main

运行如下命令安装docker

apt-get update
apt-get install docker.io

开始编译

  1. 开始之前先启动docker服务,不然到后面会报错

    /etc/init.d/docker start
  2. 设置AOSP_VOL环境变量,设置为你要存放源码的路径,给VMWare添加硬盘扩容的设置成挂载的硬盘的路径。(注意这个export会在重新打开一个shell以后失效)

    export AOSP_VOL=/home/Android
  3. 下载Wrapper脚本,我这里演示编译kitkat(Android 4.4),编译其他版本可以参考, 脚本对国内环境做了优化,使用速度比较快的清华源。

    curl -O https://raw.githubusercontent.com/tiann/docker-aosp/master/tests/build-kitkat.sh
  4. 编译源码,直接运行上一步下载下来的源码。该脚本会下载docker镜像,并且下载Android源码到AOSP_VOL指定的路径,然后编译。(注意要使用root权限,否则将无法正常使用docker)

    sudo bash ./build-kitkat.sh

    编译完成后,使用的是系统默认自带的内核,


免费评分

参与人数 19威望 +1 吾爱币 +30 热心值 +18 收起 理由
more路穷途 + 1 + 1 谢谢@Thanks!
遗忘暮色丶 + 1 + 1 谢谢@Thanks!
qtfreet00 + 1 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
寒尘丶Coldust + 1 + 1 用心讨论,共获提升!
anysuy + 1 热心回复!
云幻灭 + 1 + 1 谢谢@Thanks!
zys_ + 1 + 1 谢谢@Thanks!
Cuiyn + 1 + 1 用心讨论,共获提升!
方xx + 1 + 1 用心讨论,共获提升!
萧萧冷者 + 1 + 1 热心回复!
SomnusXZY + 1 + 1 热心回复!
fy0536 + 1 + 1 我很赞同!
luli1111 + 1 + 1 谢谢@Thanks!
JIE1997 + 1 + 1 我很赞同!
奥斯特 + 1 + 1 谢谢@Thanks!
xindajiadian + 1 + 1 我很赞同!
stars-one + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
A1pine + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

  • · Aarow|主题: 988, 订阅: 304

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| pcy190 发表于 2019-5-23 12:14
fy0536 发表于 2019-5-23 09:22
楼主用的哪里的源,我按照上文做不下去!!
安装openjdk-7-jdk需要openjdk-7-jre,然后需要……,最后卡在tz ...

源码我用的是中科大的源,然后是Ubuntu18.04
现在的Ubuntu安装源默认没有openjdk7,你要手动添加一下仓库
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
另外如果你的环境很复杂,推荐使用docker编译,基本不用考虑环境问题。
让利润奔跑 发表于 2019-12-11 10:01
请教下楼主,我运行的时候出现了repo init --depth 1 -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.4.4_r2.0.1 --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
fatal: cannot make .repo directory: Permission denied
这个错误,我已经用sudo运行了,可是一直通不过
lianglu 发表于 2019-5-22 21:34
wjw0716 发表于 2019-5-22 21:38
插个眼,以后用到再来看
18023474704 发表于 2019-5-22 21:49
我选deepin有as
stars-one 发表于 2019-5-22 22:39
感谢分享,以后有时间再过来学习!
xindajiadian 发表于 2019-5-22 22:49
Ubuntu下可以编译修改Android系统吗?
panxun 发表于 2019-5-22 23:09
感谢楼主分享
mzycy 发表于 2019-5-23 08:44
想学……但是又没啥时间
fy0536 发表于 2019-5-23 09:22
本帖最后由 fy0536 于 2019-5-23 09:28 编辑

楼主用的哪里的源,我按照上文做不下去!!
安装openjdk-7-jdk需要openjdk-7-jre,然后需要……,最后卡在tzdata上了
用aptitude也没装上
看了一下别的帖子,说是可能是源的问题,我用的阿里云的源
我用的是ubuntu 16.04
hxp.china.sh 发表于 2019-5-23 09:25
完全看不懂,倒计时90天              
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表