Android 系统开发学习杂记(转)

http://blog.csdn.net/shagoo/article/details/6709430

> 开发环境
1、安装 Eclipse 和 android-sdk 并解压安装
2、Eclipse 安装 AVD 插件 https://dl-ssl.google.com/android/eclipse/ 并配置 SDK Location
3、打开 SDK Manager 安装 android packages 并配置 Virtual device(比如名为:Android_2.2)
4、启动 Virtual device,执行:emulator.exe -avd Android_2.2,或者直接从 Eclipse 启动

> 安装程序
1、安装:adb install xxx.apk
2、重装:adb install -r xxx.apk
3、卸载:adb uninstall com.android.xxx
程序安装位置为:/data/app/,配置文件在/data/data下

> 系统分区
# adb shell
# mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
none /acct cgroup rw,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
/dev/block/vold/179:0 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:0 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,size=0k,mode=000 0 0
以上就是 Android 系统的分区结构,可见其挂载方式和 Linux 非常类似,熟悉 Linux 的朋友应该能很容易的看出这些分区的作用大概是什么。其中需要说明一下的可能是 /dev/block/mtdblock* 这几个核心分区(写入 ROM 的),他们都是使用 yaffs2 文件系统(基于 FLASH 存储),其中是 /system 这个分区只有特殊的 ro 只读权限,由此可见 Android 在安全性设计方面所下的一些功夫。另外 /dev/block/vold 据说是设计来替代 udev 的功能,主要用于支持一些热插拔设备。

> 目录概览
# ls -l
dr-x------ root     root              2011-08-18 10:36 config
drwxrwx--- system   cache             2011-06-21 05:32 cache
lrwxrwxrwx root     root              2011-08-18 10:36 sdcard -> /mnt/sdcard
drwxr-xr-x root     root              2011-08-18 10:36 acct
drwxrwxr-x root     system            2011-08-18 10:36 mnt
lrwxrwxrwx root     root              2011-08-18 10:36 d -> /sys/kernel/debug
lrwxrwxrwx root     root              2011-08-18 10:36 etc -> /system/etc
drwxr-xr-x root     root              2010-06-30 21:06 system
drwxr-xr-x root     root              1970-01-01 00:00 sys
drwxr-x--- root     root              1970-01-01 00:00 sbin
dr-xr-xr-x root     root              1970-01-01 00:00 proc
-rwxr-x--- root     root        12995 1970-01-01 00:00 init.rc
-rwxr-x--- root     root         1677 1970-01-01 00:00 init.goldfish.rc
-rwxr-x--- root     root       107412 1970-01-01 00:00 init
-rw-r--r-- root     root          118 1970-01-01 00:00 default.prop
drwxrwx--x system   system            2011-08-12 06:54 data
drwx------ root     root              2010-01-28 00:59 root
drwxr-xr-x root     root              2011-08-18 10:36 dev
以上是 Android 根目录下文件目录,根据之前的分区结构可以大致看出每个目录的所处位置和大致功能,以下是几个重要目录/文件的说明:
1、mnt                挂载点目录
2、etc                系统主要配置文件
3、system            Android 系统文件
4、sys                Linux 内核文件
5、proc                运行时文件
6、init.rc            启动脚本
7、default.prop        系统属性配置文件
8、data                用户程序目录
9、dev                设备文件

