Android Framework入门介绍

 

Android Framework入门介绍

https://blog.csdn.net/fu_kevin0606/article/details/79532710

framework概述

Android简介

      Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良 Android系统,随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008 年10月,随后,Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。

     开发者能使用Android SDK为Android platform开发应用,这些应用使用JAVA语言书写,运行在虚拟机(一个专为手机程序开发的基于linux内核的JAVA虚拟机)上。 

Android架构

        Android架构主要分为分为四部分,从下往上以此为LINUX KERNEL(内核层),LIBRARIES(共享库,以及android运行时库),APPLICATION FRAMEWORK(应用框架层),APPLICATION(应用程序)。而本文主要分析就是APPLICATION FRAMEWORK(应用框架层)。

  APPLICATION

      主要为系统中的应用,如桌面,闹铃,设置,日历,电话,短信等系统应用。

  APPLICATION FRAMEWORK

      Android的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本层次提供了以下服务:

i. 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器;

ii. 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据;

iii. 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layout files );

iv. 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息;

v. 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。

 Android Runtime

      Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。

 Libraries

Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:

i. 系统 C 库:一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。

ii. 媒体库:基于 PacketVideo OpenCORE。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。

iii. Surface Manager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。

iv. LibWebCore:一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。

v. SGL:底层的2D图形引擎

vi. 3D libraries:基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。

vii. FreeType:位图(bitmap)和矢量(vector)字体显示。

SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

 Linux Kernel

      Android 的核心系统服务依赖于 Linux 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。

framework简介

系统服务

      SystemServer 是framework中非常重要的一个进程,它是在虚拟机启动后运行的第一个java进程,SystemServer启动其他系统服务,这些系统服务都是以一个线程的方式存在于SystemServer进程中。 

a) EntropyService 提供伪随机数

b) PowerManagerService 电源管理服务

c) ActivityManagerService 最核心的服务之一,管理Activity

d) TelephonyRegistry 通过该服务注册电话模块的事件响应,比如重启、关闭、启动等

e) PackageManagerService 程序包管理服务

f) AccountManagerService 账户管理服务,是指联系人账户,而不是Linux系统的账户 

g) ContentService ContentProvider服务,提供跨进程数据交换

h) BatteryService 电池管理服务

i) LightsService 自然光强度感应传感器服务

j) VibratorService 震动器服务 

k) AlarmManagerService 定时器管理服务,提供定时提醒服务

l) WindowManagerService Framework最核心的服务之一,负责窗口管理

m) BluetoothService 蓝牙服务

n) DevicePolicyManagerService 提供一些系统级别的设置及属性

o) StatusBarManagerService 状态栏管理服务

p) ClipboardService 系统剪切板服务

q) InputMethodManagerService 输入法管理服务

r) NetStatService 网络状态服务

s) NetworkManagementService 网络管理服务

t) ConnectivityService 网络连接管理服务

u) AccessibilityManagerService 辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果

v) MountService 挂载服务,可通过该服务调用Linux层面的mount程序

w) NotificationManagerService 通知栏管理服务,Android中的通知栏和状态栏在一起,只是界面上前者在左边,后者在右边

x) DeviceStorageMonitorService 磁盘空间状态检测服务

y) LocationManagerService 地理位置服务

z) SearchManagerService 搜索管理服务

aa) DropBoxManagerService 通过该服务访问Linux层面的Dropbox程序

ab) WallpaperManagerService 墙纸管理服务,墙纸不等同于桌面背景,在View系统内部,墙纸可以作为任何窗口的背景 

ac) AudioService 音频管理服务

ad) BackupManagerService 系统备份服务

ae) AppWidgetService         Widget服务

af) RecognitionManagerService 身份识别服务

ag) DiskStatsService 磁盘统计服务

核心服务介绍

a) ActivityManagerService

