澳门新葡萄京娱乐场 16

澳门新葡萄京娱乐场Ubuntu下Android源码以及内核下载与编译

本课程是基于Ubuntu下Android6.0.1源码以致水源的下载和编写翻译,记录一下,以往也就无须自个儿去找材质,二次叁回的尝试了。能够翻墙的,德文好的,直接去AndroidSource.

安装Ubuntu系统:

一贯进去正题 ,具体细节参见

  • 系统情况:Ubuntu14.04LTS
  • Android版本:6.0.1
  • 关键网站
    浙大东军政高校学镜像
    AndroidSource

出于Android源码编写翻译谷歌(GoogleState of Qatar官方是推荐Ubuntu系统的,所以率先步就是安装Ubuntu系统,而小编要下载的Android5.0的体系,官方必要最低是Ubuntu12.04,这里是法定供给的网站
https://source.android.com/source/requirements**
自家想全数人第四回打算下载和编写翻译Android的源码,第不时间想到的终将是到百度上来搜教程,笔者也是那样的找了一篇博客,上面说可是使用Ubuntu14.10,因为她在下载和编写翻译的时候使用14.04自但是然了重重软件信任难点,然后自身就快了的去依据Ubuntu14.10了(小编用的设想机安装的Ubuntu,硬盘给了100G,内部存款和储蓄器2G),安装完毕了,然后根据教程去下载必要的软件吧,一下载全部平素不,那时候就懵了,怎么回事了?这时候旁边的同事见到了(他径直在利用Linux系统),见到本身用的14.10,告诉本人Ubuntu系统每年一次宣布的多少个版本之后1四月份公布的本子同一时间依旧偶数年版本才是漫漫帮忙版,也便是说14.10不是深远支撑版,这一个版本只保养7个月,所以软件都找不到了,同事说哪些博客确定是八年在此之前的了,我一看,果然是,然后又装了多少个14.04

在Ubuntu上下载、编写翻译和安装Android最新源代码

下载前的预备

安装OpenJdk

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
java -version

安装git

sudo apt-get install git-core

设置额外的创立

sudo apt-get install gnupg flex bison gperf build-essential 
  zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 
  lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache 
  libgl1-mesa-dev libxml2-utils xsltproc unzip
组建 功能 介绍网址
gnupg 加密工具 GPG入门教程
flex The Fast Lexical Analyzer 快速的语法分析工具
bison 用于自动生成语法分析器程序 自动生成语法分析器程序
gperf 完美的散列函数生成器 使用 gperf 实现高效的 C/C++ 命令行处理
build-essential 编译内核中make menuconfig进图形编译 build-essential
zip Linux 下zip包的压缩与解压 Linux 下zip包的压缩与解压
curl 网络请求和提取工具 curl网站开发指南
zlib1g-dev 用于发现gzip和PKZIP的工具 Binary package “zlib1g-dev” in ubuntu trusty
gcc-multilib 允许在64位机器中运行32位应用 multilib
g++-multilib 同上(g++编译工具) 多平台支持
libc6-dev-i386 Embedded GNU C Library: 32-bit development libraries for AMD64 libc6-dev-i386
lib32ncurses5-dev 待完善 待完善
x11proto-core-dev 待完善 待完善
libx11-dev 待完善 待完善
lib32z-dev 待完善 待完善
ccache 待完善 待完善
libgl1-mesa-dev 待完善 待完善
libxml2-utils 待完善 待完善
xsltproc 待完善 待完善
unzip 待完善 待完善

地点的资历便是提议大家,在找博客的时候应当要找相比较新的,因为软件产业的浮动超快,假诺因为版本的难题浪费时间,真的就劳民伤财了。

自身只是做一些补偿表明:

下载

因为互连网以至墙的来头,大家应用浙大东军政大学学镜像,步骤如下:

下载repo工具

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

下载源码

wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

ps:总共25G,逐步下吧!

再有硬盘大小意思,如若下载Android5.0照旧5.0之上的源码,硬盘好留下100G以上,其实源码并未多大,我5.1的源码下载完之后大约25G左右,最占空间的是在下载的进度中会下载三个.repo的隐没文件夹,那几个文件夹的法力是保存的有关git的兼具缓存命令,5.1的这几个文件夹大小大致40G左右,大小很震动,4.0.3的源码差不离4.5个G,它的.repo文件夹是10G多大小。由于笔者的硬盘空间有限所以在显然源码下载完成之后作者就把这几个.repo遮盖文件夹删掉了,因为笔者搜寻的那么些文件夹的成效是缓存git命令,试行repo
sync等下载源码命令的时候需求用到那么些文件夹中的内容,正是说这么些文件夹确定保障了地点和长途旅舍的链接,既然源码已经下载实现所以作者就删掉了。

1)下载android代码

