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

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>
            欧美一区二区三区免费观看| 一本久道久久综合中文字幕| 亚洲国产免费| 亚洲高清一区二区三区| 国产综合香蕉五月婷在线| 国产精品久久久久影院亚瑟| 欧美日韩在线播放三区| 欧美日韩亚洲一区二区三区在线| 欧美精品在线一区二区| 欧美午夜精品久久久久久超碰| 欧美人与禽猛交乱配| 欧美日韩一区二区高清| 国产热re99久久6国产精品| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲欧洲一区二区三区| 亚洲在线免费观看| 美日韩精品免费观看视频| 亚洲激情小视频| 亚洲免费大片| 久久xxxx| 欧美日韩天天操| 午夜性色一区二区三区免费视频| 好吊色欧美一区二区三区视频| 最新成人在线| 中文欧美字幕免费| 欧美.www| 亚洲欧美日韩一区| 欧美国产综合| 国产在线麻豆精品观看| 日韩亚洲视频| 女生裸体视频一区二区三区| 亚洲在线观看| 欧美日韩精品欧美日韩精品| 国产真实精品久久二三区| 亚洲视频在线观看免费| 欧美国产精品va在线观看| 小黄鸭精品aⅴ导航网站入口| 久久精品国产一区二区电影| 国产精品草莓在线免费观看| 亚洲狼人精品一区二区三区| 老司机67194精品线观看| 一本久久a久久精品亚洲| 免费短视频成人日韩| 国产欧美1区2区3区| 亚洲自拍偷拍麻豆| 亚洲激情国产| 免费在线欧美黄色| 精品av久久707| 午夜免费电影一区在线观看| 亚洲区国产区| 久久国产精品久久久久久久久久 | 午夜欧美不卡精品aaaaa| 欧美激情精品久久久久久久变态 | 久久亚洲一区| 国内精品久久久久久久影视麻豆| 亚洲伊人伊色伊影伊综合网| 亚洲黄一区二区| 欧美成va人片在线观看| 在线精品视频一区二区三四| 久久男人资源视频| 欧美亚洲视频在线看网址| 国产一区二区高清不卡| 久久国产精品久久精品国产| 亚洲欧美一区二区三区极速播放| 欧美午夜电影一区| 亚洲欧美日韩精品久久久久| 制服丝袜亚洲播放| 国产精品视频导航| 欧美一级在线播放| 欧美在线播放高清精品| 黄色成人av网| 麻豆成人在线播放| 美女被久久久| 亚洲视频图片小说| 亚洲欧美日韩精品久久亚洲区 | 乱中年女人伦av一区二区| 亚洲欧美日韩综合aⅴ视频| 国产日产高清欧美一区二区三区| 性久久久久久| 久久久久久久久岛国免费| 樱桃国产成人精品视频| 欧美刺激午夜性久久久久久久| 久久av在线| 亚洲美女精品久久| 亚洲美女在线观看| 欧美午夜精品久久久久久超碰| 欧美中文字幕在线观看| 久久久青草青青国产亚洲免观| 91久久亚洲| 亚洲天堂免费观看| 国产亚洲欧美在线| 亚洲国产成人高清精品| 欧美精品免费在线观看| 香蕉成人久久| 免费在线欧美视频| 亚洲欧美日韩在线| 蜜桃av综合| 午夜久久资源| 免费成人av在线| 亚洲欧美色婷婷| 久久综合国产精品| 亚洲综合色激情五月| 久久青草久久| 欧美一区永久视频免费观看| 久久午夜av| 亚洲欧美国内爽妇网| 久久影院午夜片一区| 中国日韩欧美久久久久久久久| 欧美一区二区精品| 一区二区三区视频在线播放| 久久青草久久| 久久国产欧美| 欧美日韩在线观看一区二区| 久久天天躁夜夜躁狠狠躁2022| 欧美日韩第一区日日骚| 久久色在线播放| 国产精品久久久久国产a级| 欧美freesex8一10精品| 国产精品影视天天线| 最新国产乱人伦偷精品免费网站| 国产欧美一区二区精品秋霞影院| 亚洲国产精品嫩草影院| 亚洲电影在线播放| 欧美一区二区三区成人| 亚洲免费中文| 欧美视频导航| 亚洲美女视频在线免费观看| 亚洲国产精品小视频| 欧美一二区视频| 亚洲欧美日韩在线不卡| 欧美午夜剧场| 亚洲精品视频二区| 亚洲剧情一区二区| 欧美福利一区二区| 免费av成人在线| 亚洲国产日韩欧美在线动漫 | 欧美国产一区二区在线观看 | 亚洲一区三区视频在线观看| 欧美激情网友自拍| 亚洲欧洲日产国产网站| 亚洲日本精品国产第一区| 久久免费少妇高潮久久精品99| 久热爱精品视频线路一| 伊人久久大香线蕉综合热线| 欧美一区二区视频免费观看| 久久精品午夜| 亚洲福利在线看| 久久精品人人| 亚洲高清视频一区| 亚洲人成欧美中文字幕| 欧美激情精品久久久六区热门 | 麻豆9191精品国产| 欧美1区2区3区| 91久久国产综合久久蜜月精品| 久色成人在线| 亚洲精品偷拍| 亚洲欧美日韩区| 国产日韩在线视频| 葵司免费一区二区三区四区五区| 亚洲第一区色| 在线一区亚洲| 国产视频一区二区在线观看| 久久久午夜电影| 亚洲国产欧美日韩| 午夜精品一区二区三区在线视 | 在线性视频日韩欧美| 欧美无乱码久久久免费午夜一区 | 欧美成人黄色小视频| 一本色道久久综合一区| 久久人人超碰| 亚洲午夜久久久久久久久电影院| 欧美无砖砖区免费| 久久久久欧美| 99精品国产99久久久久久福利| 久久成人一区| 日韩小视频在线观看| 国产欧美日韩伦理| 欧美黄在线观看| 久久九九久精品国产免费直播| 亚洲国产日韩精品| 欧美一区网站| 一区二区三区四区精品| 激情成人av| 国产精品欧美在线| 久久这里有精品15一区二区三区| 亚洲精品一区二区三| 老牛影视一区二区三区| 亚洲欧美日韩区| 亚洲精品国产拍免费91在线| 国产欧美一区二区精品性| 欧美激情在线狂野欧美精品| 欧美一区二区三区成人| 一区二区三区黄色| 最新国产乱人伦偷精品免费网站 | 欧美在线视频观看| 亚洲美女91| 亚洲激情在线观看| 国产香蕉97碰碰久久人人| 欧美精品一区二区久久婷婷| 久久精品视频免费|