赞
踩
网上介绍下载、编译Android方法一坨,读万卷书不如行万里路,以下是笔者亲身经历的(笔者是使用的系统是ubuntu 13.04)。
安装git:
$ sudo apt-get install git-core gnupg
- $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
- $ sudo apt-get update
- $ sudo apt-get install sun-java6-jdk
$ sudo apt-get install git-core gnupg valgrind flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zliblg dev
- [sudo] password for banketree:
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- Note, selecting 'libsdl1.2-dev' instead of 'libsdl-dev'
- E: Unable to locate package libwxgtk2.6-dev
- E: Couldn't find any package by regex 'libwxgtk2.6-dev'
- E: Unable to locate package zliblg
- E: Unable to locate package dev
$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev build-essential zip curl libncurses5-dev zlib1g-dev
- $ cd ~ //进入用户目录
- $ mkdir android-bin //创建bin文件夹
- $ export PATH=$PATH:~/android-bin //将~/bin路径加入PATH环境变量中,也可将它加在~/.bashrc文件中
- $ echo $PATH //可以检查~/bin是否添加入PATH环境变量中
$ curl http://android.git.kernel.org/repo > ~/android-bin/repo
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0curl: (7) Failed connect to android.git.kernel.org:80; No route to host
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/android-bin/repo
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
$ chmod +x ~/android-bin/repo
- $ mkdir myandroid
- $ cd myandroid
$repo init -u git://android.git.kernel.org/platform/manifest.git –b cupcake
- $ repo init -u https://android.googlesource.com/platform/manifest
- $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
- Get git://android.git.kernel.org/platform/manifest.git
- fatal: unable to connect to android.git.kernel.org:
- android.git.kernel.org[0: 149.20.4.77]: errno=No route to host
fatal: unable to auto-detect email address (got 'banketree@banketree-To-be-filled-by-O-E-M.(none)')
repo sync 代码同步更新
- error: Failed to connect to 2404:6800:4008:c00::52: Network is unreachable while accessing https://android.googlesource.com/platform/manifest/info/refs?service=git-upload-pack
- fatal: HTTP request failed
下载是一个漫长的过程!~~~~~~~让它慢慢下载吧!我们忙别的去了~~
重启电脑后发现错误,提示:
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了。
- $ cd ~/myandroid
- $ 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版。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。