android程序的编译,安装和运行 | 小米科技 汪文俊

29
Produced by CSDN Website: http://devcamp.csdn.net/ Weibo: http://weibo.com/ cmdnclub/ Android DevCamp

Upload: imshining-devcamp

Post on 15-Jan-2015

3.214 views

Category:

Technology


0 download

DESCRIPTION

安卓系统架构多年经验总结:《Android程序的编译,安装和运行》 | Android DevCamp | 7月27日 北京 讲师简介:汪文俊,中国科技大学硕士,原IBM系统工程师,现为小米科技MIUI首席架构师,开源C编译器项目ucc的作者。 话题简介:Android程序的编译,安装和运行。从程序员的观点探索Android系统提供的编程抽象,从程序的整个生命周期讨论一下Android系统结构。

TRANSCRIPT

Produced  by  CSDN    Website:  http://devcamp.csdn.net/    Weibo:  http://weibo.com/cmdnclub/      

Android DevCamp

Android系统剖析                          汪文俊

                                                                                                                                   2012/7/18  

议程

²  Android程序结构  

²  Android系统结构  

²  Android系统和程序设计  

第⼀一部分 Android程序结构

HelloWorld

²  AndroidManifest.xml  

²  res/  ®  layout/hello_world.xml  ®  values/strings.xml  

²  src/  ®  com/example/android/HelloWorld.java    

HelloWorld.java package  com.example.android;    import  com.example.android.R;  import  android.app.Activity;  import  android.os.Bundle;    public  class  HelloWorld  extends  Activity  {    protected  void  onCreate(Bundle  state)  {      super.onCreate(state);      setContentView(R.layout.hello_world);    }  

}  

资源 layout/hello_world.xml  <EditText          xmlns:android=“http://schema.android.com/apk/res/android”          android:layout_width=“match_parent”          android:layout_height=“match_parent”          android:textSize=“18sp”          android:text=“@string/hello_world”  />    values/strings.xml  <string    android:name=“hello_world”>Hello,World</string>  

AndroidManifest <manifest          xmlns:android=“http://schema.android.com/apk/res/android”          package=“com.example.android”>          <application  android:label=“HelloWorld”>                  <activity  android:name=“HelloWorld”>                          <intent-­‐_ilter>                                  <action  android:name=“android.intent.action.MAIN”  />                                  <category    

android:name=“android.intent.category.LAUNCHER”  />                          </intent-­‐_ilter>                </activity>          </application>  </manifest>  

res/* �

aapt �R.java

AIDL classes � javac �

src/* �

java class files �

dx � JARs �

classes.dex �

res/* � aapt �

resources.arsc �aapt �

apk �

signapk � signed apk � zipalign �

final apk �

资源编译

²  R.layout.hello_world(0x7f010001)  ³  package  id:  7f  ³  resource  type:  01  ³  resource  id:  0001    

²  resources.arsc(资源查找表)  

package �

res/layout/hello_world.xml �

res/drawable-hdpi/icon.png �

… �

layout �

drawable �

… �

strings �

config 1 �

config 2 �

… �

config N �

item 1 �

item 2 �

… �

item N �

视图

²  树形结构  ³  View  (TextView,  Button,  …)  ³  ViewGroup(FrameLayout,  LinearLayout,  …)  

²  setContentView(R.layout.hello_world)  

²  解析XML,利用反射构造视图结构  

程序安装

²  installPackage(“HelloActivity.apk”)  

²  解析AndroidManifest.xml  ³  Activity  ³  BroadcastReceiver  ³  Service  ³  ContentProvider  

²  /data/system/packages.xml  

程序运行

Intent  intent  =  new  Intent(“com.example.android”,          “com.example.android.HelloWorld”);  context.startActivity(intent);  

第二部分 Android系统结构

体系结构 应用 �

Android系统框架 �

Java核心运行时库 �

dalvik虚拟机 �

JNI库 �

本地运行时库 �

硬件抽象层 �

Linux内核 �

Android手机分区

cache �

data �

system �

boot �modem �

bootloader �

系统启动

²  系统上电加载内核  

²  内核启动  

²  首进程init  

启动脚本init.rc

service  adbd  /sbin/adbd  user  adb  group  adb  

 service  servicemanager  /system/bin/servicemanager    user  system      onrestart  restart  zygote      onrestart  restart  media  

 service  zygote  /system/bin/app_process  -­‐Xzygote  /system/bin  -­‐-­‐zygote  

socket  zygote  6678  

Zygote

Zygote �

dalvik vm �

System Server

System Server

dalvik vm �

Activity Manager �

Package Manager �

Zygote �

fork �

dalvik vm �

Home

System Server

dalvik vm �

Activity Manager �

Package Manager �

Zygote �

fork �

Home �

Activity Thread �

fork �

dalvik vm � dalvik vm �

进程间通信

²  信号  

²  管道,命名管道  

²  共享内存  

²  socket  

²  RPC(COM,  CORBA)  

²  OpenBinder  

Binder

Process A �

Binder Driver �

marshal � unmarshal �

Parcel

Process B �

Parcel

Binder

Process A �

Binder Driver �

marshal � unmarshal �

Service Manager �

注册 �

查询 �

返回 �

Parcel

Process B �

Parcel

HelloWorld

System Server

dalvik vm �

Activity Manager �

Package Manager �

Zygote �

fork �

Home �

Activity Thread �

HelloWorld �

Activity Thread �

fork � startActivity �

dalvik vm � dalvik vm � dalvik vm �

第三部分 Android系统和程序设计

系统设计 ²  层次结构  

²  安全  

²  围绕Intent的组件通信  Ø  缺乏组件共享机制    

²  基于生命期的管理  Ø  超时异步,ANR    

²  广播机制  Ø  泛滥的广播侦听    

²  Java  Ø  垃圾回收  

程序设计 ²  不要阻塞主线程  

Ø  Thread  ,  AsyncTask    

²  消息循环  Ø  Handler,  HandlerThread    

²  Service  Ø  多任务  Ø  ACTION_BOOT_COMPLETED  Ø  AlarmManager  Ø  WakeLock