编译

进入AOSP根目录

伊始化编写翻译景况

. build/envsetup.sh

分选编写翻译指标,接收1,全部选项的意思,前边更新

lunch

初叶编写翻译,这里运用了4个并发数:

make -j4

动用打包工具mmm,实现命令后会在根目录下生成android.irp,用android
studio张开二个存世项目,张开android.irp就能够

mmm development/tools/idegen/

下载Android源码

澳门新葡萄京娱乐场 ,$ repo init -u -b
android-4.2.2_r1.2

运作当前版本的模拟器

将emulator源码目录加入PATH中

export PATH=&PATH:~/bin/AOSP/out/host/linux-x86/bin

安装源码编写翻译输出目录

export ANDROID_PRODUCT_OUT=~/bin/AOSP/out/target/product/generic

运行emulator

emulator

1:更新源
开荒Ubuntu上自带的软件基本

2)下载kernel代码

下载Android内核源代码

跻身kernel目录,下载内核

git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git

跻身goldfish目录,接纳分支

cd goldfish
git branch -a
git checkout remotes/origin/android-goldfish-2.6.29

澳门新葡萄京娱乐场 1

$ git clone

编写翻译Android内核源代码

将陆陆续续编写翻译工具目录增添到PATH情状变量中

export PATH=$PATH:~/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin

开发goldfish下Makefile修正配置文件,找到ARCH,CROSS_COMPILE,将其修正如下

ARCH      ?=arm
CROSS_COMPILE  ?=/home/user/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/
arm-linux-androidkernel-

note:应当要设为相对路线。

变动配置文件以致编写翻译

make goldfish_defconfig
make

image.png

$ git checkout remotes/origin/android-goldfish-3.4 -b $LOCAL_KERNEL

运行当前根本版本的模拟器

运行当前模拟器

emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage

翻开内核版本

adb shell
cd proc
cat version

将软件源匡正成哈工业余大学学的镜像

3卡塔尔 搭建编写翻译情况

BUG

JDK内部存款和储蓄器溢出

FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/dex-dir/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] 错误 1

A:

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 

澳门新葡萄京娱乐场 2

64-bit:

image.png

$ sudo apt-get install git-core gnupg flex bison gperf build-essential

2:安装jdk
上边官方网站中有下载Android源码对应版本必要下载的jdk版本,这里下载openjdk-7-jdk

zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs

$  sudo apt install openjdk-7-jdk

x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev

安装好以往,配置到情状变量中

libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown

$ cd /etc
$ gedit profile

libxml2-utils xsltproc

事后会张开prifile文件,在文件的最终加上

32-bit:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/  
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin  
export JAVA_HOME  
export PATH

$ sudo apt-get install git-core gnupg flex bison gperf build-essential

然后保留,退出,如若不让保存,就改一下以此文件的权柄,恐怕利用vim来修正。
能够在命令行输入 java -version 来检查一下是否看到效果

zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev

3:安装要求的工具软件

libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown

$ sudo apt-get install git git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev 
$ sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
$ sudo apt-get install lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown 
$ sudo apt-get install libxml2-utils xsltproc gcc-multilib lib32readline5-dev

libxml2-utils xsltproc

在安装的经过中一旦现身些微软件被新的代替了,就利用apt-get install
命令去安装新的软件
4:配置Cache

4)编译android源码

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

aState of Qatar Java SDK版本不适合,校勘 build/core/main.mk

鉴于Google使用repo工具管理的Android源码,所以要先今后Repo工具
法定的下载教程地址:https://source.android.com/source/downloading
5:营造一个目录用来放repo工具,同时增添到path目录中

