网上介绍下载、编译Android方法一坨,读万卷书不如行万里路,以下是笔者亲身经历的(笔者是使用的系统是ubuntu 13.04)。

安装git:

[html] view plain copy
  1. $sudoapt-getinstallgit-coregnupg


安装Java JDK6.0:
[html] view plain copy
  1. $sudoadd-apt-repository"debhttp://archive.canonical.com/lucidpartner"
  2. $sudoapt-getupdate
  3. $sudoapt-getinstallsun-java6-jdk


安装flex,bison,gperf,libsdl-dev,libesd0-dev,libwxgtk2.6-dev(可选),build-essential,zip,curl,指令如下:
[html] view plain copy
  1. $sudoapt-getinstallgit-coregnupgvalgrindflexbisongperflibsdl-devlibesd0-devlibwxgtk2.6-devbuild-essentialzipcurllibncurses5-devzliblgdev


发现错误:无法找到libwxgtk2.6-dev(注意该选项是可选)。
[html] view plain copy
  1. [sudo]passwordforbanketree:
  2. Readingpackagelists...Done
  3. Buildingdependencytree
  4. Readingstateinformation...Done
  5. Note,selecting'libsdl1.2-dev'insteadof'libsdl-dev'
  6. E:Unabletolocatepackagelibwxgtk2.6-dev
  7. E:Couldn'tfindanypackagebyregex'libwxgtk2.6-dev'
  8. E:Unabletolocatepackagezliblg
  9. E:Unabletolocatepackagedev

修改后的语句:
[html] view plain copy
  1. $sudoapt-getinstallflexbisongperflibsdl-devlibesd0-devbuild-essentialzipcurllibncurses5-devzlib1g-dev

获得Android源码(Repo,repo是一个python脚本,用来更简单的获取Android源码,其核心是使用Git来获取源码的)。
创建 ~/android-bin目录,用于存放repo,并将其加入PATH环境变量中
[html] view plain copy
  1. $cd~//进入用户目录
  2. $mkdirandroid-bin//创建bin文件夹
  3. $exportPATH=$PATH:~/android-bin//将~/bin路径加入PATH环境变量中,也可将它加在~/.bashrc文件中
  4. $echo$PATH//可以检查~/bin是否添加入PATH环境变量中

下载repo脚本,并将它的属性改成可执行
[html] view plain copy
  1. $curlhttp://android.git.kernel.org/repo>~/android-bin/repo

发现服务器不响应
[html] view plain copy
  1. %Total%Received%XferdAverageSpeedTimeTimeTimeCurrent
  2. DloadUploadTotalSpentLeftSpeed
  3. 00000000--:--:----:--:----:--:--00000000--:--:--0:00:01--:--:--00000000--:--:--0:00:02--:--:--00000000--:--:--0:00:03--:--:--00000000--:--:--0:00:04--:--:--0curl:(7)Failedconnecttoandroid.git.kernel.org:80;Noroutetohost

更换地址
[html] view plain copy
  1. $curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo>~/android-bin/repo

提示有输入邮箱号和密码等操作,但未出现为何?这将导致后面帐号错误!
原来需要手动设置:
[html] view plain copy
  1. gitconfig--globaluser.email"[email protected]"
  2. gitconfig--globaluser.name"YourName"

然后修改文件属性
[html] view plain copy
  1. $chmod+x~/android-bin/repo

创建一保存android source的目录
[html] view plain copy
  1. $mkdirmyandroid
  2. $cdmyandroid

初始化repo工作环境,获取cupcake分支源码清单
[html] view plain copy
  1. $repoinit-ugit://android.git.kernel.org/platform/manifest.git–bcupcake

服务器出现问题,需要修改地址如下:
[html] view plain copy
  1. $repoinit-uhttps://android.googlesource.com/platform/manifest
  2. $repoinit-uhttps://android.googlesource.com/platform/manifest-bandroid-4.0.1_r1

不修改的话会出现无法连接等以下错误
[html] view plain copy
  1. Getgit://android.git.kernel.org/platform/manifest.git
  2. fatal:unabletoconnecttoandroid.git.kernel.org:
  3. android.git.kernel.org[0:149.20.4.77]:errno=Noroutetohost