# ls -l /system
drwxr-xr-x root     root              2010-06-30 21:03 usr
drwxr-xr-x root     root              2010-06-30 21:07 app
drwxr-xr-x root     root              2010-06-30 21:05 lib
drwxr-xr-x root     root              2010-06-30 21:07 etc
drwxr-xr-x root     root              2010-06-30 21:06 framework
-rw-r--r-- root     root         1532 2010-06-30 20:58 build.prop
drwxr-xr-x root     shell             2010-06-30 21:04 xbin
drwxr-xr-x root     root              2010-06-30 21:00 tts
drwxr-xr-x root     root              2010-06-30 21:00 media
drwxr-xr-x root     root              2010-06-30 21:00 fonts
drwxr-xr-x root     shell             2010-06-30 21:04 bin
drw-rw-rw- root     root              2011-08-18 10:36 lost+found
以上是 system 目录下面的主要文件目录下面也简单介绍一下:
1、usr            用户文件夹,包含共享、键盘布局、时间区域文件等
2、app            常规下载的应用程序,这些 apk 包都是受保护的哦
3、lib            系统底层库,如平台运行时库等
4、etc            系统的配置文件,比如APN接入点设置等核心配置等
5、framework    Android 系统平台核心 framework 的文件
6、build.prop    Android 系统属性配置文件
7、xbin            常用开发工具,比如 tcpdump/sqlite3 等
8、bin            系统工具,比如 ps/cp/pm 等

# ls -l /data
drwx------ root     root              2011-06-22 02:32 property
drwxrwx--t system   misc              2011-06-21 05:32 misc
drwxrwx--x shell    shell             2011-06-21 05:32 local
drwxrwx--x system   system            2011-06-21 05:32 app-private
drwx------ system   system            2011-06-21 05:33 backup
drwxrwxr-x system   system            2011-08-12 06:54 anr
drwxrwx--x system   system            2011-08-20 06:50 app
drwxrwx--x system   system            2011-08-20 06:50 data
drwxr-x--- root     log               2011-06-21 05:32 dontpanic
drwxrwx--x system   system            2011-08-20 06:50 dalvik-cache
drwxrwxr-x system   system            2011-08-22 06:40 system
drwxrwx--- root     root              2011-06-21 05:32 lost+found
可以看到 /data 目录下结构都和应用有关,这里我们不做细究了,大家知道一下我们平时安装的用户应用/游戏程序都被安装在 /data/app 下就可以了。

# set
ANDROID_ASSETS=/system/app
ANDROID_BOOTLOGO=1
ANDROID_DATA=/data
ANDROID_PROPERTY_WORKSPACE=9,32768
ANDROID_ROOT=/system
ASEC_MOUNTPOINT=/mnt/asec
BOOTCLASSPATH=/system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar
EXTERNAL_STORAGE=/mnt/sdcard
IFS=‘

LD_LIBRARY_PATH=/system/lib
OPTIND=1
PATH=/sbin:/system/sbin:/system/bin:/system/xbin
PS1=‘# ‘
PS2=‘> ‘
PS4=‘+ ‘
PWD=/
_=/system/xbin
从系统变量我们也可以看到一些系统使用中的重要目录。

> 进程分析
# ps
USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
root      1     0     312    220   c009b74c 0000ca4c S /init
root      2     0     0      0     c004e72c 00000000 S kthreadd
root      3     2     0      0     c003fdc8 00000000 S ksoftirqd/0
root      4     2     0      0     c004b2c4 00000000 S events/0
... ...
root      27    1     740    196   c0158eb0 afd0d8ac S /system/bin/sh
system    28    1     808    204   c01a94a4 afd0db4c S /system/bin/servicemanager
root      29    1     3736   372   ffffffff afd0e1bc S /system/bin/vold
root      30    1     3716   336   ffffffff afd0e1bc S /system/bin/netd
... ...
system    59    33    183396 25580 ffffffff afd0db4c S system_server
app_0     108   33    134184 14876 ffffffff afd0eb08 S com.android.inputmethod.pinyin
radio     112   33    147300 15804 ffffffff afd0eb08 S com.android.phone
app_25    122   33    149408 19932 ffffffff afd0eb08 S com.android.launcher
system    124   33    136708 13172 ffffffff afd0eb08 S com.android.settings
app_0     148   33    148892 18044 ffffffff afd0eb08 S android.process.acore
... ...
从这里我们可以看出和 Linux 一样所有进程的入口都是 init,接下来的系统进程也和 Linux 类似,再接下来就是一些系统的守护程序(Native Service),最后是系统重要的应用程序。通过这个列表大家也可以看出 Android 启动过程的一些端倪。