ActivityManagerService(以下简称:AMS)是android系统的一个系统服务,是应用进程的管理服务端,直接的控制了应用程序的各个行为,保证了系统中不同的应用程序之间能够和谐的合理的进行调度运行。

AMS是android上层系统最核心的模块之一,其主要的工作是对所有的应用进程及其进程中的四大组件进行管理。(当然这里面也涉及了一些window、电源、权限等内容)

对进程的管理包括:进程的创建与销毁、进程的优先级调整。

对组件的管理包括:Activity的调度管理、Service的管理、Broadcast的分发、以及ContentProvider管理。

                             

b) WindowManagerService

对系统中所有窗口进行管理;动画处理 ;Input分发、处理;Display管理(多屏显示) 。

c) Android Graphics系统

                  

 

a) Surfaceflinger

负责Layer合成(composer);创建surface;管理surface。

b) PackageManagerService

负责Package的管理,应用程序的安装 、卸载、信息查询等。

                                     

c) Input系统

android的输入系统主要完成键盘、触屏、鼠标等输入设备的事件输入及向焦点窗口和焦点视图的事件派发,插入,过滤,拦截等功能。

android支持的输入设备主要有:键盘、鼠标、触摸屏、轨迹球、游戏摇杆/手柄、绘图板。

Framework的范围

Framework负责APPLICATION FRAMEWORK、ANDROID RUNTIME和LIBRARIES三部分。

a) 系统Manager和Service相关内容

b) 系统接口和jni相关内容

c) 系统功能相关内容(watchdog、vold、binder等)

d) 虚拟机dalvik、art

e) 系统so库相关内容

f) CTS、GTS等预分析

g) Monkey预分析

h) 系统稳定性问题(系统ANR、冻屏、重启、蓝屏等)

i) 系统性能问题

framework基础

语言基础:Java、C++、C

技术基础:进程间通信,多线程,jni,linux相关知识,binder

 

Linux入门介绍

    由于在进行framework工作时,代码的下载和管理主要在Ubuntu下面进行比较方便,所以在搞framework之前需要对linux系统有所了解,会使用一些常用命令。linux是基于shell命令行操作,shell是系统的一个工具。用户直接面对的不是计算机硬件而是shell,用户想操作计算机硬件,需先把指令告诉shell,shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。

启动shell界面,快捷键Ctrl+Atl+t或者可以点击桌面左上角的图标进行搜索“终端”如下图,点击终端就可以出现shell终端。

      当启动一个shell时,默认目录为/home/username/:可以使用pwd来查看当前的目录。

      当系统第一次启动,且能连上internet,先更新系统的软件库信息,使用命令sudo apt-get update,sudo为使用管理员权限,第一次执行时需要输入系统的开机密码,之后五分钟内不需要输入密码,过了五分钟需要再次输入密码。

    等更新完成后,就可以开始安装软件了,例:安装git,可以sudo apt-get install git进行安装,非常简便。install是安装系统中存在安装包的软件。

如果我们从网上下载一个deb的软件包sudo dpkg -i .deb软件包

命令:sudo dpkg -i xxx.deb,安装xxx软件包与apt-get install 安装方式的区别:

 

