适用环境:

系统:ubuntu-12.04.2-desktop-amd64

JDKsun-java6-jdk

Android源码:android_4.1.1_r1

虚拟机安装:

VMwareWorkstation版本:vmware-workstation-full-9.0.2-1031769

安装前请大家切记BIOSVT功能,不开的话安装Ubuntu64bit是不允许的。

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

开启方式:Bios->Security->SystemSecurity->enableVT

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

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

Unbuntu安装

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

下载地址:下载

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

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

建议:

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

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

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

JDK安装:

添加安装JDK6

$sudoadd-apt-repository"debhttp://archive.canonical.com/lucidpartner"

$sudoapt-getupdate

$sudoapt-getinstallsun-java6-jdk

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

控制台输入java-version

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

Android 4.1.1源码编译_第1张图片

安装软件环境

apt-getinstallgit-coregnupgflexbisongperflibsdl1.2-devlibesd0-devbuild-essentialzipcurllibncurses5-devlibwxgtk2.8-devzlib1g-devxsltproclibc6-dev-i386libglu1-mesa:i386lib32z1libxml2-utils

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

检查环境

检查gccjdk的版本号是否正确:

$gccv

$g++-v

$ccv

$javaversion

$javacversion

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

$sudoapt-getinstallgcc-4.3g++-4.3gcc-4.3-multilibg++-4.3-multilib

环境设置

在控制台执行:

gedit~/.bashrc

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

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

#setandroidenvironment

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

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

#setandroidsdkenvironment

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

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

#setandroidemulatorenvironment

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

exportPATH=${PATH}:${ANDROID_EMULATOR}

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

其中ccf是我的用户名。

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

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

开始编译前的一些准备:

1.设置swap大小:

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

这里我们把它设置大。

sudoddif=/dev/zeroof=/boot/swapfilebs=1024count=4194304

    sudomkswap-v1/boot/swapfile

    sudoswapon/boot/swapfile

    free

    sudogedit/etc/fstab

    /boot/swapfileswapswapdefaults11

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

Android 4.1.1源码编译_第2张图片

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

在源码目录中找到:

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

编译Android源码

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

解压源码:
tarxvfandroid_4.1.1_r1.tgz

得到以下文件夹

Android 4.1.1源码编译_第3张图片

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

sourcebuild/envsetup.sh

lunchsdk-eng

make-j4(j代表线程数)

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

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

编译出来的东西会放在:

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

编译SDK

sourcebuild/envsetup.sh

lunchsdk-eng

makesdk-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

运行下面命令:

sourcebuild/envsetup.sh

lunchsdk-eng

emulator

Android 4.1.1源码编译_第4张图片

问题总结

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

问题1.

Libz.so问题

1.安装sudoapt-getinstalllibglu1-mesa:i386

2.安装sudoapt-getinstalllib32z1

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

说明:GNUCLibrary:32-bitsharedlibrariesforAMD64

问题2.

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

sudoapt-getinstalllibxml2-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空间即可,执行命令如下:

    sudoddif=/dev/zeroof=/boot/swapfilebs=1024count=4194304

    sudomkswap-v1/boot/swapfile

    sudoswapon/boot/swapfile

    free

    sudovi/etc/fstab

    /boot/swapfileswapswapdefaults11

问题4.

出现make:***[out/target/common/docs/offline-sdk-timestamp]错误45
(又可能是你的linux下少安装了一些东西如果不是在看下面
sudoapt-getinstallbisonlibc6-dev-amd64g++-multilib
sudoapt-getinstallflex

把这个目录删除:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates
makesdk

问题5

Exceptioninthread"main"java.lang.OutOfMemoryError:Javaheapspace
atjava.util.Vector.<init>(Vector.java:111)
atjava.util.Vector.<init>(Vector.java:124)
atorg.antlr.analysis.DFA.createTransitionTableEntryForState(DFA.java:551)
atorg.antlr.analysis.DFA.createStateTables(DFA.java:440)
atorg.antlr.codegen.CodeGenerator.genLookaheadDecision(CodeGenerator.java:645)
atorg.antlr.grammar.v3.CodeGenTreeWalker.block(CodeGenTreeWalker.java:2876)
atorg.antlr.grammar.v3.CodeGenTreeWalker.rule(CodeGenTreeWalker.java:2382)
atorg.antlr.grammar.v3.CodeGenTreeWalker.rules(CodeGenTreeWalker.java:1537)
atorg.antlr.grammar.v3.CodeGenTreeWalker.grammarSpec(CodeGenTreeWalker.java:1441)
atorg.antlr.grammar.v3.CodeGenTreeWalker.grammar_(CodeGenTreeWalker.java:461)
atorg.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:421)
atorg.antlr.Tool.generateRecognizer(Tool.java:655)
atorg.antlr.Tool.process(Tool.java:468)
atorg.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.

Exceptioninthread"main"java.lang.OutOfMemoryError:Javaheapspace
atjava.util.zip.ZipOutputStream.getUTF8Bytes(ZipOutputStream.java:498)
atjava.util.zip.ZipOutputStream.writeLOC(ZipOutputStream.java:348)
atjava.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:179)
atjava.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:92)
atcom.android.tools.layoutlib.create.AsmGenerator.createJar(AsmGenerator.java:241)
atcom.android.tools.layoutlib.create.AsmGenerator.generate(AsmGenerator.java:225)
atcom.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]Error130

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

可以使用:makeclean再重新make

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

更多相关文章

  1. 清除Mac中Android studio的配置文件
  2. Android读取assests目录下文件
  3. android 资源文件
  4. Android弹出异常dialog源码分析
  5. Android将获取到文件的uri转换为字符串的路径
  6. Android UI滑动加载源码
  7. Android之文件搜索工具类
  8. Android写sys文件节点
  9. android XML文件常用字符转义

随机推荐

  1. gradle-xxx.jar下载地址和gradle-xxx.zip
  2. Android组合按键功能定制(Framework)
  3. Android录音,和实现微信长按录音效果!
  4. Android(安卓)避免Activity转场动画退出
  5. Android(安卓)Intent传递对象摘要
  6. Android中给图片加边框
  7. 818
  8. Android开发环境搭建及入门相关
  9. 75.android 简单的获取当前可用运行内存,
  10. GitHub 优秀的 Android(安卓)开源项目