找到呼应的 $(error stop卡塔尔 ,注释起来 #$(error stop卡塔尔  ,那样之处有七个

$ mkdir ~/bin
$ PATH=~/bin:$PATH

b)$ source build/envsetup.sh

6:下载Repo工具,然后设置Repo可实施权限
因为大家把镜像改成了北大的镜像,所以从镜像中下载repo

$ make -j4

$ cd ~/bin
$ curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
$ chmod a+x ~/bin/repo

如若一切符合规律,将会生成android要求的多少个img文件

7:那是你在bin目录下就看到了二个叫repo的公文张开它

5)编译kernel

澳门新葡萄京娱乐场 3

aState of Qatar 使用android-4.2.2的工具链

image.png

$ export
PATH=XXX/android-4.2.2_r1.2/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH

校勘那个url路线成北大的源路线,保存退出。

并且纠正Makefile

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

ARCH ?= arm

百度为数不菲老博客不管在应用镜像下载的时候照旧采取git来下载repo,笔者及时也是一贯拿过来,总是出错,报「网络不能够连接」,明明是有网的,为何还不能够连接呢?作者想一定又是本子更新的难点,登入哈工业大学镜像的网址,就领悟了住户网址上说了使用自家下面的点子来连接。

CROSS_COMPILE ?= arm-eabi-

8:创设寄放Android源码的目录、起头化Repo,下载源码

b卡塔尔(قطر‎ 配置基本,注意,那几个地点有多少个布局文件能够筛选,笔者首先次用

$ mkdir ~/android
$ cd ~/android

arch/arm/configs/goldfish_defconfig 系统没办法起来,后来选择了

早先化repo,那是快要鲜明你要下载的源码,小编下载的是5.1.1的源码

arch/arm/configs/goldfish_armv7_defconfig
系统成功运营,android的SDK中就如也是用的那几个布局文件

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

$ cp  arch/arm/configs/goldfish_armv7_defconfig  $KERNEL_ROOT

下载Android源码,那步是最耗费时间的

make goldfish_armv7_defconfig 会提示‘‘goldfish_armv7_defconfig’ is
up to date,不予理会,接收上边包车型地铁法子获取 .config的计划文件

$ repo sync 

$ cp goldfish_armv7_defconfig  .config

注意事项:

c) make -j4

1、在源代码下载进程中,我们在源代码下载目录看不到任何文件,ctrl+H“呈现掩没”,会看到多个名字为.repo的文书夹,这么些文件夹是用来保存Android源代码的“有时文件”
2、文件最终下载临近形成时,会从.repo文件夹中程导弹出Android源代码
3、如若必需关闭计算机甘休下载,那么可以在源代码下载的终点中按Ctrl + C
不会促金敬道代码的不见或损坏
4、自动或然手动结束源代码的下载,能够接纳命令: repo sync 继续下载
5、因为在下载进度中因为网络可能怎么着原因会停顿,我们能够写贰个自动化脚本来当结束未来自动推行repo sync

生成img文件在arch/arm/boot/zImage

#!/bin/sh
repo sync 
while [ $? -ne 0 ]
do
repo sync 
done

6卡塔尔国  配置皮肤

在源码下载目录成立一个文书,比方down.sh,将下面的代码复制保存,然后甘休源码下载未来,实践脚本,实施命令:sh
down.sh
6、若是不分明源码是或不是下载全,能够多试行两次 repo sync 命令。

系统暗许的肌肤并未有按钮,糟糕调节和测量检验,小编还未察觉系统中皮肤的目录,所以下载android-4.2
SDK ,

编写翻译源码

利用内部的皮层来替换

一贯进去源码目录实践 make
命令,能够在背后钦点能够並且多少个线程工作,借使您的CPU是4线程能够执行make -j4 那样可以在编写翻译进程中让CPU丰硕利用

7)运营模拟器,我写了叁个本子,那样相比便利

编写翻译进度中的错误:
错误一:

$ ./run_emulator.sh

collect2: ld terminated with signal 9 [Killed]
make: *** [out/host/linux-x86/obj/EXECUTABLES/clang_intermediates/clang] 错误 1
make: *** 正在等待未完成的任务....