> 内核对比
Android 内核和标准的 Linux 内核一样,主要实现内存管理、进程调度、进程间通信等功能。就最新的 Android 内核代码版本 cupcake(其中Linux内核版本为2.6.27)的内核源码树的根目录结构看,Android 内核源码与标准 Linux 内核并无不同,但是经过与标准 Linux 内核源代码进行详细对比,可以发现,Android内核与标准Linux内核在文件系统、进程间通信机制、内存管理等方面存在不同。
1、文件系统:
不同于桌面系统与服务器,移动设备大多采用的不是硬盘而是采用 Flash 作为存储介质。因此,Android 内核中增加了标准 Linux 专用于 Flash 的文件系统 YAFFS2。对 NAND/Flash 芯片有着良好的支持。YAFFS2 是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外断电对文件系统一致性和完整性的影响。YAFFS2按层次结构设计,分为文件管理接口、内部实现层和NAND,简化了其本身与系统的接 EI 设计,能更方便地集成到系统当中。经过测试证明,YAFFS2 性能比支持 NOR 型闪存的 JFFS2 文件系统更加优秀。
2、进程间通信机制:
Android 增加了一种进程间的通信机制 IPC Binder。Binder 通过守护进程 Service Manager 管理系统中的服务,负责进程问的数据交换。各进程通过 Binder 访问同一块共享内存,以达到数据通信的机制。从应用层的角度看,进程通过访问数据守护进程获取用于数据交换的程序框架接口,调用并通过接口共享数据,而其他进程要访问数据,也只需与程序框架接口进行交互,方便了程序员开发需要交互数据的应用程序。
3、内存管理:
在内存管理模块,Android 内核采用了一种不同于标准 Linux 内核的低内存管理策略。在标准Linux内核当中,使用一种叫做 OOM(Out of Memory) 的低内存管理策略;当内存不足时,系统检查所有的进程,并对进程进行限制评分,获得最高分的进程将被关闭(内核进程除外),而 Android 系统采用的则是一种叫作 LMK(Low Memory Killer) 的机制,这种机制将进程按照重要性进行分级、分组,内存不足时,将处于最低级别组的进程关闭。例如,在移动设备当中,UI界面处于最高级别,所以该进程永远不会被中止。这样,在终端用户看来,系统是稳定运行的。同时,Android 新增加了一种内存共享的处理方式 Ashmem(Anonymous Shared Memory 匿名共享内存)。通过Ashmem,进程间可以匿名自由共享具名的内存块,这种共享方式在标准 Linux 当中也是不被支持的。
4、电源管理:
由于 Android 主要用于移动设备,电源管理就显得尤为重要。因此,在Android内核当中增加了一种新的电源管理策略。目前,Android 采用的是一种较为简单的电源管理策略,通过开关屏幕、开关屏幕背光、开关键盘背光、开关按钮背光和调整屏幕亮度来实现电源管理,并没有实现休眠和待机功能。目前有三种途径判断调整电源管理策略:RPC调用、电池状态改变和电源设置。它通过广播 Intent 或直接调用 API 的方式来与其他模块进行联系,电源管理策略同时还有自动关机机制,当电力低于最低可接受程度时,系统将自动关机。另外,Android 的电源管理模块还会根据用户行为,自动调整屏幕亮度。
5、驱动及其他:
相对于标准内核,Android 内核还添加了字符输出设备、图像显示设备、键盘输入设备、RTC 设备、USBDevice 设备等相关设备驱动,增加了日志(Logger)系统,使应用程序可以访问日志消息,使开发人员获得更大的自由。

时间: 2024-10-10 21:02:14

Android 系统开发学习杂记(转)的相关文章

Android菜鸟如何学习Android系统开发?

如何做好Android学习前的准备? 如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作.先打下哪些基础呢? 首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类专业一般都会开设C语言课程,只是很多同学在大学期间并没有好好学习,如果对它掌握的不太好或者很久没用了,建议先从将其好好复习一下,将其基本的语法再好好回顾一下,最好能搭建一个环境来运行.调试它.如果没有学过,不妨也提前学习一下,可以参考清华大学出版社出版的谭浩强老师的<C语言程序设计>,推荐这本书的

