关于Android源代码的编译

因项目需要,最近进行了基于源代码的项目开发,将开发编译心得记录下来,提醒自己,也顺便帮下别人 嘎嘎

个人建议,如果只是为了学习,虚拟机编译就足够了,不过时间很长,如果是工作,建议向领导另申请一台机器,刚开始我打算用ubuntu桌面版来进行开发,但是桌面版最多给你分配30G的硬盘,编译到最后经常卡死。最后直接向项目经理申请了一台专门用于编译的机器。

步骤

1.下载android源代码,不解释

2.配置linux环境

2.1 安装java JDK,自己去java官网去下载即可,值得注意的是,下载正确的版本,比如64位的机器,下载32位的JDK,后面的就不用说了(我先哭会...— —!),android源代码的编译貌似对JDK的版本也有要求,原来使用的JDK版本较高,编译不过去,后来改为1.6.38版本就好了

2.2linux下的JDK是.bin结尾的文件,下载到本地后,进入JDK的目录,然后执行. /XXX.bin即可,注意.和/之间有空格,安装完成之后去配置一下环境变量,打开/etc/profile文件

在profile文件末尾加入:

JAVA_HOME=/usr/share/jdk1.5.0_05

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

注意:刚修改的环境变量不会立即生效,因此需要执行一下 ./configure命令.重启也可以

3.安装交叉编译器

arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

gnutools-arc2.3-p2-ubuntu.tar.bz2

3.1将上面两个压缩包解压到/opt目录下

3.2配置环境变量

3.2.1

export PATH=$PATH:/opt/arm-2010q1/bin

export PATH=$PATH:/opt/gnutools/arc2.3-p2/elf32-4.2.1/bin

export PATH=$PATH:/opt/gnutools/arc2.3-p2/uclibc-4.2.1/bin

4.安装其他依赖的jar包

    $ sudo apt-get update
    $ sudo apt-get -y install git-core
    $ sudo apt-get -y install gnupg
    $ sudo apt-get -y install sun-java6-jdk flex
    $ sudo apt-get -y install bison
    $ sudo apt-get -y install gperf
    $ sudo apt-get -y install libsdl-dev
    $ sudo apt-get -y install libesd0-dev
    $ sudo apt-get -y install libwxgtk2.6-dev
    $ sudo apt-get -y install build-essential
    $ sudo apt-get -y install zip
    $ sudo apt-get -y install curl
    $ sudo apt-get -y install libncurses5-dev
    $ sudo apt-get -y install zlib1g-dev
    $ sudo apt-get -y install valgrind

5.开始编译

5.1进入到android源码的目录,执行source build/envsetup.sh

5.2执行 lunch f16ref-eng

如果这一步执行完出现如下信息,证明你的编译环境配置不正确,缺少安装包或者安装的不对

** Don't have a product spec for: 'f16ref'
** Do you have the right repo manifest?

5.3执行 make -j 32 后面跟着的数字是指执行的任务数,我一般使用的是16或32,具体和机器配置有关系


在编译的过程中,可能出现编译出错的情况,这时候会有具体的提示信息,根据这些提示信息google就行,这里给出我所遇到的问题及解决方案

g++: selected multilib '32' not installed

执行如下命令安装软件

sudo apt-get install g++-multilib
sudo apt-get install libc6-dev ia32-libs lib32ncurses5-dev x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev mingw32 tofrodos python-markdown libxml2-utils
sudo apt-get install g++-4.4-multilib


indexkey
vi frameworks/base/libs/utils/Android.mk

添加如下代码
#include <sys/resource.h>


找不到zconf.h

创建一个软链接
ln -s /usr/include/x86_64-linux-gnu/zconf.h /usr/include


aggregate ‘rlimit rlim’ has incomplete type and cannot be defined
/vm/native/dalvik_system_Zygote.cpp

添加如下代码
#include <sys/resource.h>


编译失败的原因总结

1.gcc 或g++版本太高,高于4.6

解决方案:降低gcc g++版本

1.1.(/usr/bin)

sudo apt-get install gcc-4.4 

sudo apt-get install g++-4.4 

1.2

装完后在/usr/bin目次下执行

 ls -l gcc*,发现gcc 链接到gcc-4.6,  须要将它改为链接到gcc-4.4

sudo mv gcc gcc.bak 

sudo ln -s gcc-4.4 gcc

1.3同理 

ls -l g++*

sudo mv g++ g++.bak

sudo ln -s g++-4.4 g++ 

1.4以上步骤执行完成后,执行如下命令检查是否修改成功

gcc -v

g++ -v

2.JDK版本不对

3.源码本身有错,根据报错信息google即可

4.编译所需要的软件未安装完全,同上

5.机器配置不够

/dalvik/dx/etc/dx文件最后添加下面两行代码

# exec java $javaOpts -jar "$jarpath" "$@"
exec java -Xms2048m -Xmx2048m -jar "$jarpath" "$@"

由于我们的项目对底层API依赖的太多,所以第一次需要完全编译,来获取底层依赖包,后续只需要执行mm即可

\out\target\product\f16ref\system\app 生成的APK所在的目录,可以直接push进去运行



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值