内容如下:

或者

#!/bin/sh

g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report
make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/content_content_common_gyp_intermediates/content/common/content_message_generator.o] 错误 4

out/host/linux-x86/bin/emulator -sysdir out/target/product/generic/
-system out/target/product/generic/system.img -ramdisk
out/target/product/generic/ramdisk.img -data
out/target/product/generic/userdata.img
-skindir /home/ubuntu/tools/bundle/sdk/platforms/android-17/skins -skin
WVGA800
-kernel
/home/ubuntu/android/emulator-4.2/goldfish-3.4/arch/arm/boot/zImage

缘由:在编写翻译进度中,内存占用量极高,若无安装swap分区,也许分区太小就能够报上述荒唐,当然假如你能改编写翻译源码的微Computer内部存款和储蓄器丰富大就不要安装调换分区了,也不相会世这些荒唐了。
解决办法:
运用 free -m 命令查看自身的置换分区,能够见见本人的交流分区之后2G

即使一切平常,你将能够见到本人定制的android系统运维了,高兴吧!

澳门新葡萄京娱乐场 4

,具体细节参见
在Ubuntu上下载、编写翻译和安装Android最新源代码 作者只是做一些互补表达:
1)下载android代码 $ repo init -u https:/…

image.png

下一场使用下边的下令扩充沟通分区

$ mkdir swap
$ cd swap
$ sudo dd if=/dev/zero of=swapfile bs=1024M count=5
$ sudo mkswap swapfile
$ sudo swapon swapfile

可以看看,作者设置扩充了5G 调换分区,bs的值和count的值相乘
正是你扩充的调换分区的值,最后两步是挂在您设置的交流分区

澳门新葡萄京娱乐场 5

image.png

安装完现在查看,沟通分区扩充了5G