关闭

  • 初识Android_framework层

      07-31
  • 用Android Studio调试Framework层代码

      01-23
  •  

  • Framework学习(一)Android 系统架构

      09-29
  • android framework学习回忆

      07-27
  • Android书籍推荐:总结9位开源社区专家推荐

      07-10
  • Android Framework概述

      04-17
  •  

  • android framework层是用于开发什么

      10-29
  • Android: Framework层理解(一)

      09-08
  • Android_FrameWork解析(一)——消息处理机制

      07-14
  • 理解Android Framework

      01-21
  • Android framework浅析

      04-05
  •  

  • Android FrameWork底层开发视频全套

      03-28
  • AndroidStudio 查看Framework代码

      09-15
  • Android_FrameWork解析

      07-26
  • 安卓framework开发的初理解

      02-28
  • Android Framework 如何学习,如何从应用深入到Framework?

      08-25
  • 探索Android_FrameWork底层开发

      08-16
  • Android中framework res项目中各个文件夹的含义和用途详解

      05-17
  • 阅读Android framework源代码方式

      11-02
  • android FrameWork底层开发视频

      03-31
  • Android Framework基础一

      06-12
  • Android——Framework目录分析及系统启动过程以及目录简介

      01-01
  • Android_FrameWork底层开发视频全套

      12-03
  •  

  • Android开发如何定制framework层服务

      01-02
  • Android framework 入门1

      07-04
  • android framework源码目录介绍

      01-22
  • Android Framework系统架构介绍

      03-03
  • Android Framework中的Application Framework层介绍

      08-14
  • Android入门介绍

      02-12
  • Android Framework Dalvik JIT等介绍

      10-23
  • Android Battery 在framework相关介绍

      10-10
  • Android入门:Service入门介绍

      07-22
  • iOS Framework: Introducing MKNetworkKit (MKNetworkKit介绍,入门,翻译)

      12-06
  • android入门简单介绍

      08-20
  • Android入门:Log介绍

      06-24
  • Android入门笔记 - 介绍

      11-27
  • android Fragment 入门介绍

      04-29
  • Android Binder 入门介绍

      09-26
  • Android入门:ImageView介绍

      06-23
  • Android Framework 入门分析1

      07-04

Android Framework入门介绍

置顶 2018年03月13日 09:37:56 宇落无痕 阅读数:6362 标签: AndroidframeworkAndroid系统启动Android编译系统Linux下工具 更多

个人分类: framework入门介绍

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fu_kevin0606/article/details/79532710

framework概述

Android简介

      Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良 Android系统,随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008 年10月,随后,Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。

     开发者能使用Android SDK为Android platform开发应用,这些应用使用JAVA语言书写,运行在虚拟机(一个专为手机程序开发的基于linux内核的JAVA虚拟机)上。 

Android架构

        Android架构主要分为分为四部分,从下往上以此为LINUX KERNEL(内核层),LIBRARIES(共享库,以及android运行时库),APPLICATION FRAMEWORK(应用框架层),APPLICATION(应用程序)。而本文主要分析就是APPLICATION FRAMEWORK(应用框架层)。

  APPLICATION

      主要为系统中的应用,如桌面,闹铃,设置,日历,电话,短信等系统应用。

  APPLICATION FRAMEWORK

      Android的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本层次提供了以下服务:

i. 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器;

ii. 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据;

iii. 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layout files );

iv. 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息;

v. 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。

 Android Runtime

      Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。

 Libraries

Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:

i. 系统 C 库:一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。

ii. 媒体库:基于 PacketVideo OpenCORE。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。

iii. Surface Manager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。

iv. LibWebCore:一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。

v. SGL:底层的2D图形引擎

vi. 3D libraries:基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。

vii. FreeType:位图(bitmap)和矢量(vector)字体显示。

SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

 Linux Kernel

      Android 的核心系统服务依赖于 Linux 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。

framework简介

系统服务

      SystemServer 是framework中非常重要的一个进程,它是在虚拟机启动后运行的第一个java进程,SystemServer启动其他系统服务,这些系统服务都是以一个线程的方式存在于SystemServer进程中。 

a) EntropyService 提供伪随机数

b) PowerManagerService 电源管理服务

c) ActivityManagerService 最核心的服务之一,管理Activity

d) TelephonyRegistry 通过该服务注册电话模块的事件响应,比如重启、关闭、启动等

e) PackageManagerService 程序包管理服务

f) AccountManagerService 账户管理服务,是指联系人账户,而不是Linux系统的账户 

g) ContentService ContentProvider服务,提供跨进程数据交换

h) BatteryService 电池管理服务

i) LightsService 自然光强度感应传感器服务

j) VibratorService 震动器服务 

k) AlarmManagerService 定时器管理服务,提供定时提醒服务

