ubuntu14.04下载编译android4.4.2

来源:互联网 发布:sql语句建立table 主键 编辑:程序博客网 时间:2024/04/28 06:20

使用ubuntu下载编译android源代码
主要参考的文章:http://blog.csdn.net/gobitan/article/details/24367439/
但是这里的android下载地址,我是一直下载不下来,结合国内镜像下载进行了修改:

环境准备:
基本环境:ubuntu-14.04-desktop-64bit LTS(裸机或者Windows下虚拟机安装均可,12.04也可以,但10.04目前不支持了)
其他要求:空闲磁盘空间100G以上,代码部分接近10G,其他为git和编译中间和目标文件准备

==========================================

第一部分:环境初始化

  1. 安装Oracle JDK
    注意:如果编译Android4.4不能用OpenJDK,必须用Oracle JDK1.6,1.7目前是不支持的。
    具体如何安装Oracle JDK,请参见我的另一篇单独的文章,[Ubuntu Linux下安装Oracle JDK] http://blog.csdn.net/gobitan/article/details/24322561.

实际根据我的情况增加下载完成后:
cd /usr/bin
ln -s -f java安装路径下的jar文件(不加的话,编译的时候回找不到命令) ln -s-f java安装路径下的javap文件(不加的话,编译的时候可能会出现OSErro错误)
ln -s-f java安装路径下的javah文件(不加的话,编译的时候可能会出现OSErro错误)

  1. 安装必备工具软件
    注意:这里与官方的有个包不同,官方的包会报错.
    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
$sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dri:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev  $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so 

ERROR关于libgl1-mesa-glx:i386安装的问题,解决办法:
unity-control-center : 依赖: libcheese-gtk23 (>= 3.4.0) 但是它将不会被安装
依赖: libcheese7 (>= 3.0.1) 但是它将不会被安装
更改为:
sudo apt-get install libgl1-mesa-glx-lts-quantal:i386

 $sudo apt-get install subversion subversion-tools.

实际根据我的情况增加,下面这些一并用sudo apt-get install 命令安装,否则编译的时候回各种找不到和OsError
git
gnupg
flex
bison
gperf
build-essential
zip
curl
libc6-dev
libncurses5-dev:i386
x11proto-core-dev
libx11-dev:i386
libreadline6-dev:i386
g++-multilib
mingw32
tofrodos
python-markdown
libxml2-utils
xsltproc
zlib1g-dev:i386

  1. 配置USB访问权限
    将如下内容加入到/etc/udev/rules.d/51-android.rules文件中
    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
# adb protocol on passion (Nexus One)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"  # fastboot protocol on passion (Nexus One)   SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"  # adb protocol on crespo/crespo4g (Nexus S)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"  # fastboot protocol on crespo/crespo4g (Nexus S)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"  # adb protocol on stingray/wingray (Xoom)   SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"  # fastboot protocol on stingray/wingray (Xoom)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"  # adb protocol on maguro/toro (Galaxy Nexus)   SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"  # fastboot protocol on maguro/toro (Galaxy Nexus)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"  # adb protocol on panda (PandaBoard)   SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"  # adb protocol on panda (PandaBoard ES)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username>"  # fastboot protocol on panda (PandaBoard)   SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"  # usbboot protocol on panda (PandaBoard)   SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"  # usbboot protocol on panda (PandaBoard ES)   SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"  # adb protocol on grouper/tilapia (Nexus 7)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"  # fastboot protocol on grouper/tilapia (Nexus 7)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"  # adb protocol on manta (Nexus 10)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"  # fastboot protocol on manta (Nexus 10)   SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"

然后执行如下命令,将上述文件中的username替换为你的用户名。
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
$sudo sed -i ‘s/username/dennis/g’ /etc/udev/rules.d/51-android.rules
4. 配置ccache
安装ccache并将export USE_CCACHE=1加入到~/.bashrc中。
[plain] view plaincopy

$sudo apt-get install ccache  $source ~/.bashrc 

==========================================

第二部分:源代码下载

  1. 安装repo
    (1) 创建目录
    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
$ mkdir ~/bin  $ PATH=~/bin:$PATH  

(2) 下载repo工具
注:由于防火墙的原因,官方提供的链接无法使用,需替换为如下:
官方的为curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
可用的:
[plain] view plaincopy
curl http://git-repo.googlecode.com/files/repo-1.12 > ~/bin/repo

上面的都下载不下来:
我下载的是

curl http://7xpgbx.dl1.z0.glb.clouddn.com/repo > ~/bin/repo

下载后,需要修改REPO_URL的地址为清华的镜像地址:
REPO_URL = ‘https://aosp.tuna.tsinghua.edu.cn/git-repo’
另外,ubuntu自带的vim是最简易版的,感觉使用有很多问题,需要重新下载vim
sudo apt-get install vim

(3) 增加可执行权限
[plain] view plaincopy

$ chmod a+x ~/bin/repo
  1. 初始化Repo客户端
    (1)创建目录
    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
$mkdir aosp  $cd aosp 

(2) 初始化repo
注:后面可能出现网络错误,请先将如下内容加入到/etc/hosts中然后做后面的步骤。
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
74.125.71.82 www.googlesource.com
74.125.31.82 android.googlesource.com
203.208.46.172 cache.pack.google.com
59.24.3.173 cache.pack.google.com
至于为什么要出现网络错误,你懂的!
[plain] view plaincopy
$repo init -u https://android.googlesource.com/platform/manifest -b android-4.4.2_r2

