SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Android DevCamp


Produced	
  by	
  CSDN	
  
	
  
Website:	
  http://devcamp.csdn.net/	
  
	
  
Weibo:	
  http://weibo.com/
cmdnclub/	
  
	
  
	
  
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/*	
                                                       src/*	


                                R.java	

   aapt	
                                                        javac	

                             AIDL classes	



                             java class files	



    dx	
          JARs	
                        res/*	
        aapt	



classes.dex	
                     aapt	
                   resources.arsc	



                 apk	


  signapk	
                  signed apk	
                     zipalign	


                                final apk	

资源编译

²    R.layout.hello_world(0x7f010001)	
  
       ³  package	
  id:	
  7f	
  

       ³  resource	
  type:	
  01	
  

       ³  resource	
  id:	
  0001	
  

       	
  
²    resources.arsc(资源查找表)	
  
item 1	

                                                      item 2	

                                         config 1	

                                                        …	

                                         config 2	

                       layout	
                      item N	

                                            …	

                     drawable	

package	
                               config N	

                         …	

                      strings	





         res/layout/hello_world.xml	

         res/drawable-hdpi/icon.png	

                     …	

视图
²    树形结构	
  
      ³  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
 Zygote	
                System	

                          Server	

                         Activity	

                         Manager	


               fork	
   Package	

                         Manager	


                            …	



dalvik vm	
             dalvik vm	

Home
 Zygote	
                System	

        Home	

                          Server	

                         Activity	

      Activity	

                         Manager	
       Thread	


               fork	
   Package	

                         Manager	


                            …	



dalvik vm	
             dalvik vm	
     dalvik vm	



                                fork	

进程间通信

²    信号	
  

²    管道,命名管道	
  

²    共享内存	
  

²    socket	
  

²    RPC(COM,	
  CORBA)	
  

²    OpenBinder	
  
Binder
Process A	
                         Process B	





  Parcel	

                            Parcel	



 marshal	
                         unmarshal	





                 Binder Driver	

Binder
Process A	
             Service	

       注册	
    Process B	

                         Manager	

               查询	


               返回	

  Parcel	

                                          Parcel	



 marshal	
                                       unmarshal	





                       Binder Driver	

HelloWorld
 Zygote	
                System	

                     Home	
       HelloWorld	

                          Server	

                         Activity	

                   Activity	

     Activity	

                         Manager	
                    Thread	
       Thread	


               fork	
   Package	

 startActivity	

                         Manager	


                            …	



dalvik vm	
             dalvik vm	
                  dalvik vm	
    dalvik vm	




                                        fork	

第三部分
Android系统和程序设计
系统设计
²    层次结构	
  

²    安全	
  

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

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

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

       	
  
²    Java	
  
       Ø  垃圾回收	
  
程序设计
²    不要阻塞主线程	
  
       Ø  Thread	
  ,	
  AsyncTask	
  

       	
  
²    消息循环	
  
       Ø  Handler,	
  HandlerThread	
  

       	
  
²    Service	
  
       Ø  多任务	
  

       Ø  ACTION_BOOT_COMPLETED	
  

       Ø  AlarmManager	
  

       Ø  WakeLock	
  

Weitere ähnliche Inhalte

Ähnlich wie Android程序的编译,安装和运行 | 小米科技 汪文俊

React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説Takao Tetsuro
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2DToshiyuki Ienaga
 
OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築Daein Park
 
Intentの概要
Intentの概要Intentの概要
Intentの概要l_b__
 
React+redux+saga 01
React+redux+saga 01React+redux+saga 01
React+redux+saga 01TIS Inc
 
NoSQL and JavaScript 2013-02-09
NoSQL and JavaScript 2013-02-09NoSQL and JavaScript 2013-02-09
NoSQL and JavaScript 2013-02-09WakandaJA
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2Takao Tetsuro
 
普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピ普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピTakuma Maruyama
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeNA
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsuNanha Park
 
PF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGPF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGdaye001
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929hiro345
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発papamitra
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 

Ähnlich wie Android程序的编译,安装和运行 | 小米科技 汪文俊 (20)

React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
 
Code Pack の話
Code Pack の話Code Pack の話
Code Pack の話
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築
 
Intentの概要
Intentの概要Intentの概要
Intentの概要
 
React+redux+saga 01
React+redux+saga 01React+redux+saga 01
React+redux+saga 01
 
NoSQL and JavaScript 2013-02-09
NoSQL and JavaScript 2013-02-09NoSQL and JavaScript 2013-02-09
NoSQL and JavaScript 2013-02-09
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
DartVM on Android
DartVM on AndroidDartVM on Android
DartVM on Android
 
普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピ普段の開発を少しだけ便利にする3つのレシピ
普段の開発を少しだけ便利にする3つのレシピ
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsu
 
PF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAGPF部第19回資料 poor man's JTAG
PF部第19回資料 poor man's JTAG
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 

Mehr von imShining @DevCamp

如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏imShining @DevCamp
 
Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐imShining @DevCamp
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂imShining @DevCamp
 
Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 imShining @DevCamp
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江imShining @DevCamp
 
发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥
发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥
发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥imShining @DevCamp
 
Android音频口数据通信开发 | 爱图腾 李鹏军
Android音频口数据通信开发 | 爱图腾 李鹏军Android音频口数据通信开发 | 爱图腾 李鹏军
Android音频口数据通信开发 | 爱图腾 李鹏军imShining @DevCamp
 
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山imShining @DevCamp
 
Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 imShining @DevCamp
 
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞imShining @DevCamp
 
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林imShining @DevCamp
 
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛imShining @DevCamp
 
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林imShining @DevCamp
 
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCampimShining @DevCamp
 
《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp
《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp
《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCampimShining @DevCamp
 
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践imShining @DevCamp
 

Mehr von imShining @DevCamp (16)

如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏
 
Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂
 
Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江
 
发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥
发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥
发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥
 
Android音频口数据通信开发 | 爱图腾 李鹏军
Android音频口数据通信开发 | 爱图腾 李鹏军Android音频口数据通信开发 | 爱图腾 李鹏军
Android音频口数据通信开发 | 爱图腾 李鹏军
 
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
 
Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振
 
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
 
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
 
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
 
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
 
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
 
《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp
《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp
《Passbook实战详解》| 爱图腾 廉洁 | iOS DevCamp
 
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
 

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

  • 1. Android DevCamp Produced  by  CSDN     Website:  http://devcamp.csdn.net/     Weibo:  http://weibo.com/ cmdnclub/      
  • 2. Android系统剖析                          汪文俊                                                                                                                                    2012/7/18  
  • 3. 议程 ²  Android程序结构   ²  Android系统结构   ²  Android系统和程序设计  
  • 5. HelloWorld ²  AndroidManifest.xml   ²  res/   ®  layout/hello_world.xml   ®  values/strings.xml   ²  src/   ®  com/example/android/HelloWorld.java    
  • 6. 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);    }   }  
  • 7. 资源 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>  
  • 8. 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>  
  • 9. res/*  src/*  R.java aapt  javac  AIDL classes  java class files  dx  JARs  res/*  aapt  classes.dex  aapt  resources.arsc  apk  signapk  signed apk  zipalign  final apk 
  • 10. 资源编译 ²  R.layout.hello_world(0x7f010001)   ³  package  id:  7f   ³  resource  type:  01   ³  resource  id:  0001     ²  resources.arsc(资源查找表)  
  • 11. item 1  item 2  config 1  …  config 2  layout  item N  …  drawable  package  config N  …  strings  res/layout/hello_world.xml  res/drawable-hdpi/icon.png  … 
  • 12. 视图 ²  树形结构   ³  View  (TextView,  Button,  …)   ³  ViewGroup(FrameLayout,  LinearLayout,  …)   ²  setContentView(R.layout.hello_world)   ²  解析XML,利用反射构造视图结构  
  • 13. 程序安装 ²  installPackage(“HelloActivity.apk”)   ²  解析AndroidManifest.xml   ³  Activity   ³  BroadcastReceiver   ³  Service   ³  ContentProvider   ²  /data/system/packages.xml  
  • 14. 程序运行 Intent  intent  =  new  Intent(“com.example.android”,          “com.example.android.HelloWorld”);   context.startActivity(intent);  
  • 16. 体系结构 应用  Android系统框架  Java核心运行时库  dalvik虚拟机  JNI库  本地运行时库  硬件抽象层  Linux内核 
  • 17. Android手机分区 cache  data  system  boot  modem  bootloader 
  • 18. 系统启动 ²  系统上电加载内核   ²  内核启动   ²  首进程init  
  • 19. 启动脚本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  
  • 21. System Server Zygote  System Server Activity Manager  fork  Package Manager  … dalvik vm  dalvik vm 
  • 22. Home Zygote  System Home  Server Activity Activity Manager  Thread  fork  Package Manager  … dalvik vm  dalvik vm  dalvik vm  fork 
  • 23. 进程间通信 ²  信号   ²  管道,命名管道   ²  共享内存   ²  socket   ²  RPC(COM,  CORBA)   ²  OpenBinder  
  • 24. Binder Process A  Process B  Parcel Parcel marshal  unmarshal  Binder Driver 
  • 25. Binder Process A  Service 注册  Process B  Manager  查询  返回  Parcel Parcel marshal  unmarshal  Binder Driver 
  • 26. HelloWorld Zygote  System Home  HelloWorld  Server Activity Activity Activity Manager  Thread  Thread  fork  Package startActivity  Manager  … dalvik vm  dalvik vm  dalvik vm  dalvik vm  fork 
  • 28. 系统设计 ²  层次结构   ²  安全   ²  围绕Intent的组件通信   Ø  缺乏组件共享机制     ²  基于生命期的管理   Ø  超时异步,ANR     ²  广播机制   Ø  泛滥的广播侦听     ²  Java   Ø  垃圾回收  
  • 29. 程序设计 ²  不要阻塞主线程   Ø  Thread  ,  AsyncTask     ²  消息循环   Ø  Handler,  HandlerThread     ²  Service   Ø  多任务   Ø  ACTION_BOOT_COMPLETED   Ø  AlarmManager   Ø  WakeLock