此间自个儿的经历是:错误现身之后作者一直不阅览上面的 error 提醒,只看
make:***
那一行提醒了,然后就从头谷歌(Google卡塔尔(قطر‎解决办法,找了久久都没找到消除办法,大家在编写翻译的时候自然要找到有「error」字样的唤起,然后去寻找,当现身难题总会无法找到原因时,应当要相信料定会有人曾经碰到过了,鲜明是团结情势错了,因为本身马上在解决这么些错误的时候就差了一些放任,然后笔者想,编译Android源码的人如此多,不容许作者会碰着外人遇不到的主题素材,肯定以前有人境遇过并享受出来了,只是小编找找的秘籍不对,最终找到精晓除办法。

错误二:

/bin/bash: xmllint: 未找到命令
make: *** [out/target/product/generic/system/etc/apns-conf.xml] 错误 127
make: *** 正在等待未完成的任务....

肃清办法:
设置贰个工具

sudo apt-get  install libxml2-utils 

末段编写翻译完结终端截图

澳门新葡萄京娱乐场 6

image.png

运营模拟器:
编写翻译完结之后,就任其自流有这么的标题,笔者编写翻译的科学吧,怎么验证呢,基本上都以通过命令行运行模拟器来证实,网络广大都是把source(你的源码目录)/out/host/lunux-x86/bin
那么些路子配置到 PATH 中平昔推行 emulator
指令,就能够运营命令行了,然而当自家布署之后,系统提示未有emulator
命令,然后看bin目录下也尚无 emulator
施行文书,那是怎么吗?先说消除办法的,要想运营模拟器供给再实行两步命令

$ source build/envsetup.sh

试行完之后截图

澳门新葡萄京娱乐场 7

image.png

这么些命令的功效是导入一些实行脚本
接下来实践

$ lunch

进行完现在截图

澳门新葡萄京娱乐场 8

image.png

自身接受的是 1 ,aosp表示(Android Open Source
Project)Android开源项目,arm表示运营在arm结构的Computer上,eng表示编写翻译类型为工程版本

下一场在运营emulator,就涌出了模拟器

此间注意上边的两步也足以在编译源码早先,即make
命令施行以前施行,那样在编写翻译完毕未来直接就足以运作
emulator命令调用模拟器了。


2017/5/15更新
编译SDK

编写翻译SDK,比较轻易,作者起来就推行了下边那条命令

$ make sdk

假使您是看那个科目第壹回编写翻译sdk,就无须像自家近似一贯试行下面的授命,而是那样前后相继实行三条命令

$ source build/envsetup.sh
$ lunch sdk-eng
$ make sdk

荒谬总结:

若果您出现了那一个错误,上边编写翻译SDK的时候鲜明是和小编同多只实行了 make sdk
这一条命令

development/build/sdk.atree:500: couldn't locate source file: system/app/EmulatorSmokeTests/EmulatorSmokeTests.apk
make: *** [out/host/linux-x86/sdk/full/android-sdk_eng.zhanghe_linux-x86.zip] 错误 44

解决办法:

$source build/envsetup.sh //初始化构建环境
$lunch sdk-eng //选择目标

施行上边两步再去 make
sdk。这几个错误是足避防止的,正是在率先次编写翻译sdk在此以前就先进行这两步,然后在奉行make sdk,那几个错误就不会并发

末尾编写翻译达成,如下图,系统现已自行的将 zip
包解抓牢现。解压之后的文件夹正是编写翻译之后获得的SDK

澳门新葡萄京娱乐场 9

image.png

下载Android 内核

一:使用git 关联内核
在贮存源码的目录创立一个贮存内核的目录

$ makedir kernel

接下来利用git 关联,我这边运用南开的镜像

$ git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git

澳门新葡萄京娱乐场 10

image.png

二:查看你要下载的根底版本
从运营的模拟器中大家能够见见要使用的水源版本,笔者的模拟器使用的是3.4

澳门新葡萄京娱乐场 11

image.png

先是步的授命实施完现在,你会发觉在kernel 目录中有三个空文件夹
goldfish,走入到那几个goldfish目录中能够动用上面发号布令查看有怎么样基本的本子分支能够下载

$ git branch -a

澳门新葡萄京娱乐场 12

image.png

三:下载内核代码

$ git checkout remotes/origin/android-goldfish-3.4

下载达成截图

澳门新葡萄京娱乐场 13

image.png

编写翻译内核

一:配置遭遇变量

$ export PATH=$PATH:~/source/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin

上边是本人的门道地址,依照你本机之处进行改良

二:在goldfish 目录下找到 Makefile 文件更改

#ARCH        ?= $(SUBARCH)
#CROSS_COMPILE    ?= $(CONFIG_CROSS_COMPILE:"%"=%)
#上面注释掉,加入下面的
ARCH ?= arm
CROSS_COMPILE     ?= arm-eabi-

澳门新葡萄京娱乐场 14

image.png

三:在goldfish目录下 执行

$ make goldfish_armv7_defconfig

四:编写翻译起头

$ make

得逞截图:

澳门新葡萄京娱乐场 15

image.png

在目录下 kernel/goldfish/arm/boot 目录下就能够多了三个zImage 文件

五:使用大家团结编写翻译的木本运维模拟器
施行上面三条命令

$ source build/envsetup.sh
$ lunch sdk-eng
#指定内核文件启动模拟器
$ emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage

澳门新葡萄京娱乐场 16

image.png

能够看到编写翻译此功底的客商和编译的时间

错误总结:

在编写翻译内核的时候现身了多个荒谬,引致的结果是,在终极一步使用编写翻译好的基业运营模拟器的时候,模拟器平素黑屏

原因:
在退换完Makefile 文件之后应该实行下边那条命令

$ make goldfish_armv7_defconfig

然则本身推行的是

$ make goldfish_defconfig

这两个有啥分其他:那是依赖差别的CPU结构来实施分裂的授命,第八个指令是当您的模拟器CPU是
armv7结构的时候;实践第一个指令是你的CPU构造是armv5的时候,2.3本子之后的系统构造是用的是armv7了,所以小编应当推行第叁个指令。
再也试行,编译一次然后再开发银行模拟器就ok了。

参谋地址:
http://www.cnblogs.com/lanrenxinxin/p/5424554.html
http://jingyan.baidu.com/article/3c48dd34777079e10ae3585b.html
http://www.jianshu.com/p/367f0886e62b
http://www.jianshu.com/p/6d97b4a10b18

发表评论

电子邮件地址不会被公开。 必填项已用*标注