【转载】比较不错的一篇如何搭建Android系统的入门级文章。

一.PC工作环境准备
    1.从Ubuntu官方主页www.ubuntu.com.cn下载Ubuntu8.04桌面版,然后完全安装。
    2.打开ubuntu终端,输入sudo apt-get install命令来通过ubuntu服务器在线安装需要使用的软件,这里不需要选     择软件版本,ubuntu服务器会做自动的版本匹配。待安装的软件有flex,bison,gperf,libsdl-dev,libesd0-       dev,libwxgtk2.6-dev,build-essential,python,valgrind,curl,git。执行命令后使用which命令验证是否      安装成功,注意,如果缺少部分软件,或者安装没有成功,编译通常都会遇到问题,无法完成。
    3.从www.java.sun.com下载JDK_1.5.0_18.bin,在ubuntu终端中直接执行该程序,默认会被安装                     到/usr/JDK_1.5.0_18路径下。在终端中输入#java–version,如果显示出java版本信息,说明java安装成功。
    这里没有选择ubuntu的自动安装,原因主要是有时候下载速度很慢,而且安装过程有时候会出现问题,反正这样从     SUN的官网下载安装也很简单,呵呵。   
    4.使用export来设置环境变量:
    #export JAVA_HOME=/usr/jdk1.5.0_18
    #export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    #export PATH=$PATH:$JAVA_HOME/bin
    由于因为其它工作需要的原因,这里我还安装了1.6的JDK,所以使用export的方式来动态改变环境变量,而没有直     接写到/etc/bash.bashrc中,这个大家可以根据自己的具体情况来选择。
    #export PATH=/usr/local/git/bin:/usr/local/git/libexec/git-core:$PATH(对git工具进行设置,否则无法正      常使用)
    二.代码下载
    这里的所有代码指定为Android的cupcake版本,更新日期为2009年4月8日,这个版本是Android一个相对比较新的      版本。
    1.创建工作目录:
    #mkdir /home/android
    #cd /home/android
    #mkdir bin
    2.下载安装repo版本管理工具:
    #curl http://android.git.kernel.org/repo> /home/android /bin/repo
    #cd bin
    #chmod a+x repo
    由于Android项目官方采用repo来做同步管理,所以这里只有使用repo才可以做代码同步。
    3.准备下载Android:
    #cd /home/android
    #./bin/repo init -u git://android.git.kernel.org/platform/manifest.git –cupcake
    通常情况下会出现error提示(如果是以前没有创建过repo账户的话),这个错误可以忽略。最后的-cupcake就是      为了下载cupcake版本,如果不加的话,下载的是master版本,master版本属于开发测试版本,很多功能还不稳定
    4.配置repo帐户:
    #git config –global user.email “xxxxx@xxxxxxx”
    #git config –global user.name “xxxxxx”
    邮箱地址填有效邮箱即可,我试过,其实这步跳过也没有问题。
    5.下载源码:
    #repo sync
    这个操作就是下载整个Android的源码到本地,具体花费时间和网速有关,cupcake版本源码大概1.3G左右。进         入/home/android/可以看到Android的源码目录如下:
    –repo –主要是同步管理所用到的一系列文件
    –bionic –Android编译过程所需要的一些库
    –bootable –负责启动和备份的一些文件
    –build –最主要的一些makefile和编译配置文件
    –dalvik –经过Google优化了的java虚拟机
    –development –开发用的一些文件夹,包括模拟器和工具等
    –external –Android工程中引入的外部功能库
    –frameworks –中间件部分
    –hardware –和硬件有关的一些支持文件,包括wifi,电信模块等
    –kernel –经过了优化和修改的linux内核
    –packages –所有的上层应用包
    –prebuild –Android编译工具所在目录
    –system –一些系统级文件
    三.系统和开发工具编译
    1.系统编译
    Android文件系统由于已经自带了经过优化的交叉编译工具,并且为所有的源码都提供了经过验证的makefile,所      以系统的整体编译相对简单,官方发布的版本中基本功能都已经包含进了makefile中,但是我下载的版本的中文       的输入法没有被引入,这里做适当修改:
    #cd /home/android/build/target/product/
    #gedit generic.mk
    打开这个文件后,在PRODUCT_PACKAGES中,加入PinyinIME,然后保存退出。这样在整体编译的时候就会把中文输入     法也编译进system中了。
    修改完成后:
    #cd /home/android/
    #make
    第一次进行整体编译,这个过程大概持续2到3小时,默认情况下,会在/home/android/目录下生成一个out文件夹      ,所有的编译生成物都在这一目录下。如果想更改生成文件的目录,请参考/build/buildspec.mk.default文件中      的说明和选项,很简单,相信大家都能看懂。如果编译过程中出现问题,请自行检查上面PC工作环境准备部分中是     否哪里 出了问题,就不要在论坛里反复问了,因为这样的问题应该是自己参考这个帖子后可以完全自己解决的。
    2.开发工具的编译
    Android提供了完整的开发工具和交叉编译工具,这些都包含在了源码内,所以只要对源码正确编译,就可以获得      丰富的开发工具,并且Android的移植工作也需要这些工具的支持。
    编译Android开发工具的步奏如下:
    #cd /home/android/
    #make sdk
    如果出现无法正常编译的情况,请检查JDK1.5.0_18的环境变量配置是否成功。正常情况下最后在/home/android/      目录下会生长一个out文件夹。
    #cd /out/host/linux-x86/sdk/
    可以看到这里有了一个名叫android-sdk_eng.root_linux-x86的文件夹,这个文件夹基本包含了Android的模拟器      和所有的开发调试工具。打开这个文件夹,可以看到这里主要由以下几部分组成:
    –add-ones –需要增加的新工具路径
    –docs –关于模拟器和各种开发工具的说明等
    –platform –模拟器和开发工具需要的文件
    –tools –模拟器和开发工具的应用程序
    四.模拟器使用和文件系统提取
    1.模拟器使用
    进入~/android-sdk_eng.root_linux-x86/tools目录下,这里有很多Android的工具,其中模拟器对应的应用程        序是emulator。下面是正确使用模拟器的步奏:
    #./android create avd –n NO1 –t 1
    这个命令会进入创建avd的过程,按自己的需要做出一些选择后,名称为NO1的avd就创建成功了,以后可以通过这      个创建的avd来使用模拟器。1.4之前的版本不需要这样创建,1.5版本后不正确创建是无法使用的。
    #./android list avd
    输入命令来检查创建是否成功,如果成功会列出来。
    #./emulator –avd NO1
    启动刚才创建的名为NO1的模拟器,使用的内核,文件系统等均使用默认的,即~/android-sdk_eng.root_linux-       x86/platform/路径下的内核和文件系统。没什么问题的话,我们就可以看到Android操作系统的虚拟界面了。
    2.使用自己编译的系统
    Android可以运行在开发板上的文件系统的提取需要依靠模拟器,具体的操作步奏如下:
    #cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/
    #./mksdcard –l 200M /home/sdcard.img
    这里使用mksdcard开放工具在/home目录下建立一个200M的sdcard.img,用于模拟器中数据和外部数据的交互,虚      拟SD卡的大小不应该小于100M,否则在后期的文件系统打包过程中,有可能会有SD卡存储空间不够的问题。
    #./android create avd –n cupcake –t –c /home/sdcard.img 1
    创建一个名为cupcake的,附带有sdcard的虚拟设备。
    #./emulator –avd cupcake –sysdir /home/android/out/target/product/generic –data                     /home/android/out/target/product/generic/userdata.img -ramdisk                     /home/android/out/target/product/generic/ramdisk.img –kernel /home/android/prebuild/android-            arm/kernel/kernel-qemu
    使用名为cupcake的虚拟设备启动模拟器,并规定系统,数据等的映象文件路径,模拟器内核采用                    prebuild/android-arm/kernel/kernel-qemu。当然也可以使用自己编译的内核镜像,关于如果编译内核的问题会      在以后陆续发贴说明。
    打开一个新的终端进行操作:
    #cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/
    #./adb remount
    这里使用adb工具的remount选项来使模拟器中的system目录权限改为可读写。
    #./adb push tar /system/bin
    这里使用adb工具的push指令将提前使用busybox做好的tar应用程序加入到模拟器的/system/bin目录下。关于         busybox的使用这里不作介绍,网上太多了,呵呵
    #./adb shell
    这里使用adb工具进入到模拟器的shell中。
    进入到Android模拟器的shell中操作如下:
    #tar xvf /sdcard/system.tar /system
    #tar xvf /sdcard/userdata.tar /data
    这里使用前面加入到模拟器中的tar应用程序来对system和data目录下所有内容进行打包,并存储到sdcard里。操      作结束后,进入sdcard目录下查看是否有了system.tar和userdata.tar文件,如果有,则证明打包成功。         
    #exit
    退出shell,并关闭模拟器。
    #mount –o loop sdcard.img /mnt
    #cd /mnt
    这里将虚拟SD卡挂载在/mnt目录下,进入/mnt目录后,就可以将system.tar和userdata.tar拷贝出来,文件系统的     提取完成。
    经过测试,发现其实使用android提供的mkyaffsimage直接对/out/target/product/generic/system目录进行打包      ,制作出system.img也完全可以使用,不过不知道userdata.img如何制作,希望有人可能指点。使用        mkyaffs2image制作文件系统映像时要注意的是一些配置文件的权限问题,比如/system/usr/keylayout下的文件       权限就有问题,需要修改,否则生成的映像在模拟器中加载后,键盘等无法正常使用。
    最后,要说的是,新加入android的朋友们遇到问题我个人建议最好不要立刻就问,毕竟是个80%以上都开源的系      统,不妨自己尝试解决问题,到论坛逛逛,在网上搜索下,或者自己读下源码,都是一种提高。拿到的资源其实都     是一样的,学到的东西,得到的锻炼却是不同的。

