首先对这个东西先吐槽一下吧,因为我安装了五天,今晚才成功导入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
最后附上一张图吧