Ubuntu Android源码以及内核下载与编译

本教程是基于Ubuntu下Android6.0.1源码以及内核的下载和编译,记录一下,以后也就不用自己去找资料,一遍一遍的尝试了。可以翻墙的,英语好的,直接去AndroidSource.

系统环境:Ubuntu14.04LTS

Android版本:6.0.1

重要网址

清华大学镜像
AndroidSource

下载前的准备

安装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,慢慢下吧!

编译

进入AOSP根目录

初始化编译环境

. build/envsetup.sh

选择编译目标,选择1,所有选项的意思,后面更新

lunch

开始编译,这里使用了4个并发数:

make -j4

使用打包工具mmm,完成命令后会在根目录下生成android.irp,用android studio打开一个现有项目,打开android.irp即可

mmm development/tools/idegen/

运行当前版本的模拟器

将emulator源码目录加入PATH中

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

设置源码编译输出目录

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

运行emulator

emulator

下载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

编译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

运行当前内核版本的模拟器

运行当前模拟器

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

查看内核版本

adb shell
cd proc
cat version

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

以上就是对Android源码的下载,和编译,后续继续更新相关文章,谢谢大家对本站的支持!

(0)

相关推荐

  • Ubuntu中为Android系统上编写Linux内核驱动程序实现方法

    在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与.据业内统计,Android研发人才缺口至少30万.目前,

  • Ubuntu中为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序

    在Ubuntu Android简单介绍硬件抽象层(HAL)一文中,我们简要介绍了在Android系统为为硬件编写驱动程序的方法.简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的硬件抽象层中.接着Ubuntu Android系统上编写Linux内核驱动程序实现方法一文中举例子说明了如何在Linux内核编写驱动程序.在这一篇文章中,我们将继续介绍Android系统硬件驱动程序的另一方面实现,即如何在硬件抽象层中增加硬件模块来和内核驱动程序交互.在这篇文章中,我们还将学习到

  • 详解Android获取系统内核版本的方法与实现代码

    Android获取系统内核版本的方法 这里主要实现获取Android Linux 内核的版本号,网上关于这类文章不是很多,这里记录下,希望能帮助到大家, 实现代码: public static String getKernelVersion() { String kernelVersion = ""; InputStream inputStream = null; try { inputStream = new FileInputStream("/proc/version&q

  • Android内核源码 在Ubuntu上下载,编译,安装

    从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件.那么,如何才能DIY自己的内核呢?这篇文章一一道来. 一. 首选,参照前一篇在Android源码 在Ubuntu上下载,编译和安装准备好Android源代码目录.       二. 下载Linux Kernel for Android源代码. 1.

  • Ubuntu中为Android系统上实现内置C可执行程序测试Linux内核驱动程序

    在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序.在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello.proc系统文件/proc/hello和devfs系统属性文件/sys/class/hello/hello/val.进一步,还通过cat命令来直接访问/proc/hello和/sys/class/hello/hello/val文件来,以验证驱动程序的正确性.在这一篇文章里,我

  • Ubuntu Android源码以及内核下载与编译

    本教程是基于Ubuntu下Android6.0.1源码以及内核的下载和编译,记录一下,以后也就不用自己去找资料,一遍一遍的尝试了.可以翻墙的,英语好的,直接去AndroidSource. 系统环境:Ubuntu14.04LTS Android版本:6.0.1 重要网址 清华大学镜像 AndroidSource 下载前的准备 安装OpenJdk sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get in

  • Android源码 在Ubuntu上下载,编译和安装

    看完了前面说的几本书之后,对Linux Kernel和Android有一定的认识了,是不是心里蠢蠢欲动,想小试牛刀自己编译一把Android源代码了呢?一直习惯使用Windows系统,而Android源代码是不支持在Windows上编译上,于是决定使用虚拟机安装Ubuntu,然后下载.编译和安装Android源代码.      一. 环境准备. 1. 磁盘空间预留20G左右,内存3G,因为一边要跑主机,一边要跑虚拟机,内存要求还是比较高的,这样才会比较流畅. 2. 安装VMWare 7.1.4.

  • Windows下获取Android 源码方法的详解

    前言:略!获取源码的原因千千万~~~ 1.安装GIT工具.GIT是林纳斯·托瓦兹大神为了管理器Linux内核开发而创立的分布式版本控制软件.下载地址:http://code.google.com/p/msysgit/一路next将安装进行到底. 2.在磁盘剩余空间较大的磁盘下新建一个文件夹,用于存放源码.我在F盘下:新建了androidsourcecode文件夹. 3.访问Android源码网站,获取你所需要的源码"下载链接".网站地址:http://android.git.kerne

  • Android 源码如何编译调试

    android提供的工具链和开发工具比较完善,因此它的开发环境的搭建比较简单,相信许多朋友都已经搭建好环境,并编写了HelloActivity入门程序了.这里先看几个问题: 1.android的文件系统结构是怎样的,我们安装的程序放在那里? 编译android源码之后,在out/target/product/generic一些文件: ramdisk.img.system.img.userdata.img. system. data.root 其中, system.img是由 system打包压缩

  • Ubuntu Docker 源码编译(1.9.1 )详解

    Ubuntu Docker 源码编译: 网上对Ubuntu Docker 源码编译的资料有很多,但是对于具体如何操作,和命令的实现不是多细致,经过我一番折腾,终于把源码编译搞定,这里记录下,以便以后使用参考, 一.系统环境 Ubuntu14.04 desktop 64位 二.安装Docker(Docker内编译Docker) $ sudo apt-get update $ sudo apt-get install wget $ wget -qO- https://get.docker.com/

  • Ubuntu环境源码编译安装xdebug的方法

    本文实例讲述了Ubuntu环境源码编译安装xdebug的方法.分享给大家供大家参考,具体如下: 前面介绍了Ubuntu环境编译安装PHP和Nginx的方法,这里再来讲解一下源码编译安装xdebug的方法. 下载并解压xdebug xdebug下载地址:https://xdebug.org/download.php 我下载的是2.3.3,其实我也不清楚这些版本的区别,就随便下载了一个. cd /usr/local/src wget https://xdebug.org/files/xdebug-2

  • Android源码导入AndroidStudio或IntelliJ IDEA的方法

    目录 一.前言 二.idegen使用方法 1. 全编AOSP 2. 编译生成idegen.jar 3. 生成IDE配置文件 4. 将工程导入到IDE 一.前言 经常和Android系统源代码(AOSP)打交道的人,如果要去修改系统源码,显然用SourceInsight.Notepad++.vim这些工具有些麻烦,并且想快速补全代码也做不到.我们可以用idegen来生成针对AndroidStudio或IntelliJ IDEA的Android系统源代码工程配置文件,它位于Android系统源代码工

  • Android源码学习之工厂方法模式应用及优势介绍

    工厂方法模式定义: Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 常用的工厂方法模式结构: 如上图所示(截取自<Head Firs

  • 从Android源码剖析Intent查询匹配的实现

    前言     这篇文章主要是介绍一下Android Intent,并且从Android源码的角度对Intent查询匹配过程进行分析. Intent介绍     Intent的中文是"意图"的意思,而意图是一个非常抽象的概念,那么在Android的编码设计中,如何实例化意图呢?因此Android系统明确指定一个Intent可由两方面属性来衡量. 主要属性:包括Action和Data.其中Action用于表示该Intent所表达的动作意图,Data用于表示该Action所操作的数据.   

  • Android源码学习之组合模式定义及应用

    组合模式定义: Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly. 将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 如上图所示(截取自<Head First De

随机推荐