适用环境:

系统: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. 12 求1+2+...+n

    参考 http://www.cppblog.com/zengwei0771/archive/2012/04/28/173014.html 和 http://blog.csdn.net/shiren_b ...

  2. 174. Dungeon Game

    题目: The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dung ...

  3. POJ3026——Borg Maze(BFS+最小生成树)

    Borg Maze DescriptionThe Borg is an immensely powerful race of enhanced humanoids from the delta qua ...

  4. caffe简易上手指南(三)—— 使用模型进行fine tune

    之前的教程我们说了如何使用caffe训练自己的模型,下面我们来说一下如何fine tune. 所谓fine tune就是用别人训练好的模型,加上我们自己的数据,来训练新的模型.fine tune相当于 ...

  5. (转)详解LVS负载均衡之三种工作模型原理和10种调度算法

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linuxnx.blog.51cto.com/6676498/1195379 LV ...

  6. 给TextView中的text上下左右添加一张图片

    1,在xml中配置使用,android:drawableLeft 等 其它的有:android:drawableTop,android:drawableBottom,android:drawableR ...

  7. 命令行下玩VC

    说明:(1)转载请注明出处:http://www.cnblogs.com/opangle/p/4298155.html (2)以下以VS2013为例,并假设VC安装路径为%VC_INSTALL_PAT ...

  8. js2word/html2word的简单实现

    js2word/html2word的简单实现 以C#描述如下:             StringBuilder sb = new StringBuilder();            sb.Ap ...

  9. VBSCRIPT事件绑定(隐式)

    很多新版的浏览器都开始不支持VBSCRIPT 所以系统开始不断地有script错误,开始比较多地接触VBSCRIPT vbscript 和javascript 事件绑定的类似方法为 vbscript: ...

  10. ORACLE【0】:基本操作

    最新工作中用到oracle越来越多,自己虽然也能写点SQL.存储过程.触发器什么的,但是对数据库管理还是陌生的很,现在就将自己最近所学的一步一步整理下来. 1.windows上如何启动oracle 安 ...