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源码的下载,和编译,后续继续更新相关文章,谢谢大家对本站的支持!