Android4.2.2编译笔记:从Ubuntu环境开始

来源:互联网 发布:mac帧ip类型数据长度 编辑:程序博客网 时间:2024/06/05 20:24

环境安装

: Ubuntu的apt-get不能直接下载安装mingw32,需要修改sources.list

打开sources.list
输入命令:sudo gedit /etc/apt/sources.list
在sources.list末尾添加以下语句(红色),并保存退出。
deb http://us.archive.ubuntu.com/ubuntu trusty main universe
再次更新apt
输入命令:sudo apt-get update

: jdk6的安装包

下载 jdk
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u45-oth-JPR
现在的oracle要求下载前必须登陆
我的下载链接是http://download.oracle.com/otn/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin?AuthParam=1505035529_0f65ac80402d599c34529df11e4d531d
下载完成后,并不能双击运行这么简单(这便是Linux)
$ mkdir ~/bin
$ mv jdk-6u45-linux-x64.bin ~/bin/
$ cd ~/bin/
$ chmod +x jdk-6u45-linux-x64.bin
$ ./jdk-6u45-linux-x64.bin

编辑~/.bashrc 添加(运行$ gedit ~/.bashrc)
export PATH=~/bin:$PATH
export JAVA_HOME=~/bin/jdk1.6.0_45/
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
运行source ~/.bashrc 使之生效

: 可能遇到的bug

Android can only be built by versions 3.81 and 3.82
解决方法如下,下载3.8
ftp://ftp.gnu.org/gnu/make/make-3.81.tar.gz
make 3.8.1 的安装步骤:
tar -zxvf make-3.81.tar.gz (解压)
然后 cd 到 make3.8.1目录下
执行 ./configure (配置)
make (编译)
make install (安装)
在make3.8.1 目录下 会出现 make 这个编译好的 命令
./make -version (GNU Make 3.81 )
cp make /usr/bin/make (把刚刚编译好的make 把系统的覆盖)
make -version(GNU Make 3.81)
在运行时可能会碰到aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
需要运行之下命令
sudo apt-get install libswitch-perl
sudo cpan -f Switch

gcc 和g++版本过高
1、进入/usr/bin
ls -l gcc* 查看gcc当前连接版本
rm gcc 删除gcc连接
同理
ls -l g++*
rm g++
2、降级到4.4.7版本
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo apt-get install g++-4.4-multilib //64位
sudo apt-get install gcc-4.4-multilib
ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
ln -s /usr/bin/g++4.4 /usr/bin/g++

make: [out/host/linuxx86/obj/EXECUTABLES/emulator_intermediates/android/skin/window.o] Error 1
sudo apt-get install libx11-dev

: 官网要求的软件

$ sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

把源码导入虚拟机

创建共享文件夹以实现Window到Ubuntu文件的拷贝
在VirtualBox的共享文件夹中创建固定分配
如(WinShare 映射路径为 D:\WinShare)

设置好共享名后,进入Ubuntu系统,打开终端,先执行命令,在挂载点目录添加“winShare”目录,接着执行”sudo mount -t vboxsf WinShare /home/jian/winShare/”,就能完成共享文件夹的设置。

设置自动挂载,重启虚拟机系统共享仍在。
可以在/etc/fstab中添加一项
WinShare /home/jian/winShare/ vboxsf rw,gid=110,uid=1100,auto 0 0

卸载挂载点命令:umount -f /home/jian/winShare/

编译项目

进入源码根目录
编译初始化:
在终端中执行:
source build/envsetup.sh
执行后输出:
including device/asus/grouper/vendorsetup.sh
… …
including sdk/bash_completion/adb.bash
选择编译目标:
lunch full-eng
执行后会又以下信息提示:
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.2
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-2.6.32-45-generic-x86_64-with-Ubuntu-10.04-lucid
HOST_BUILD_TYPE=release
BUILD_ID=JOP40C
OUT_DIR=out :

编译代码:
在终端中执行:make -j4
-j4:表示用四个线程来编译:
我用虚拟机,配置为4g,交换空间为2g,编译了大约6个小时。

运行模拟器

在终端中执行:emulator
这里写图片描述

在 ~/.bashrc
添加环境变量:
export ANDROID_PRODUCT_OUT=~/code/android-4.2/out/target/product/generic
export ANDROID_SWT=~/code/android-4.2/out/host/linux-x86/framework/

备注:
重启系统后:
执行emulator,出现如下错误:

directory could not be found.If you are an Android SDK user, please use '@<name>' or '-avd <name>'to start a given virtual device (see -help-avd for details).Otherwise, follow the instructions in -help-disk-images to start the emulator

解决:
source build/envsetup.sh
lunch sdk-eng
然后再执行
emulator
可以启动模拟器

主机配置:Window/4G
虚拟机配置
F盘剩余空间294G ->
起始时间是 19:22 ->

原创粉丝点击