提示错误:
[html] view plain copy
  1. fatal:unabletoauto-detectemailaddress(got'[email protected](none)')

设置帐号问题,我的应该为[email protected]
设置了帐号问题后,就解决了!~

[html] view plain copy
  1. reposync代码同步更新

提示错误:
[html] view plain copy
  1. error:Failedtoconnectto2404:6800:4008:c00::52:Networkisunreachablewhileaccessinghttps://android.googlesource.com/platform/manifest/info/refs?service=git-upload-pack
  2. fatal:HTTPrequestfailed

下载是一个漫长的过程!~~~~~~~让它慢慢下载吧!我们忙别的去了~~

重启电脑后发现错误,提示:

No command 'repo' found, did you mean:
Command 'rep' from package 'rep' (universe)
Command 'repl' from package 'nmh' (universe)
Command 'repl' from package 'mailutils-mh' (universe)
repo: command not found

只要删除repo 重新设置一下就OK了。


编译源码,指令如下:
[html] view plain copy
  1. $cd~/myandroid
  2. $make

这一步编译出root, system, data三个目录和system.img(系统镜像文件)、userdata.img(用户数据)、ramdisk.img(emulator文件系统)三个镜像,位于out/target/product /generic目录下。这样Android系统就编译完了,可以在Emulator下执行,也可以下载到你的板子上运行!

编译生成的root文件夹内容与android运行时根目录内容相似,ramdisk根文件系统中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过 程。init.rc的工作主要是:
1)设置一些环境变量
2)创建system、sdcard、data、cache等目录
3)把 一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals
4)设置一些文件的 用户群组、权限
5)设置一些线程参数
6)设置TCP缓存大小


生成的system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验 证:file ramdisk.img,

输出:ramdisk.img: gzip compressed data, from Unix, last modified:Wed Mar 18 17:16:10 2009 ,
我们可以学习怎么样把 ramdisk.img解压出来。
将ramdisk.img复制一份到任何其他目录下,将其名称改为 ramdisk.img.gz,并使用命令 gunzip ramdisk.img.gz,然后新建一个文件夹,叫ramdisk吧,进入,输入 命令cpio -i -F ../ramdisk.img,这下,你就能看见并操作ramdisk里面的内容了。然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和ramdisk/userdata下。这样就得到一个文件系统了。还会发现,根文件系统下的sys就是一个linux。

在android 1.5 模拟器上加载 android 2.1 的系统:
本 文编译出来的3个img文件是2.1版的。可以用system.img和ramdisk.img 替换1.5的版本:
命令如下:
打 开android 1.5的模拟器 ,同时加载system.img和ramdisk.img
emlator -avd sdk_1_5 -ramdisk [ramdisk.img路径] -system [system.img的路径]
启 动后可以看到设置中的手机版本变成了2.1版。


更多相关文章

  1. [笔记]如何解决Your project contains C++ files but it is not
  2. ActionBar的简单使用(修改背景颜色,文字居中,图标)
  3. android 用editview 禁用输入法,涉及到的几个事件
  4. Android上关于view的事件问题
  5. 如何用同一份代码产生不同包名得APK包
  6. (Linux平台)在Android中调用JNI
  7. Android(安卓)porting (s3c6410)
  8. Android(安卓)ProgressBar设置转圈样式
  9. Android(安卓)framework 编译常见错误

随机推荐

  1. 在Linux环境下mysql的root密码忘记解决方
  2. mysql批量更新多条记录的同一个字段为不
  3. 远程连接mysql错误代码1130的解决方法
  4. Windows下MySQL 5.7无法启动的解决方法
  5. Mysql 行级锁的使用及死锁的预防方案
  6. mysql 5.7.17 安装配置方法图文教程(Cent
  7. SQL Server COALESCE函数详解及实例
  8. windows 10 下安装mysql 5.7.17的简单笔
  9. 详解windows下mysql的主从同步
  10. Mybatis报错: org.apache.ibatis.excepti