Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程
sudo apt-get install git-core 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 apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils xsltproc
下载 Android 源码:
有两种方法:
1. 直接下载别人已经下载打包的
百度网盘别人共享的:http://pan.baidu.com/share/link?shareid=7577&uk=4246628909 , 2.3.5版本,要先安装7z解压,然后获得一个大约2G多的tar,这个文件直接解压会出错,错误信息大概是说无法创建硬链接(hard link),使用下面的命令:
sudo tar -xf Android_Kernel.tar --exclude */.git -C /opt/android/sources
2. 使用 repo 获取
参考:http://jileniao.net/post-156.html
repo 的用法可参考 http://blog.csdn.net/sunweizhong1024/article/details/8055372
因为 repo sync 会因为网络中断,所以可以使用下面的脚本自动重新运行
#!/bin/bash
command="repo sync"
struct rlimit rlim;
dalvik/vm/native/dalvik_system_Zygote.cpp
make: *** [out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/grxmlcompile.o] Error 1
patch -p1 < 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
rm -f 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff
4. In file included from system/extras/ext4_utils/output_file.c:30: /usr/include/zlib.h:34: fatal error: zconf.h: 没有那个文件或目录 compilation terminated.
解决方法:原因是zlib1g-dev有个头文件修改了路径,及zconf.h放到了/usr/include/x86_64-linux-gnu/,所以将其拷贝到/usr/include/下即可了
5. make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/HTMLNames.h] 错误 2
解决方法:安装 sudo apt-get install libswitch-perl
验证
编译完成后,尝试一下我的编译结果:
编译后生成的模拟器 emulator 在源码的 out/host/linux-x86/bin 下,而生成的系统在 out/target/product/generic 目录下,主要的是system.img、userdata.img和 ramdisk.img。有两种方法可以运行emulator
第一种: 设置 ANDROD_PRODUCT_OUT 环境变量,将其设置为生成的系统存放目录,如我的机器上 out/target/product/generic:
export ANDROD_PRODUCT_OUT=out/target/product/generic (如果只是一次行测试,在终端窗口运行该命令即可,如果希望在以后使用,那么可以写入/etc/profile 或者 ~/.bashrc)
然后进入源码目录运行: emulator
这种情况下其使用的系统映像文件均来自与 ANDROID_PRODUCT_OUT指向的目录中的 system.img、userdata.img和 ramdisk.img文件,而其内核文件会使用源码目录中的 prebuilt/android-arm/kernel/kernel-qemu的文件
第二种:使用完整的 emulator 命令参数启动模拟器
emulator -kernel /develop/sources/android/2.3.5/prebuilt/android-arm/kernel/kernel-qemu -sysdir /develop/sources/android/2.3.5/out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
字体加粗部分应根据自己的源码路径进行修改。正如命令的参数的直观表示一样, -kernel 后面紧接着是指定内核文件,因为我没有编译自己的内核,所以直接使用源码提供的预先编译好的内核, -sysdir 参数后跟着的是系统的映像文件存放路径,后面的 -system、-data和-ramdisk等参数指定的文件如果没有使用绝对路径,那么就使用 -sysdir 指定的路径。
当我运行我编译好的 emulator 后出现了如下错误:
SDL init failure, reason is: No available video device
我前段时间刚好安装了最新的 Android SDK, 里面是带 emulator的,我就抱着试试看的态度,看看能不能成功:
1. 打开控制台端口,进入放置emulator 的目录
cd /opt/android/sdk/tools
2. 然后运行 emulator 命令
emulator -kernel /develop/sources/android/2.3.5/prebuilt/android-arm/kernel/kernel-qemu -sysdir /develop/sources/android/2.3.5/out/target/product/generic
成功!
如果我运行:
emulator -kernel /develop/sources/android/2.3.5/prebuilt/android-arm/kernel/kernel-qemu -sysdir /develop/sources/android/2.3.5/out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
则会出现错误:
qemu: could not load initrd 'ramdisk.img'
网上找有网友说使用完整路径来指定ramdisk路径即可,实验了一下,果真如此。 -ramdisk /develop/sources/android/2.3.5/out/target/product/generic/ramdisk.img, 还有一些帖子说 out/target/product/generic 路径需要写权限,不过我不属于这种情况,如果是使用其他用户编译的,或许会有这样的问题,把解决方法也写出来,备查:
chmod 777 out/target/product/generic
既然Android SDK的 emulator可以,但是我编译出来的 emulator不行,说明是emulator的问题,突然我想到会不会又是一个 64位和32位的问题。我编译的 emulator是 2.3.5源码的,那时候说不定是使用的32位开发包。在网上查资料,果然如我的猜测,那么解决方法很简单安装32位的开发包
我先是安装 X11 的32位开发包:
sudo apt-get install libX11-dev:i386 (注意冒号后面的 i386指示的是安装32位版本)
运行,还是一样的问题,肯定还有东西没有安装完整,再次找资料,还要安装 SDL的32位包:
sudo apt-get install libsdl1.2debian:i386
帖子还有说:
sudo apt-get install ia32-libs-sdl
(这个我没有试)
还有的说 export DISPLAY=:0
, 这个情况或许某些人会有用。
参考链接: http://stackoverflow.com/questions/4841908/sdl-init-failure-reason-is-no-available-video-device/10128566
比较不错的参考链接:
http://www.cnblogs.com/kobe8/p/3998379.html
http://www.cnblogs.com/webapplee/p/3946506.html
http://blog.csdn.net/jiangwei0910410003/article/details/37988637
http://www.omitol.com/archives/65.html
http://www.linuxidc.com/Linux/2012-09/70052p2.htm
Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程的更多相关文章
- Linux Ubuntu 14.04 LTS下VirtualBox连接USB
1.环境 主机:Ubuntu 14.04 LTS 虚拟机:Windows 7 专业版本 VirtualBox: 图形用户界面版本 5.1.8 r111374 (Qt5.6.1) 2.在主机上给Virt ...
- Ubuntu 14.04 LTS下安装Google Chrome浏览器
在Ubuntu 14.04下安装Google Chrome浏览器非常简单,只要到Chrome的网站下载Deb安装包并进行安装即可.当然你也可以使用APT软件包管理器来安装Google Chrome浏览 ...
- Ubuntu 14.04 LTS 下使用源码编译安装 Sagemath 6.7 x64 (小结)
原先博客放弃使用,几篇文章搬运过来 下载源码包 系统的最低要求: 6GB 硬盘 : 2GB RAM. 命令行工具: A C/C++ compiler: Since Sage builds its ow ...
- Ubuntu 14.04 LTS 下升级 gcc 到 gcc-4.9、gcc-5 版本
如果没记错的话,阿里云ECS上的Ubuntu也是LTS版本. 如果还在使用较旧版本的Ubuntu,或者是Ubuntu LTS,那么我们是很难体验新版gcc的.怎么办呢? 我们或许可以自己去编译用旧版本 ...
- Ubuntu 14.04 LTS 下使用校园网客户端DrclientLinux
原先博客放弃使用,几篇文章搬运过来 下载客户端并解压 安装开发包 sudo -i dpkg --add-architecture i386 #添加32位的支持 apt-get update apt-g ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- 【转】基于Ubuntu 14.04 LTS编译Android4.4.2源代码
原文网址:http://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS编译Android4.4.2源代码 ...
- 基于Ubuntu 14.04 LTS编译Android4.4.2源码
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS ...
- 基于Ubuntu 14.04 LTS编译Android4.4.2源代码
转载自:雨水:http://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS编译Android4.4.2源代码 ...
随机推荐
- 40.扑克牌的顺子[Continuous cards]
[题目] 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字. [分析] 这题目很有意思,是一个典型 ...
- codeforces B. Eight Point Sets 解题报告
题目链接:http://codeforces.com/problemset/problem/334/B 一开始看到题目,有点怯,理解了题目后,其实并不难.这句话是突破口 three distinct ...
- java获取tomcat路径
获取tomcat路径 String savePath3 = System.getProperty("catalina.home"); E:\apache-tomcat-7.0.63 ...
- PrincipalView的使用参数
4 G:\PrincipalView\model\m426.off 注意,路径是绝对路径,所以如果程序移位的话,要注意修改: 路径中不能包含空格
- win7下IIS安装与配置运行网站
1.打开控制面板,点击程序和功能: 2.点击打开或关闭Windows功能进行安装: 3.等待进入安装界面,需要几十秒左右: 4.找到Internet信息服务,将Web管理工具和万维网服务所有勾上,然后 ...
- JQuery的ajax登录案例
1.简单版AjaxLogin.html代码: <head> <title></title> <script src="jquery-1.8.3.js ...
- Linux命令--文件管理
1.ls ls -a 列出目录下是所有文件 ls -l 列出文件的详细信息 2.cd cd /root 进入更目录下的root文件夹 cd file 进入当前目录的file文件夹 cd .. 进入 ...
- 学习BigDecimal用法
一.简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更 ...
- 新浪SAE部署 503 JDK版本冲突解决
上午把本地调试好的微信应用部署到SAE上,结果访问503错误.关键日志:—————————————————————————————————org.eclipse.jetty.servlet.Servl ...
- 《Java并发编程实战》学习笔记 线程安全、共享对象和组合对象
Java Concurrency in Practice,一本完美的Java并发参考手册. 查看豆瓣读书 推荐:InfoQ迷你书<Java并发编程的艺术> 第一章 介绍 线程的优势:充分利 ...