根据实际修改为:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.4.2_r2

注意:如果是在虚拟机中执行,需要采用email验证的方式,详细参见参考资料[2].
设置git的用户名和邮件地址,将您的真实email地址和name替换了:
[plain] view plaincopy
git config –global user.email “you@example.com”
git config –global user.name “Your Name”
修改aosp/.resp/manifest.xml,将fetch=”..”改为:
fetch=”https://android.googlesource.com/”

  1. 下载源代码
    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    $repo sync
    注意:系统可能会提示你升级repo,最好不要升级,除非你有十足信息解决升级后的一系列问题。

好了,慢慢等吧,短则数小时,长则几天几夜!我花了5个小时

==========================================

第三部分:源代码编译

  1. 设置ccache
    注:aosp为源代码根目录
    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
$ cd aosp  $ prebuilts/misc/linux-x86/ccache/ccache -M 50G  
  1. 设置输出目录
    略:由于我未分区,因此采用默认的out目录
  2. 初始化编译环境
    [plain] view plaincopy
dennis@dubuntu1404:~/devenv/aosp$ . build/envsetup.sh   including device/samsung/manta/vendorsetup.sh  including device/generic/mips/vendorsetup.sh  including device/generic/armv7-a-neon/vendorsetup.sh  including device/generic/x86/vendorsetup.sh  including device/lge/mako/vendorsetup.sh  including device/lge/hammerhead/vendorsetup.sh  including device/asus/tilapia/vendorsetup.sh  including device/asus/deb/vendorsetup.sh  including device/asus/grouper/vendorsetup.sh  including device/asus/flo/vendorsetup.sh  including sdk/bash_completion/adb.bash  dennis@dubuntu1404:~/devenv/aosp$   
  1. 选择编译目标包
    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
dennis@dubuntu1404:~/devenv/aosp$ lunch  1dennis@dubuntu1404:~/devenv/aosp$ make -j4  

注:j4中的数字跟你的CPU个数和核数有关,详细参见参考资料[3].
整个编译过程,大约花了三个小时。编译成功后会在out目录下生成img文件。

、、、、、、、以下为尝试

  1. 将img加载到物理机
    (1) 将手机用USB数据线连接到机器
    (2) 安装fastboot工具
    [plain] view plaincopy
    sudoaptgetinstallandroidtoolsfastboot(3)ANDROIDPRODUCTOUT /.bashrc[plain]viewplaincopyexportANDROIDPRODUCTOUT=/home/dennis/devenv/aosp/out/target/product/mako..bashrc使(4)fastboot[plain]viewplaincopy adb reboot bootloader
    此时手机会重启,呈现一个与往不同的fastboot界面

(5) 将编译的img刷到目标机
[plain] view plaincopy

dennis@dubuntu1404:~/devenv/aosp/out$ fastboot flashall -w

Bootloader Version…: PRIMEMD04
Baseband Version…..: I9250XXLJ1

Serial Number……..: 0146A0D00600900B

checking product…
FAILED
Device product is ‘tuna’.
Update requires ‘mako’.
finished. total time: 0.035s

(注:由于我的物理机三星I9250在lunch里没有对应的型号,因此会加载失败,这里这是记录过程)

如果需要编译其他版本,可执行如下步骤,这里选择虚拟机用的通用版本aosp_arm-eng。
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
cdaospdennis@dubuntu1404: /devenv/aosp . build/envsetup.sh
including device/samsung/manta/vendorsetup.sh
including device/generic/mips/vendorsetup.sh
including device/generic/armv7-a-neon/vendorsetup.sh
including device/generic/x86/vendorsetup.sh
including device/lge/mako/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/asus/deb/vendorsetup.sh
including device/asus/grouper/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including sdk/bash_completion/adb.bash

dennis@dubuntu1404:~/devenv/aosp$ lunch aosp_arm-eng

PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.4.2
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
TARGET_CPU_VARIANT=generic
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=KVT49L

OUT_DIR=out

dennis@dubuntu1404:~/devenv/aosp$ make -j4

PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.4.2
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
TARGET_CPU_VARIANT=generic
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=KVT49L

OUT_DIR=out

including ./abi/cpp/Android.mk …
including ./art/Android.mk …
….中间过程省略
Install system fs image: out/target/product/generic/system.img
out/target/product/generic/system.img+ maxsize=588791808 blocksize=2112 total=576716800 reserve=5947392
编译完成,执行如下命令可以将您刚build好的ROM在模拟器里运行起来,第一次启动的时间可能比较长:
emulator &  
注意:如果提示找不到emulator命令,可将如下环境变量重新初始化一遍(也就是每次重新进入系统运行的时候,都需要初始化一遍),lunch后面的参数要与你编译的ROM选项一致。  
[plain] view plaincopy
. build/envsetup.sh
$lunch aosp_arm-eng
转载请注明出处: 雨水:http://blog.csdn.net/gobitan/article/details/24367439

更新日志:
2014-4-25:增加自己编译的ROM在模拟器里的运行方法;

参考资料:
1. http://source.android.com/source/initializing.html
2. http://source.android.com/source/downloading.html
3. http://source.android.com/source/building-running.html

0 0
原创粉丝点击