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

 更新时间:2016年09月06日 14:49:20   作者:相对静止  
本文主要介绍Android源码的下载和编译,这里整理了相关资料及如何下载和编译的详细步骤,有需要的小伙伴可以参考下

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

系统环境: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入门教程
flexThe Fast Lexical Analyzer快速的语法分析工具
bison用于自动生成语法分析器程序自动生成语法分析器程序
gperf完美的散列函数生成器使用 gperf 实现高效的 C/C++ 命令行处理
build-essential编译内核中make menuconfig进图形编译build-essential
zipLinux 下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-i386Embedded GNU C Library: 32-bit development libraries for AMD64libc6-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源码的下载,和编译,后续继续更新相关文章,谢谢大家对本站的支持!

相关文章

  • Android 关闭多个Activity的实现方法

    Android 关闭多个Activity的实现方法

    这篇文章主要介绍了Android 关闭多个Activity的实现方法的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Android界面切换出现短暂黑屏的解决方法

    Android界面切换出现短暂黑屏的解决方法

    这篇文章主要介绍了Android界面切换出现短暂黑屏的解决方法,本文讲解的是一个取巧方法,需要的朋友可以参考下
    2015-04-04
  • Android Studio无法改变Button背景颜色解决办法

    Android Studio无法改变Button背景颜色解决办法

    今天我来和大家探讨一个在Android开发中常见但可能让初学者感到困惑的问题,如何在Android Studio中改变Button的背景颜色,这个问题看似简单,但实际操作中可能会遇到一些意想不到的挑战,接下来,我将从多个角度为大家提供解决方案,需要的朋友可以参考下
    2024-05-05
  • Android SQLite操作之大数据处理与同时读写方法

    Android SQLite操作之大数据处理与同时读写方法

    这篇文章主要介绍了Android SQLite操作之大数据处理与同时读写方法,实例分析了Android操作SQLite时基于事务的数据缓存与批量插入技巧,以及同时读写的相关实现方法与注意事项,需要的朋友可以参考下
    2016-07-07
  • Android中引用其他程序的文本资源超简单方法

    Android中引用其他程序的文本资源超简单方法

    这篇文章主要介绍了Android中引用其他程序的文本资源超简单方法,本文直接给出实现代码,需要的朋友可以参考下
    2015-01-01
  • android导入第三方jar包报错 如何正确导入jar包

    android导入第三方jar包报错 如何正确导入jar包

    怎样在android平台上使用第三方jar包,为什么我在引入了,编译时没有错误,运行时就有错误,报无法实例化错误,请问这是什么原因,本文给于解决方法,需要了解的朋友可以参考下
    2012-12-12
  • Android在自定义类中实现自定义监听器方式

    Android在自定义类中实现自定义监听器方式

    这篇文章主要介绍了Android在自定义类中实现自定义监听器方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 关于Gradle下载失败问题的快速解决方法

    关于Gradle下载失败问题的快速解决方法

    这篇文章主要给大家分享了关于Gradle下载失败问题的快速解决方法,文中介绍了两种解决方法,分别是使用已存在的gradle版本和手动下载gradle,文中介绍的非常详细,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Android中Fragment相互切换间不被回收的实现方法

    Android中Fragment相互切换间不被回收的实现方法

    这篇文章主要给大家介绍了关于Android中Fragment相互切换间不被回收的实现方法,文中给出了详细的示例代码和注释供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • React Native 实现热更新并自动签名打包功能

    React Native 实现热更新并自动签名打包功能

    这篇文章主要介绍了React Native 实现热更新并自动签名打包,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04

最新评论