青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

life02

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  197 隨筆 :: 3 文章 :: 37 評論 :: 0 Trackbacks
http://topic.csdn.net/u/20110410/23/43571CFA-87B2-4E36-880C-1FA499BA32B0.html
應用安裝是智能機的主要特點,即用戶可以把各種應用(如游戲等)安裝到手機上,并可以對其進行卸載等管理操作。APK是Android Package的縮寫,即Android安裝包。APK是類似Symbian Sis或Sisx的文件格式。通過將APK文件直接傳到Android模擬器或Android手機中執行即可安裝。

Android應用安裝有如下四種方式
1. 系統應用安裝――開機時完成,沒有安裝界面
2. 網絡下載應用安裝――通過market應用完成,沒有安裝界面
3. ADB工具安裝――沒有安裝界面。
4. 第三方應用安裝――通過SD卡里的APK文件安裝,有安裝界面,由packageinstaller.apk應用處理安裝及卸載過程的界面。
應用安裝的流程及路徑
應用安裝涉及到如下幾個目錄:
system
/app 系統自帶的應用程序,無法刪除
data
/app 用戶程序安裝的目錄,有刪除權限。
安裝時把apk文件復制到此目錄
data
/data 存放應用程序的數據
Data
/dalvik-cache 將apk中的dex文件安裝到dalvik-cache目錄下(dex文件是dalvik虛擬機的可執行文件,其大小約為原始apk文件大小的四分之一)

安裝過程:復制APK安裝包到data
/app目錄下,解壓并掃描安裝包,把dex文件(Dalvik字節碼)保存到dalvik-cache目錄,并data/data目錄下創建對應的應用數據目錄。
卸載過程:刪除安裝過程中在上述三個目錄下創建的文件及目錄。
 

一、系統應用安裝:
PackageManager Service處理各種應用的安裝,卸載,管理等工作,開機時由systemServer啟動此服務
(源文件路徑:android\frameworks\base\services\java\com\android\server\ PackageManagerService.java)
 
 
PackageManager Service服務啟動的流程:
1. 首先掃描安裝“system\framework”目錄下的jar包
1. scanDirLI(mFrameworkDir, PackageParser.PARSE_IS_SYSTEM,
  scanMode 
| SCAN_NO_DEX);
 
 
2.第二步掃描安裝“system\app”目錄下的各個系統應用
scanDirLI(mSystemAppDir, PackageParser.PARSE_IS_SYSTEM, scanMode);
 
3.第三步掃描“data\app”目錄,即用戶安裝的第三方應用
scanDirLI(mAppInstallDir, 
0, scanMode);
 
4.第四步掃描" data\app-private"目錄,即安裝DRM保護的APK文件(目前沒有遇到過此類的應用)。
scanDirLI(mDrmAppPrivateInstallDir, 
0, scanMode | SCAN_FORWARD_LOCKED);

安裝應用的過程
1.scanDirLI(File dir, int flags, int scanMode) 遍歷安裝指定目錄下的文件

2.scanPackageLI(File scanFile,
  File destCodeFile, File destResourceFile, 
int parseFlags,
  
int scanMode) 安裝package文件

3.scanPackageLI(
  File scanFile, File destCodeFile, File destResourceFile,
  PackageParser.Package pkg, 
int parseFlags, int scanMode)
通過解析安裝包parsePackage獲取到安裝包的信息結構 

4.mInstaller.install(pkgName, pkg.applicationInfo.uid,
  pkg.applicationInfo.uid); 實現文件復制的安裝過程
(源文件路徑:frameworks\base\cmds\installd\installd.install)
 
二、從market上下載應用:
Google Market應用需要使用gmail賬戶登錄才可以使用,選擇某一應用后,開始下載安裝包,此過程中,在手機的信號區有進度條提示,下載完成后,會自動調用Packagemanager的接口安裝,調用接口如下:
public void installPackage(final Uri packageURI, final IPackageInstallObserver observer, final int flags)
final Uri packageURI:文件下載完成后保存的路徑
final IPackageInstallObserver observer:處理返回的安裝結果
final int flags:安裝的參數,從market上下載的應用,安裝參數為-r (replace)
installPackage接口函數的安裝過程:
1.public void installPackage(
  
final Uri packageURI, final IPackageInstallObserver observer, final int flags,
  
final String installerPackageName)
final String installerPackageName:安裝完成后此名稱保存在settings里,一般為null,不是關鍵參數
2.File tmpPackageFile = copyTempInstallFile(packageURI, res);
把apk文件復制到臨時目錄下的臨時文件
3.private void installPackageLI(Uri pPackageURI,
  
int pFlags, boolean newInstall, String installerPackageName,
  File tmpPackageFile, PackageInstalledInfo res)