l) WindowManagerService Framework最核心的服务之一,负责窗口管理

m) BluetoothService 蓝牙服务

n) DevicePolicyManagerService 提供一些系统级别的设置及属性

o) StatusBarManagerService 状态栏管理服务

p) ClipboardService 系统剪切板服务

q) InputMethodManagerService 输入法管理服务

r) NetStatService 网络状态服务

s) NetworkManagementService 网络管理服务

t) ConnectivityService 网络连接管理服务

u) AccessibilityManagerService 辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果

v) MountService 挂载服务,可通过该服务调用Linux层面的mount程序

w) NotificationManagerService 通知栏管理服务,Android中的通知栏和状态栏在一起,只是界面上前者在左边,后者在右边

x) DeviceStorageMonitorService 磁盘空间状态检测服务

y) LocationManagerService 地理位置服务

z) SearchManagerService 搜索管理服务

aa) DropBoxManagerService 通过该服务访问Linux层面的Dropbox程序

ab) WallpaperManagerService 墙纸管理服务,墙纸不等同于桌面背景,在View系统内部,墙纸可以作为任何窗口的背景 

ac) AudioService 音频管理服务

ad) BackupManagerService 系统备份服务

ae) AppWidgetService         Widget服务

af) RecognitionManagerService 身份识别服务

ag) DiskStatsService 磁盘统计服务

核心服务介绍

a) ActivityManagerService

ActivityManagerService(以下简称:AMS)是android系统的一个系统服务,是应用进程的管理服务端,直接的控制了应用程序的各个行为,保证了系统中不同的应用程序之间能够和谐的合理的进行调度运行。

AMS是android上层系统最核心的模块之一,其主要的工作是对所有的应用进程及其进程中的四大组件进行管理。(当然这里面也涉及了一些window、电源、权限等内容)

对进程的管理包括:进程的创建与销毁、进程的优先级调整。

对组件的管理包括:Activity的调度管理、Service的管理、Broadcast的分发、以及ContentProvider管理。

                             

b) WindowManagerService

对系统中所有窗口进行管理;动画处理 ;Input分发、处理;Display管理(多屏显示) 。

c) Android Graphics系统

                  

 

a) Surfaceflinger

负责Layer合成(composer);创建surface;管理surface。

b) PackageManagerService

负责Package的管理,应用程序的安装 、卸载、信息查询等。

                                     

c) Input系统

android的输入系统主要完成键盘、触屏、鼠标等输入设备的事件输入及向焦点窗口和焦点视图的事件派发,插入,过滤,拦截等功能。

android支持的输入设备主要有:键盘、鼠标、触摸屏、轨迹球、游戏摇杆/手柄、绘图板。

Framework的范围

Framework负责APPLICATION FRAMEWORK、ANDROID RUNTIME和LIBRARIES三部分。

a) 系统Manager和Service相关内容

b) 系统接口和jni相关内容

c) 系统功能相关内容(watchdog、vold、binder等)

d) 虚拟机dalvik、art

e) 系统so库相关内容

f) CTS、GTS等预分析

g) Monkey预分析

h) 系统稳定性问题(系统ANR、冻屏、重启、蓝屏等)

i) 系统性能问题

framework基础

语言基础:Java、C++、C

技术基础:进程间通信,多线程,jni,linux相关知识,binder

 

Linux入门介绍

    由于在进行framework工作时,代码的下载和管理主要在Ubuntu下面进行比较方便,所以在搞framework之前需要对linux系统有所了解,会使用一些常用命令。linux是基于shell命令行操作,shell是系统的一个工具。用户直接面对的不是计算机硬件而是shell,用户想操作计算机硬件,需先把指令告诉shell,shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。

