android程序的编译,安装和运行 | 小米科技 汪文俊
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
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);
启动脚本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
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 �
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 