Ubuntu12.04.4 64bit下下载和编译Android源码4.0.1

Android 同时被 2 个专栏收录
4 篇文章 0 订阅
3 篇文章 0 订阅

首先对这个东西先吐槽一下吧,因为我安装了五天,今晚才成功导入eclipse进行调试,过程痛并快乐着,今晚成功了就像打六合彩一下,五天没关电脑了,因为要上课,有时候编译错误停止也得放学回来才能看到,各种心塞。为了避免后来者遭受这样的不幸,我记录下了我的安装过程,希望对你们有所帮助,其中很多错误网上都会有说明,我也是各种百度才解决的,有时候无法解决的话,认真去看一下错误的信息,摸索一下,自己也可以解决的,一定要对自己有信心,有耐心。广告时间完毕,进入正题,个人有个建议,如果你是第一次安装,希望可以先找多几篇教程看一遍,避免重蹈覆辙。进入正题吧:


先说一下环境:win8 8G内存+VMware虚拟机10.0.1 build-1379776,虚拟机安装的系统是:Ubuntu12.04.4 64bit   JDK:1.6.0_37 (下载链接看后面)

虚拟机如何安装就不说了,网上有教程,我预留的磁盘空间是160G,我安装Ubuntu,下载编译源码以及各种工具后,占用了41G,至于要留多少空间,你们看着办,要够


第一步:安装依赖包

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc

 安装过程中,可能会提示你包源不存在,你按照它的提示换掉对应的包就可以了 


第二步:下载安装JDK

这里要说明一下,是下载JDK1.6,我试过JDK1.7,不可以的,提示正确的是1.6,所以要切记,我后面会附上下载地址,现在以我的为例子,你的路径可以跟我的不一样

cd  /usr/lib/jvm 如果没有就创建这个目录$ sudo mkdir /usr/lib/jvm

将文件复制到该目录下$ sudo cp /home/ jdk-6u37-linux-x64 /usr/lib/jvm

进入该目录 $ cd /usr/lib/jvm

执行权限命令:$ sudo chmod +x jdk-6u37-linux-x64

执行安装命令:$ sudo ./jdk-6u37-linux-x64.bin

安装完毕后,就配置jdk的环境变量

编辑 : /etc/profile 文件, 用命令 sudo gedit /etc/profile 打开 profile 文件

在末尾添加:

JAVA_HOME=/usr/lib/jvm/jdk1.6.0_37
export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_ HOME/bin: $PATH

编辑 : /etc/environment 文件, 用命令 sudo gedit /etc/environment 打开environment 文件

在末尾添加:

PATH = "/usr/lib/jvm//jdk1.6.0_37/bin"
CLASSPATH="/usr/lib/jvm/jdk1.6.0_37/lib"
JAVA_HOME="/usr/lib/jvm//jdk1.6.0_37"

配置默认JDK,因为ubuntu中会有自带的OpenJdk,输入下面命令

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_37/bin/java 300

$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_37/bin/javac 300 

你也可以查看所有JDK版本:

$ sudo update-alternatives --config java

到此的话,可以输入Java -version看是否配置成功


第三步:准备下载Android源码

安装Repo

首先确保在你的home目录下面有一个bin目录,如果没有的话,执行下面命令:

$ mkdir ~/bin
$ PATH=~/bin:$PATH

然后下载Repo脚本并确保它能够执行

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

(如果用下面这个地址的话,不知道为什么会报错,不过网上几乎都是这个地址

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo)

接着,建立源码目录,注意源码目录所在的磁盘要保留有20G的空间,初始化repo
$ mkdir ~/MyAndroid
$ cd ~/MyAndroid
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

最后,下载源码

$ repo sync

假如出现中断,得话,再重复最后一步repo sync即可,我用VPN,要不下载不了,我这一步是晚上开着电脑,第二天睡醒就好了,因为校园网渣渣,所以下载很久


第四步:编译,这一步各种问题,各种心塞,不过不要怕,后面我要贴出一些出现的问题,如果没有你遇到的问题你可以百度一下,前辈们已经为我们扫清道路了,还有一点要说明,gcc4.6也可以编译成功的,不想网上说的硬要4.4

进入MyAndroid目录下,然后输入指令

$ make


第五步:运行emulator

$ emulator

如果找不到指令,输入下面命令

$ source build/envsetup.sh

$ lunch full-eng

$ emulator


第六步(可选),导入eclipse

