适用环境:

系统:ubuntu-12.04.2-desktop-amd64

JDK:sun-java6-jdk

Android源码:android_4.1.1_r1

虚拟机安装:

VMware Workstation版本:vmware-workstation-full-9.0.2-1031769

安装前请大家切记BIOS的VT功能,不开的话安装Ubuntu 64bit 是不允许的。

我的电脑是HP pro 3380(实习生进来分配的机型)

开启方式:Bios -> Security -> System Security -> enable VT

开启后就可以安装VM并自行破解。

注意:要先开启VT开安装VM,先安装VM再开启VT的话是不行的。

Unbuntu安装:

版本:ubuntu-12.04.2-desktop-amd64.iso

下载地址:下载

注意:建议下载上面的版本,因为不同版之间的差异可能会引起一些不同问题。

选择64位是因为Google Android 的源码编环境译默认是要在64bit系统上跑的,虽然可以修改mk文件让它可以在32bit系统上跑,但是比较麻烦且网上的修改方法都比较老,找不到适合Android 4.X 的修改方法。

建议:

内存设置到1.5G以上吧,不然很容易出现OOM。

硬盘大小设置为40G以上。

详细安装过程省略....

JDK安装:

添加安装JDK6:

$sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

$sudo apt-get update

$sudo apt-get install sun-java6-jdk

采用在线安装,可以不用手动设置环境变量。

控制台输入  java -version

如下显示,则表示JDK安装成功:

安装软件环境

apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev  build-essential zip curl libncurses5-dev  libwxgtk2.8-dev   zlib1g-dev  xsltproc  libc6-dev-i386  libglu1-mesa:i386 lib32z1  libxml2-utils

注意:其中红色的是解决自己在安装过程中遇到各种问题所用到的软件,在这里跟google推荐的软件(黑色的)一起装,可以避免遇到我同样的问题,可以少很多折腾。

检查环境

检查gcc和jdk的版本号是否正确:

$gcc –v

$g++ -v

$cc –v

$java –version

$javac –version

Ubuntu 12 默认自带g++和gcc,若您的系统不自带请先安装:

$sudo apt-get install gcc-4.3 g++-4.3 gcc-4.3-multilib g++-4.3-multilib

环境设置

在控制台执行:

gedit ~/.bashrc

增加以下代码(要根据自己的实际情况修改):

---------------------------------------------------------------------------------------------------------------

# set android environment

ANDROID_DIR=/home/ccf/src

ANDROID_CODE_ID=android_4.1.1_r1

ANDROID_BUILD_TOP=${ANDROID_DIR}/${ANDROID_CODE_ID}

ANDROID_PRODUCT_OUT=${ANDROID_BUILD_TOP}/out/target/product/generic

ANDROID_SWT=${ANDROID_BUILD_TOP}/out/host/linux-x86/framework

export PATH=${PATH}:${ANDROID_DIR}:${ANDROID_BUILD_TOP}:${ANDROID_PRODUCT_OUT}:${ANDROID_SWT}

# set android sdk environment

export ANDROID_SDK_HOME=/home/ccf/eclipse/adt-bundle-linux-x86_64-20130717/sdk

export PATH=${PATH}:${ANDROID_SDK_HOME}:${ANDROID_SDK_HOME/tools}

# set android emulator environment

ANDROID_EMULATOR=${ANDROID_BUILD_TOP}/out/host/linux-x86/bin

export PATH=${PATH}:${ANDROID_EMULATOR}

-------------------------------------------------------------------------

其中ccf是我的用户名。

src是放源码文件夹的位置。

android_4.1.1_r1是在src下源码问文件夹

开始编译前的一些准备:

1.设置swap大小:

因为在编译源码的时候,占用内存是非常大的,Ubuntu默认的swap交换区是比较少了。

这里我们把它设置大。

sudo dd if=/dev/zero of=/boot/swapfile bs=1024 count=4194304

    sudo mkswap -v1 /boot/swapfile

    sudo swapon /boot/swapfile

    free

    sudo gedit /etc/fstab

    /boot/swapfile swap swap defaults 1 1

在控制台执行  free命令,可以看到以下结果则说明设置成功

2.避免因为Java虚拟内存问题导致编译失败

在源码目录中找到:

frameworks/base/tools/layoutlib/Android.mk
将文件中的 
$(hide) java -jar $(built_layoutlib_create_jar) \ 这行修改为如下:
$(hide) java  -Xmx512M  -jar $(built_layoutlib_create_jar) \

编译Android源码

下载源码(具体下载参考网上教程)

解压源码:
tar –xvf  android_4.1.1_r1.tgz

得到以下文件夹

用命令行进入android_4.1.1_r1  文件夹

source build/envsetup.sh

lunch sdk-eng

make  -j4  (j代表线程数)