Android系统开发的学习教程在哪里可以看?

Android蛰伏很多年,终于赶上移动互联时代,迅猛崛起,以80%以上的占比成为行业占有率首位,Android程序员也成为移动互联发展必不可少的推动者,移动互联网行业的发展人才是非常重要的,很多开发者都纷纷转型到Android,这些传统的开发者想要从事移动互联网行业的开发,需要参加培训,参加Android培训来提升自身的技术实力,传智播客Android培训行业的领导者,为各大企业很多企业输送了大量的Android人才,来提升人才的战略. 目前Android系统占据了移动互联网行业的主体,很多用户

【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/51592930 手机的两种模式 : 在下面有详细的图片示例; -- Recovery 模式 : 音量键增加 + 电源键, 长按上述组合键, 看到 "MI" 的 LOGO 后即进入 Recovery 模式; -- Fastboot 模式 : 音量键减小 + 电源键, 长按上述组合键, 看到 "FASTBOOT" 后, 即 进入 FA

[Android游戏开发学习笔记]View和SurfaceView

本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在Android中涉及到显示的是View类,及继承自它的SurfaceView类和SurfaceView的其他子类等. 这里先只说View和SurfaceView.SurfaceView的直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及CAmera摄像头一般均使用Su

Android系统开发(2)——GDB调试工具

调试的过程 我们在eclipse中来看一下一般调试的过程: 1.debug模式编译 2.打上断点 3.运行调试 4.单步调试 step into:跳到函数体内部 step over:不跳到函数体内 step return:运行完当前函数 5.继续运行 continue 6.打印和监控值 GDB调试 先写一段C++的代码,代码内容如下: 使用debug模式编译: 进入Debug调试模式: 1.打断点,打断点的方式如下(GDB中的命令可以使用首字母来替代,比如break和b的作用相同) break 

(2) 搭建 Android 系统开发环境

说干就干,先按 Google 官方的指导,搭建 Android 系统开发环境.页面(需FQ):http://source.android.com/source/initializing.html 安装 ubuntu-14.04 64bit 安装系统有两种方式可选,直接装在物理机上或装在虚拟机中,区别主要就是性能了,本次是安装在虚拟机中的.之前都是装在物理机上的,但是只有一台电脑,而做开发的时候往往还要做些笔记或者其它的事情.总之,在 ubuntu 中完成这些工作并不容易,以前折腾过,也怕了.另外

Android系统开发(1)——GCC编译器的编译和安装过程

GCC编译器介绍 GCC编译器(GNG C Compiler)是GNU项目中符合ANSI C标准的编译系统,能够编译C  C++  Object C等语言编写的程序,同时GCC也是一个交叉编译器,特别使用于不同平台的嵌入式开发. GNU: GNU是"GNU is Not Unix"的递归缩写,1984年,史托曼开始GNU项目,这个项目的目的是创建一个自由,开放的Unix操作系统(Free UNIX),刚开始史托曼参考UNIX上面的软件,开发出功能类似的软件,在开发期间并没有看其他软件的

《Android系统开发》笔记

<Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包含安全性.内存管理.进程管理,网络协议栈.驱动模型等b.Android自己加入的驱动,Binder IPC驱动,显示驱动,输入设备驱动.音频系统驱动,摄像头驱动,Wifi驱动.蓝牙驱动,电源管理等 2. Android本地库 & Java执行环境层 Android本地库(C/C++)Bionic:为嵌入式设备定制

Android系统开发实务实训

实训项目 :               Android系统开发实务实训                                            项目源码获取:   <绝地坦克>是一款坦克大战类型的javascript网络游戏,本游戏项目运行说明可分为三个方向:说明运行的项目是什么.如何运行,以及运行该项目的结果和意义是什么?其中运行的是什么包括:项目说明与功能分析:如何运行主要是指,该项目程序的实现原理和运行方式.具体说明如下: 一.项目说明与功能分析 首先从逻辑上而言,本项目