欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-03-07 08:05:32
本教程是基于ubuntu下android6.0.1源码以及内核的下载和编译,记录一下,以后也就不用自己去找资料,一遍一遍的尝试了。可以*的,英语好的,直接去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进图形编译
zip linux 下zip包的压缩与解压 linux 下zip包的压缩与解压
curl 网络请求和提取工具
zlib1g-dev 用于发现gzip和pkzip的工具 binary package “zlib1g-dev” in ubuntu trusty
gcc-multilib 允许在64位机器中运行32位应用
g++-multilib 同上(g++编译工具)
libc6-dev-i386 embedded gnu c library: 32-bit development libraries for amd64
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源码的下载,和编译,后续继续更新相关文章,谢谢大家对本站的支持!