最后出现Installed file list: out/target/product/generic/installed-files.txt表示编译成功。

期间可能出现一些问题,我遇到的问题我会连同解决方法写在最后面,如果里面没有你遇到的问题,请自行谷歌吧。

编译出来的东西会放在:

/home/ccf/src/android_4.1.1_r1/out

编译SDK

source build/envsetup.sh

lunch sdk-eng

make sdk -j2  (j代表线程数)

编译后的sdk在

/home/ccf/src/android_4.1.1_r1/out/host/linux-x86/sdk

将自己编译出来的SDK放在/home/ccf/src/android_4.1.1_r1目录下。

【注】copy出来是防止SDK被意外修改或后面编译ADT时被自动删掉。

运行模拟器

自进入源码目录下/home/ccf/src/android_4.1.1_r1

运行下面命令:

source build/envsetup.sh

lunch sdk-eng

emulator

问题总结

以下问题是我在编译过程中遇到比较典型的问题,并附有解决方法

问题1.

Libz.so问题

1.安装sudo apt-get install libglu1-mesa:i386

2.安装sudo apt-get install lib32z1

(要装这个,可能会提示缺少上面那个,所以要先装上面那个。)

说明:GNU C Library: 32-bit shared libraries for AMD64

问题2.

[out/target/product/generic/system/etc/apns-conf.xml] Error 127

sudo apt-get install  libxml2-utils  、

xml相关的包。

问题3.

make:*** [out/target/common/obj/APPS/android.core.tests.libcore.package.com.no-core-tests-res_intermediates    /  noproguard.classes-with-local.dex] Killed

默认的1GB的,所以,增加swap空间即可,执行命令如下:

    sudo dd if=/dev/zero of=/boot/swapfile bs=1024 count=4194304

    sudo mkswap -v1 /boot/swapfile

    sudo swapon /boot/swapfile

    free

    sudo vi /etc/fstab

    /boot/swapfile swap swap defaults 1 1

问题4.

出现make: *** [out/target/common/docs/offline-sdk-timestamp] 错误 45
(又可能是你的linux下少安装了一些东西如果不是在看下面
sudo apt-get install bison libc6-dev-amd64 g++-multilib 
sudo apt-get install flex

把这个目录删除:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates
再make sdk

问题5

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 at java.util.Vector.<init>(Vector.java:111)
 at java.util.Vector.<init>(Vector.java:124)
 at org.antlr.analysis.DFA.createTransitionTableEntryForState(DFA.java:551)
 at org.antlr.analysis.DFA.createStateTables(DFA.java:440)
 at org.antlr.codegen.CodeGenerator.genLookaheadDecision(CodeGenerator.java:645)
 at org.antlr.grammar.v3.CodeGenTreeWalker.block(CodeGenTreeWalker.java:2876)
 at org.antlr.grammar.v3.CodeGenTreeWalker.rule(CodeGenTreeWalker.java:2382)
 at org.antlr.grammar.v3.CodeGenTreeWalker.rules(CodeGenTreeWalker.java:1537)
 at org.antlr.grammar.v3.CodeGenTreeWalker.grammarSpec(CodeGenTreeWalker.java:1441)
 at org.antlr.grammar.v3.CodeGenTreeWalker.grammar_(CodeGenTreeWalker.java:461)
 at org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:421)
 at org.antlr.Tool.generateRecognizer(Tool.java:655)
 at org.antlr.Tool.process(Tool.java:468)
 at org.antlr.Tool.main(Tool.java:93)
make: *** [out/host/common/obj/JAVA_LIBRARIES/smali_intermediates/smaliLexer.java] 错误 
解决:

这个问题同样是提示java虚拟机内存的问题,解决的思路是一样的,但解决这个问题需要修改的是external/smali/smali/Android.mk

这个mk文件,将Android.mk文件中的

$(GEN): PRIVATE_CUSTOM_TOOL = java -jar $(ANTLR_JAR) -fo $(dir $@) $<.这行,修改为

$(GEN): PRIVATE_CUSTOM_TOOL = java -Xmx512m  -jar $(ANTLR_JAR) -fo $(dir $@) $<.

问题6.

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 at java.util.zip.ZipOutputStream.getUTF8Bytes(ZipOutputStream.java:498)
 at java.util.zip.ZipOutputStream.writeLOC(ZipOutputStream.java:348)
 at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:179)
 at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:92)
 at com.android.tools.layoutlib.create.AsmGenerator.createJar(AsmGenerator.java:241)
 at com.android.tools.layoutlib.create.AsmGenerator.generate(AsmGenerator.java:225)
 at com.android.tools.layoutlib.create.Main.main(Main.java:98)