解析臨時文件,獲取應用包名pkgName 
= PackageParser.parsePackageName(
  tmpPackageFile.getAbsolutePath(), 
0);
4.判斷如果帶有參數INSTALL_REPLACE_EXISTING,則調用replacePackageLI(pkgName,
  tmpPackageFile, 
  destFilePath, destPackageFile, destResourceFile,
  pkg, forwardLocked, newInstall, installerPackageName,
  res)
5.如果沒有,則調用installNewPackageLI(pkgName,
  tmpPackageFile, 
  destFilePath, destPackageFile, destResourceFile,
  pkg, forwardLocked, newInstall, installerPackageName,
  res);
6.private PackageParser.Package scanPackageLI(
  File scanFile, File destCodeFile, File destResourceFile,
  PackageParser.Package pkg, 
int parseFlags, int scanMode)
scanPackageLI以后的流程,與開機時的應用安裝流程相同。
三、從ADB工具安裝
Android Debug Bridge (adb) 是SDK自帶的管理設備的工具,通過ADB命令行的方式也可以為手機或模擬器安裝應用,其入口函數源文件為pm.java 
(源文件路徑:android\frameworks\base\cmds\pm\src\com\android\commands\pm\pm.java)
ADB命令行的形式為adb install 
<path_to_apk> ,還可以帶安裝參數如:"-l" "-r" "-i" "-t"
函數runInstall()中判斷參數
"-l"――INSTALL_FORWARD_LOCK
 
"-r"—— INSTALL_REPLACE_EXISTING  
"-i" ——installerPackageName
"-t"——INSTALL_ALLOW_TEST
我們常用的參數為
-r,表示覆蓋安裝手機上已安裝的同名應用。從market上下載的應用,也是直接傳入這個參數安裝的。
runInstall與market調用同樣的接口完成應用安裝。
public void installPackage(android.net.Uri packageURI, android.content.pm.IPackageInstallObserver observer, int flags, java.lang.String installerPackageName)
四、第三方應用安裝――通過SD卡里的APK文件安裝
把APK安裝包保存在SD卡中,從手機里訪問SD卡中的APK安裝包,點擊就可以啟動安裝界面,系統應用Packageinstaller.apk處理這種方式下的安裝及卸載界面流程,如下圖:
 