首先,直接去Android官网下载ADT,你们上不了的话,我后面有网盘链接给你们

然后,解压后,需要在eclipse目录下修改一下eclipse.ini,不过我发的这个版本,不用修改了

其实就是修改一下-Xms256m -Xmx512m成这个数值就行了,我那个版本是-Xms512m -Xmx1024m,够大了,不过不用这么大,也不要太小,太小堆栈溢出

接着,通过指令进入到你编译好的源码根目录,我一开始直接到development/ide/eclipse/目录下找。classpath是看不到的,因为是隐藏文件,我后来才弄懂了,希望大伙注意一下

$ cp development/ide/eclipse/.classpath . (#将development/ide/eclipse/.classpath复制到你的源码根目录下,classpath隔一个空格还有一个点哈)
$ chmod u+w .classpath   (# Make the copy writable,改变classpath的档案权限至可以写入)

紧接着,将源码目录\development\ide\eclipse 中的android-formatting.xml和android.importorder导入eclipse

    android-formatting.xml用来配置eclipse编辑器的代码风格;
    android.importorder用来配置eclipse的import的顺序和结构。 

    window->preferences->java->Code style->Formatter中导入android-formatting.xml 
    window->preferences->java->Code style->Organize Imports中导入android.importorder。

最后,打开eclipse, 新建Java Project,指定一个name,接着将use default location勾掉,指定到你源码的目录下,finish

记住是建立Java project,不是Android project,不要搞错了

然后会出现红色感叹号,是两个包的丢失,直接进入Build path删除掉丢失的包,这时候可能有个别包报错,那就先退出来去修改一下.classpath,添加下面几行

<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar"/>
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/filterfw_intermediates/classes-jarjar.jar"/>
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/android-support-v13_intermediates/classes-jarjar.jar"/>

然后保存,打开eclipse,clean一下工程就行了,有个在腾讯工作的师兄推荐我使用source insight,他说这个比eclipse好多了,他还给我推荐了两本书,《深入理解android》邓凡平的一二卷


编译过程出现的问题:

问题一:

<built-in>:0:0: note: this is the location of the previous definition
host StaticLib: libOpenglCodecCommon (out/host/linux-x86/obj/STATIC_LIBRARIES/li
bOpenglCodecCommon_intermediates/libOpenglCodecCommon.a)
host SharedLib: libOpenglRender (out/host/linux-x86/obj/lib/libOpenglRender.so)
/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so] Error 1

解决方法:$ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so


问题二:

make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] 错误 1  

解决方法:

$ gedit  frameworks/compile/slang/Android.mk

将 local_cflags_for_slang 所在行最后的 -Werror 去掉:
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror 变成:
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter


问题三:

host StaticLib: libGLcommon (out/host/linux-x86/obj/STATIC_LIBRARIES/libGLcommon
_intermediates/libGLcommon.a)
host SharedLib: libGLES_CM_translator (out/host/linux-x86/obj/lib/libGLES_CM_tra
nslator.so)
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libGLES_CM_translator.so] Error 1

解决方法: sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so 


问题四:

<command-line>:0:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
 <built-in>:0:0: note: this is the location of the previous definition
 cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

解决方法:

将/build/core/combo/HOST_linux-x86.mk文件以下语句:
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
修改为
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0


问题五:

In file included from external/oprofile/libpp/arrange_profiles.cpp:24:0:
external/oprofile/libpp/format_output.h:94:22: 错误: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] 错误 1

解决方法
修改external/oprofile/libpp/format_output.h:94行
        mutable counts_t & counts;
改为:
        counts_t & counts;

基本上就这么多了,还有一些问题,不过只记得这么多了,如果你们遇到什么问题,也可以在博客下面留言,一起解决,一起学习,谢谢


附件:

ubuntu-14.04-desktop-amd64.iso系统镜像  http://yunpan.cn/cgiGnTPqqycmL  访问密码 ef6a

jdk-6u37-linux-x64.bin  http://yunpan.cn/cgiGpxgjtax9m  访问密码 914c


还有说明一下,我用Ubuntu-14.04.5的镜像时,虚拟机启动不起来,黑屏,不知道为什么,所以大家注意一下,如果知道为什么也可以告诉我,有什么写的不对的地方敬请指出,谢谢,分享一个网址:http://source.android.com/source/building.html

最后附上一张图吧


  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

VersionFish

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值