启动shell界面,快捷键Ctrl+Atl+t或者可以点击桌面左上角的图标进行搜索“终端”如下图,点击终端就可以出现shell终端。

      当启动一个shell时,默认目录为/home/username/:可以使用pwd来查看当前的目录。

      当系统第一次启动,且能连上internet,先更新系统的软件库信息,使用命令sudo apt-get update,sudo为使用管理员权限,第一次执行时需要输入系统的开机密码,之后五分钟内不需要输入密码,过了五分钟需要再次输入密码。

    等更新完成后,就可以开始安装软件了,例:安装git,可以sudo apt-get install git进行安装,非常简便。install是安装系统中存在安装包的软件。

如果我们从网上下载一个deb的软件包sudo dpkg -i .deb软件包

命令:sudo dpkg -i xxx.deb,安装xxx软件包与apt-get install 安装方式的区别:

 

dpkg方式 apt-get install方式
手动下载deb软件包 自动下载deb软件包
手动指定软件包下载路径 自动下载到/var/cache/apt/archive/下
手动执行sudo dpkg -i xxx.deb安装 自动执行dpkg安装命令

一般在做framework开发时都会有一个代码服务器专门放置一些系统源码,而该服务器是没有显示器的,我们只能远程登录到服务器上进行查看代码,这时就需要安装远程终端访问软件:ssh

安装方法:sudo apt-get install openssh-server

用法:ssh username@ip

当我们想从服务器copy文件到我们本地,我们可以使用scp命令:scp username@ip:/文件位置,

或者scp -r username@ip:/文件夹位置,就可以轻松复制文件,同理也可以将本地文件copy到服务器。