make: *** [out/host/common/obj/JAVA_LIBRARIES/temp_layoutlib_intermediates/javalib.jar] 错误 1
make: *** 正在删除文件“out/host/common/obj/JAVA_LIBRARIES/temp_layoutlib_intermediates/javalib.jar”
解决:这个问题也是java虚拟机内存的问题,解决的方法是修改frameworks/base/tools/layoutlib/Android.mk
将文件中的 
$(hide) java -jar $(built_layoutlib_create_jar) \ 这行修改为如下:
$(hide) java  -Xmx512M  -jar $(built_layoutlib_create_jar) \

问题7.

make: *** [out/target/common/obj/APPS/android.core.tests.libcore.package.dalvik.no-core-tests-res_intermediates/noproguard.classes-with-local.dex] Error 130

上次make或或者mmm的时候生成一些错误的东西

可以使用:make clean 再重新make

解决:rm out/target/common/obj/APPS/ -r (如果还是有这样的错误,就只能clean了)

Android 4.1.1源码编译的更多相关文章

  1. Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程

    Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程   在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...

  2. android 5.0 (lollipop)源码编译环境搭建(Mac OS X)

    硬件环境:MacBook Pro Retina, 13-inch, Late 2013 处理器  2.4 GHz Intel Core i5 内存  8 GB 1600 MHz DDR3 硬盘60G以 ...

  3. Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...

  4. Android stdio Apktool源码编译

    Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

  5. android源码编译过程

    1.下载好android源码包. 2.装好vm,ubuntu(如果能在实体机装linux更好). 3.安装所需要的deb包 在终端执行如下命令: sudo apt-get install flex b ...

  6. android后台截屏实现(1)--源码编译

    前段时间接到任务要实现后台截图并上传的功能,在网上查了好久,发现遇到这类问题的人还不少.经过一番对比后发现还是修改并编译源码中的screencap类然后通过JNI来调用这种方法比较可靠,而其他的在ja ...

  7. 有关android源码编译的几个问题

    项目用到编译环境,与源码有些差异不能照搬,关键是连源码都没编译过,下面基本上是行网上照的各种自学成才的分享,病急乱投医了,都记在下面作为参照吧. 1.验证是否编译正确,在终端执行 emulator & ...

  8. android 隐藏API 在源码下编译报错cannot find symbol symbol

    应该是我对android 不熟悉的缘故,今天使用源码编译了一个调用了隐藏api的应用程序始终报错: cannot find symbol symbol  : class IPackageInstall ...

  9. Android源码编译jar包BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY的区别(二)

    上文简单介绍了BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY编译出来jar包的区别, 那么你如果拿到了一个内容是dex格式的jar包,而你又偏偏需要这个ja ...

随机推荐

  1. 如何使用 APM 搞定 PHP 应用的性能优化?

    APM 究竟是什么? 很多人都是第一次听说 APM 的概念,本文主要阐述如何使用 APM 的解决方案来实现 PHP 应用性能的优化.首先先介绍一下 APM (Application Performan ...

  2. c++实现文本中英文单词和汉字字符的统计

    源代码下载:http://download.csdn.net/detail/nuptboyzhb/4987141 1.统计文本中汉字的频数,为后续的文本分类做基础.对于汉字的统计,需要判断读取的是否为 ...

  3. jstack(查看线程)、jmap(查看内存)和jstat(性能分析)

    公司内部同事分享的一篇文章 周末看到一个用jstack查看死锁的例子.昨天晚上总结了一下jstack(查看线程).jmap(查看内存)和jstat(性能分析)命令.供大家参考 1.Jstack 1.1 ...

  4. SQLite入门与分析(四)---Page Cache之事务处理(3)

    写在前面:由于内容较多,所以断续没有写完的内容. 11.删除日志文件(Deleting The Rollback Journal)一旦更改写入设备,日志文件将会被删除,这是事务真正提交的时刻.如果在这 ...

  5. Qt: 内建对话框(各种对话框都有了,且用到了qobject_cast解析sender的技术)

    #include "BuiltinDialog.h" #include <QtGui/QTextEdit> #include <QtGui/QPushButton ...

  6. 安装tomcat出现failed to install tomcat8 service错误及解决方法

    failed to install tomcat8 service 如下图所示:     一.安装tomcat出现failed to install tomcat6 service错误及解决方法(转载 ...

  7. Git教程之多人协作

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin.要查看远程库的信息,用git remote:

  8. Git教程(6)常用技巧之远程分支简单示例

    基础 1,"master" 与"origin" “master” 是当你运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用,“origin” ...

  9. ASCII码表详解

    第一部分:ASCII非打印控制字符表 ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备.例如,12代表换页/新页功能.此命令指示打印机跳到下一页的开头.(参详ASCII码表 ...

  10. Target host is not specified错误

    对于httpClient4.3访问指定页面,可以从下面的demo抽取方法使用. 注意:对于URL必须使用 http://开始,否则会有如下报错信息: 或者在设置cookie时带上domain: coo ...