`
wangangie5
  • 浏览: 36394 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

android开发基础[源码获取及编译、模拟器使用]

 
阅读更多

  原文地址:http://bbs.androidin.com/archiver/tid-2413.html
  由于论坛改版,很多有用的资源都不见了,所以这里把自己对cupcake下载和编译方法进行详细说明,以后还会陆续发完善的开发板移植说明、内核编译说明、一些模块级的分析等,希望对刚开始做android的朋友有所帮助,同时欢迎高手指正。
  一.PC工作环境准备 
  1.从Ubuntu官方主页
  www.ubuntn.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/t ools.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 \"[email=xxxxx@xxxxxxx]xxxxx@xxxxxxx[/email]\"
  #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.i mg  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应用开发揭秘》源码

     2.3.2 运行HelloAndroid及模拟器的使用  2.3.3 调试HelloAndroid  2.4 小结  第二部分 基础篇  第3章 Android程序设计基础  3.1 Android程序框架  3.1.1 Android项目目录结构  3.1.2 Android应用解析  3.2...

    Android入门之源码开发基础教程

    本文讲述了Android入门之源码开发基础教程。分享给大家供大家参考,具体如下: 下载 Android 源码之后,接下来就是学习或者进行开发。 在开发之前,谈一些开发必备知识或者工具,工欲善其事必先利其器嘛! 在前面一...

    疯狂Android讲义源码

     1.2 搭建Android开发环境 5  1.2.1 下载和安装Android SDK 5  1.2.2 安装Eclipse和ADT插件 7  1.3 Android常用开发工具的用法 10  1.3.1 创建、删除和浏览AVD 10  1.3.2 使用Android模拟器  (Emulator) 14...

    【推荐】超全的移动安全自学资料精编合集(43份).zip

    Android安全开发基础: 开发基础常识 Android安全开发基础: 四大组件之活动(Activity) Android安全开发基础: 四大组件之服务 (Service) Android安全开发基础: 四大组件之广播(Broadcast Receiver) Android安全...

    移动安全系列教学下载共43份.zip

    Android安全开发基础--1--开发基础常识.pdf Android安全开发基础--10--图形界面(UI)和碎片(Fragment)(上).pdf Android安全开发基础--11--图形界面(UI)和碎片(Fragment)(下).pdf Android安全开发基础--12...

    Android系统源代码情景分析-罗升阳-源码

    2.5 开发Android应用程序来使用硬件访问服务 第3章 智能指针 3.1 轻量级指针 3.1.1 实现原理分析 3.1.2 应用实例分析 3.2 强指针和弱指针 3.2.1 强指针的实现原理分析 3.2.2 弱指针的实现原理分析 3.2.3 ...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part3

    第1章 Android底层开发基础 1 1.1 什么是驱动 1 1.1.1 驱动程序的魅力 1 1.1.2 电脑中的驱动 2 1.1.3 手机中的驱动程序 2 1.2 开源还是不开源的问题 3 1.2.1 雾里看花的开源 3 ...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part1

    第1章 Android底层开发基础 1 1.1 什么是驱动 1 1.1.1 驱动程序的魅力 1 1.1.2 电脑中的驱动 2 1.1.3 手机中的驱动程序 2 1.2 开源还是不开源的问题 3 1.2.1 雾里看花的开源 3 ...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part2

    第1章 Android底层开发基础 1 1.1 什么是驱动 1 1.1.1 驱动程序的魅力 1 1.1.2 电脑中的驱动 2 1.1.3 手机中的驱动程序 2 1.2 开源还是不开源的问题 3 1.2.1 雾里看花的开源 3 ...

    Android系统源代码情景分析光盘

    2.5 开发Android应用程序来使用硬件访问服务.................................................. 44 第3章 智能指针............................................................... 49 3.1 轻量级指针..........

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目

    此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...

Global site tag (gtag.js) - Google Analytics