LINUX常用命令请查看博客(Linux常用命令

Android代码管理

代码结构

      framework开发工作方式与应用开发的工作方式是完全不同的,framework开发是基于Android源代码进行的开发,版本管理主要使用:git,repo两种工具。如果想要学习framework开发,必须需要下载一套Android源码。官方下载地址【参考、需】: https://source.android.com/source/downloading.html,具体的下载编译调试代码的方式可以参考老罗的博客视频,讲解的非常清楚,附上地址(http://0xcc0xcd.com/p/index.php),感谢老罗。

    当下载完成代码后首先了解一下Android源代码的结构:

 
  1. ├── bionic android上实现的libc库

  2. ├── bootable 存放可启动项,如recovery、bootloader等

  3. ├── build android编译系统所用到的make文件及其它工具

  4. ├── cts android兼容性测试

  5. ├── dalvik dalvik虚拟机

  6. ├── development 与开发相关的一些东西

  7. ├── device 存放需要适配的设备信息

  8. ├── external 第三方库

  9. ├── frameworks framework部分

  10. ├── hardware 硬件相关代码

  11. ├── kernel kernel相关代码

  12. ├── libcore android上实现的Java基础库

  13. ├── Makefile

  14. ├── ndk

  15. ├── out 编译输出目录

  16. ├── packages 包含系统应用、壁纸应用、内容提供者、输入法等

  17. ├── prebuilt 预编译好的工具

  18. ├── sdk sdk相关内容

  19. ├── system 操作系统层次的一些可执行程序和配置文件

  20. ├── u-boot 用于引导linux启动的u-boot

  21. └── vendor 存放与厂商相关的信息,也可粗放需要适配的设备信息

而framework开发主要要了解的就是frameworks下面的内容。

代码编译

当把代码下载完毕后需要对源代码整体进行编译,具体方法如下:

1.source build/envsetup.sh
  读取各个board的vendorsetup.sh
2.lunch
   去选择要编译的对象

3.完整系统编译,输出到out/target/product//...

      make -j4(j4为使用四个线程同时编译)

4.如果要单编某个模块,就是用如下命令来编译需要的模块。

   编译bootloader,
      make bootloader
   编译kernel生成boot.img,
      make bootimage
   编译system生成system.img,
      make systemimage
   编译userdata生成userdata.img,
      make userdataimage
   编译recovery生成recovery.img,

      make recoveryimage

当编译好对应的image后,可以使用fastboot将image烧到手机里面:

如何进入fastboot:
   开机状态下执行adb reboot bootloader
   关机状态组合键:home+power
1.检查连接设备
     Fastboot devices
2.烧写system.img
   Fastboot flash system system.img
3.烧写boot.img(recovery)
   fastboot flash boot boot.img(recovery.img)
4.烧写bootloader

    Fastboot flash 2ndbl u-boot.bin

常用工具以及调试方法

详细参考Framework工具及调试方法

 
   
   
   

一般在做framework开发时都会有一个代码服务器专门放置一些系统源码,而该服务器是没有显示器的,我们只能远程登录到服务器上进行查看代码,这时就需要安装远程终端访问软件:ssh

安装方法:sudo apt-get install openssh-server

用法:ssh username@ip

当我们想从服务器copy文件到我们本地,我们可以使用scp命令:scp username@ip:/文件位置,

或者scp -r username@ip:/文件夹位置,就可以轻松复制文件,同理也可以将本地文件copy到服务器。

LINUX常用命令请查看博客(Linux常用命令

Android代码管理

代码结构

      framework开发工作方式与应用开发的工作方式是完全不同的,framework开发是基于Android源代码进行的开发,版本管理主要使用:git,repo两种工具。如果想要学习framework开发,必须需要下载一套Android源码。官方下载地址【参考、需】: https://source.android.com/source/downloading.html,具体的下载编译调试代码的方式可以参考老罗的博客视频,讲解的非常清楚,附上地址(http://0xcc0xcd.com/p/index.php),感谢老罗。

    当下载完成代码后首先了解一下Android源代码的结构:

 
  1. ├── bionic android上实现的libc库

  2. ├── bootable 存放可启动项,如recovery、bootloader等

  3. ├── build android编译系统所用到的make文件及其它工具

  4. ├── cts android兼容性测试

  5. ├── dalvik dalvik虚拟机

  6. ├── development 与开发相关的一些东西

  7. ├── device 存放需要适配的设备信息

  8. ├── external 第三方库

  9. ├── frameworks framework部分

  10. ├── hardware 硬件相关代码

  11. ├── kernel kernel相关代码

  12. ├── libcore android上实现的Java基础库

  13. ├── Makefile

  14. ├── ndk

  15. ├── out 编译输出目录

  16. ├── packages 包含系统应用、壁纸应用、内容提供者、输入法等

  17. ├── prebuilt 预编译好的工具

  18. ├── sdk sdk相关内容

  19. ├── system 操作系统层次的一些可执行程序和配置文件

  20. ├── u-boot 用于引导linux启动的u-boot

  21. └── vendor 存放与厂商相关的信息,也可粗放需要适配的设备信息

而framework开发主要要了解的就是frameworks下面的内容。

代码编译

当把代码下载完毕后需要对源代码整体进行编译,具体方法如下:

1.source build/envsetup.sh
  读取各个board的vendorsetup.sh
2.lunch
   去选择要编译的对象

3.完整系统编译,输出到out/target/product//...

      make -j4(j4为使用四个线程同时编译)

4.如果要单编某个模块,就是用如下命令来编译需要的模块。

   编译bootloader,
      make bootloader
   编译kernel生成boot.img,
      make bootimage
   编译system生成system.img,
      make systemimage
   编译userdata生成userdata.img,
      make userdataimage
   编译recovery生成recovery.img,

      make recoveryimage

当编译好对应的image后,可以使用fastboot将image烧到手机里面:

如何进入fastboot:
   开机状态下执行adb reboot bootloader
   关机状态组合键:home+power
1.检查连接设备
     Fastboot devices
2.烧写system.img
   Fastboot flash system system.img
3.烧写boot.img(recovery)
   fastboot flash boot boot.img(recovery.img)
4.烧写bootloader

    Fastboot flash 2ndbl u-boot.bin

你可能感兴趣的:(Android Framework入门介绍)