Android系统入门相关推荐

  1. android系统源码的环境下用make来编译,Android源码编译系统入门

    做过 Android 平台开发的朋友对make,mm或make clean命令应该很熟悉,但也许大家只是熟知这些命令的作用却不知道这些命令底下有些什么原理?那么今天我就带着大家推开Android编译系 ...

  2. Android 系统(180)---Android.mk入门

    Android.mk入门 这篇Blog主要记录向系统源码添加模块时使用的Makefile,和NDK编程使用的makefile有一些差异. Android的mk文件是有很强的套路的,下面我在我的< ...

  3. 工作感悟之Android系统开发入门

    从离开学校到工作快两年了,这期间感悟良多,喜悦.悲伤.希望.失望...总的说来在曲折中不断前进,相信乘风破浪会有时,直挂云帆济沧海. 从事Android有些偶然因素,原始打算做WPF相关的开发,或是C ...

  4. Android基础入门教程——1.1 背景相关与系统架构分析

    Android基础入门教程--1.1 背景相关与系统架构分析 标签: Android基础入门教程 1.Android背景与当前的状况 Android系统是由Andy Rubin创建的,后来被Googl ...

  5. android系统nfc开发,GitHub - hanjie511/MyNFC: android的NFC开发入门

    MyNFC android的NFC开发入门 NFC简述 近距离无线通信 (NFC) 是一组近距离无线技术,通常只有在距离不超过 4 厘米时才能启动连接.借助 NFC,您可以在 NFC 标签与 Andr ...

  6. android系统profile文件路径,Android Profile Tools 入门

    本次分享会目的 通过对增加对 Android Profile Tools 的了解,提高大家工作过程中定位和解决Bug的效率. 注意事项 为了不耽误大家时间,语速可能会快一些 如果讲到某个工具或者技巧, ...

  7. Android系统开发-入门篇

    参见:[视频教程] 写给应用开发的 Android Framework 教程--玩转 AOSP 篇之 Android 系统开发工具推荐 - 掘金 前置条件: android系统源码位于 linux 服 ...

  8. Android系统开发和性能优化——查漏补缺【建议收藏】

    做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...

  9. Android系统架构-[Android取经之路]

    摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...