PackageInstallerActivity負責解析包,判斷是否是可用的Apk文件
創建臨時安裝文件
/data/data/com.android.packageinstaller/files/ApiDemos.apk
并啟動安裝確認界面startInstallConfirm,列出解析得到的該應用基本信息。如果手機上已安裝有同名應用,則需要用戶確認是否要替換安裝。
確認安裝后,啟動InstallAppProgress,調用安裝接口完成安裝。
pm.installPackage(mPackageURI, observer, installFlags);
其它:
1. PackageManagerService.java的內部類AppDirObserver實現了監聽app目錄的功能:當把某個APK拖到app目錄下時,可以直接調用scanPackageLI完成安裝。
2.手機數據區目錄“data/system/packages.xml”文件中,包含了手機上所有已安裝應用的基本信息,如安裝路徑,申請的permission等信息。
posted on 2012-04-08 22:29 life02 閱讀(604) 評論(0)  編輯 收藏 引用 所屬分類: android組件學習
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人资源| 久久综合九色九九| 老巨人导航500精品| 先锋影音网一区二区| 亚洲无限乱码一二三四麻| 亚洲婷婷综合色高清在线 | 在线观看成人网| 亚洲黄色成人| 亚洲午夜高清视频| 欧美在线综合视频| 欧美成人在线影院| 一本色道久久综合一区| 亚洲欧美制服中文字幕| 久久一区二区三区超碰国产精品| 免费看av成人| 国产精品久久久久9999高清| 国产一区二区三区日韩欧美| 91久久中文字幕| 午夜伦理片一区| 蜜桃av一区二区| 中文欧美在线视频| 玖玖综合伊人| 国产精品日韩欧美一区| 在线免费观看日本一区| 在线视频精品一| 噜噜噜91成人网| 国产精品va在线播放| 亚洲欧美中文字幕| 欧美不卡视频一区| 国产一区二区电影在线观看| 亚洲色图在线视频| 欧美/亚洲一区| 亚洲欧美日韩国产中文在线| 欧美精品一二三| 国产综合激情| 性色av一区二区三区在线观看| 欧美成人一区二免费视频软件| 这里只有精品视频在线| 欧美插天视频在线播放| 国内伊人久久久久久网站视频| 亚洲视频高清| 亚洲激情在线观看| 亚洲自拍另类| 欧美三级乱码| 99re在线精品| 亚洲激情在线视频| 久久综合伊人77777麻豆| 国产日韩亚洲欧美精品| 亚洲综合色在线| 99精品国产一区二区青青牛奶| 久久在线视频在线| 含羞草久久爱69一区| 久久精品免费观看| 性久久久久久久久| 国产欧美一区二区在线观看| 性娇小13――14欧美| 亚洲午夜精品| 国产精品免费网站在线观看| 亚洲理论在线| 亚洲精品日本| 欧美日韩国产一级片| 99www免费人成精品| 亚洲第一中文字幕| 模特精品在线| 日韩视频在线观看免费| 亚洲欧洲在线看| 欧美日韩成人一区二区三区| 一区二区三区 在线观看视频 | 老牛嫩草一区二区三区日本| 欧美在线黄色| 在线观看亚洲精品| 欧美国产亚洲精品久久久8v| 免费在线看成人av| 一区二区三区免费观看| 中文网丁香综合网| 国产一区二区三区丝袜| 猛干欧美女孩| 欧美三级午夜理伦三级中视频| 亚洲一区视频在线| 欧美在线免费看| 亚洲欧洲一区二区三区| 日韩视频免费观看高清完整版| 欧美三区美女| 久久久久久尹人网香蕉| 欧美电影免费观看高清完整版| 久久久精品国产免费观看同学| 欧美日韩国产丝袜另类| 亚洲综合日韩在线| 久久精品电影| 亚洲七七久久综合桃花剧情介绍| 日韩视频永久免费| 国产亚洲一区在线播放| 欧美国产在线视频| 国产精品美女久久久久久久| 久久综合999| 欧美区一区二| 久久久久久久精| 欧美日韩理论| 蜜桃av噜噜一区| 国产精品日韩在线播放| 欧美成人小视频| 国产午夜精品在线| 一区电影在线观看| 91久久精品国产| 午夜亚洲福利在线老司机| 亚洲人成免费| 亚洲一级高清| 艳妇臀荡乳欲伦亚洲一区| 欧美在线观看一区二区| 亚洲一区二区三区四区中文| 久久亚洲美女| 欧美在线视频全部完| 欧美精品国产一区| 蜜臀99久久精品久久久久久软件| 欧美性一区二区| 亚洲欧洲在线免费| 亚洲国产精品一区在线观看不卡 | 亚洲男人的天堂在线观看| 亚洲精品美女在线| 久久久久看片| 久久人人97超碰国产公开结果 | 国产一区二区三区精品欧美日韩一区二区三区 | 激情六月综合| 亚洲欧美日韩国产精品| 中文成人激情娱乐网| 免费欧美在线视频| 久久午夜视频| 国产自产高清不卡| 久久av在线| 久久一区二区三区国产精品| 国产免费观看久久| 性感少妇一区| 久久一区欧美| 曰本成人黄色| 噜噜噜91成人网| 欧美福利在线| 亚洲精品之草原avav久久| 久久综合电影一区| 欧美大片在线观看一区二区| 亚洲丰满在线| 欧美二区在线观看| 亚洲精品在线视频| 亚洲调教视频在线观看| 国产精品久久夜| 亚洲欧美影院| 久久中文字幕导航| 亚洲激情欧美| 亚洲黄色免费网站| 国产精品女人久久久久久| 亚洲一区二区在线视频| 久久gogo国模啪啪人体图| 国产一区日韩二区欧美三区| 久久疯狂做爰流白浆xx| 欧美成人午夜剧场免费观看| 亚洲免费成人av电影| 欧美四级在线| 久久精品99国产精品酒店日本| 欧美77777| 宅男精品视频| 国产一区二区三区在线观看视频 | 在线日韩欧美视频| 欧美区在线观看| 亚洲一区二区在线免费观看| 欧美在线视频不卡| 亚洲人成免费| 欧美午夜国产| 欧美影院在线| 亚洲理伦电影| 久久久久久夜| 亚洲精品乱码| 国产精品入口66mio| 老司机免费视频一区二区三区 | 久久夜色精品一区| 99视频日韩| 男人天堂欧美日韩| 亚洲视频1区| 伊人激情综合| 国产精品区一区二区三| 欧美aaaaaaaa牛牛影院| 亚洲午夜小视频| 亚洲高清免费| 久久婷婷国产综合精品青草 | 国产一区二区三区免费在线观看| 欧美激情四色| 久久精品国产综合精品| 日韩午夜在线电影| 欧美成va人片在线观看| 欧美一区二区三区播放老司机| 亚洲欧洲日产国产综合网| 国产欧美一区二区精品婷婷| 欧美精品福利| 裸体一区二区三区| 久久精品国产久精国产爱| 亚洲午夜精品网| 亚洲福利久久| 欧美高清视频一区| 久久久久久久尹人综合网亚洲| 亚洲天堂av在线免费| 日韩亚洲在线观看| 亚洲人成在线播放|