最新文章

  1. 在工作中有被动转主动的体会_积极主动应对眼前的一切,就是对自己最好的犒赏...
  2. 小米手机 DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs
  3. 简单有趣的 NLP 教程:手把手教你用 PyTorch 辨别自然语言(附代码)
  4. Infopath提示表单已经存在,怎么破?
  5. java 中适配器原理_Java经典设计模式中关于适配器模式原理以及用法详解
  6. 当try,catch,finally中均有return语句时,会返回哪一个?---finally中的return
  7. [BZOJ]1023: [SHOI2008]cactus仙人掌图
  8. C# Window Form解决播放amr格式音乐问题
  9. Quartus II调用modelsim ALTEA 的软件使用及问题
  10. Pycharm远程调试服务器程序
  11. 计算机网络及分布式系统
  12. JDK帮助文档使用方法
  13. can总线程序讲解_CAN总线软件编程
  14. MySQL5.7版本64位下载及安装详细教程
  15. Powershell————2、Powershell交互式
  16. 生成自签名证书步骤(一)
  17. java毕业设计商品供应管理系统mybatis+源码+调试部署+系统+数据库+lw
  18. [转载]Linux SWAP 交换分区配置说明
  19. java 静态区在jvm哪里,JDKJREJVM这三者的联系与区别///java跨平台///堆栈常量区静态区...
  20. 基于微信小程序的乐团团购系统设计与实现-计算机毕业设计源码+LW文档

热门文章

  1. 干货 | 机器学习模型在携程海外酒店推荐场景中的应用
  2. 期末大作业--德州扑克(包含双人手动发牌,多人手动发牌,多人手动、自动发牌三个版本)
  3. Java通用权限系统视频(2021年高含金量版)
  4. 这年头,能坐上火箭的东西不多啊!Java版本号算一个!
  5. vc6.0 mfc一些函数明明调用语法正确,但是提示函数或者函数参数未定义等问题解决方法。
  6. Collapse组件(一) collapse过渡动画
  7. day01计算机基础知识Java语言基础
  8. 投资30亿美元 IBM启动云计算大数据芯片研究计划
  9. html 标签对应的英文
  10. python入门教学反思_Python语言教学反思 --方少芹名师工作室