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

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>
            欧美激情国产高清| 国产精品你懂的在线| 久久精品国产一区二区三| 亚洲国产日韩在线一区模特| 亚洲第一精品久久忘忧草社区| 伊人久久男人天堂| 伊人精品在线| 亚洲激情另类| 亚洲深夜福利视频| 先锋a资源在线看亚洲| 欧美在线地址| 久久九九精品| 欧美黄色免费| 亚洲制服少妇| 久久婷婷蜜乳一本欲蜜臀| 欧美福利视频网站| 欧美日韩伊人| 国产小视频国产精品| 伊人狠狠色j香婷婷综合| 影音先锋成人资源站| 最新国产乱人伦偷精品免费网站| 亚洲视频久久| 嫩草国产精品入口| 一区二区三区视频在线观看| 性做久久久久久久免费看| 美女精品视频一区| 欧美午夜精品一区| 亚洲高清视频在线观看| 亚洲欧美日韩国产一区二区三区| 久久亚洲精品一区二区| 99成人精品| 久久久久久亚洲综合影院红桃 | 美女精品一区| 91久久久久久久久| 欧美亚洲视频在线看网址| 蜜臀av国产精品久久久久| 国产精品久久久久一区| 亚洲激情自拍| 久久久午夜电影| 国产精品99久久久久久久vr | 在线精品视频一区二区三四| 一区二区三区产品免费精品久久75| 欧美在线亚洲| 一本大道久久a久久综合婷婷| 玖玖玖免费嫩草在线影院一区| 国产精品视频免费观看www| 一本色道久久加勒比精品| 久久久人成影片一区二区三区观看| 一区二区三区成人| 欧美日韩国产成人在线观看 | 欧美一区二区三区免费观看视频| 亚洲国产第一| 久久久水蜜桃av免费网站| 国产精品人成在线观看免费| 一本一道久久综合狠狠老精东影业 | 欧美大片国产精品| 今天的高清视频免费播放成人 | 久热re这里精品视频在线6| 亚洲午夜高清视频| 欧美肉体xxxx裸体137大胆| 亚洲最新色图| 亚洲第一色在线| 久久亚洲精品一区二区| 伊人久久亚洲影院| 久久综合色天天久久综合图片| 亚洲免费在线播放| 国产精品卡一卡二卡三| 午夜精品在线看| 亚洲欧美综合v| 国产欧美一区二区三区国产幕精品| 欧美一区免费视频| 欧美伊人久久| 亚洲成人在线网站| 亚洲第一综合天堂另类专| 麻豆精品在线播放| 亚洲乱码视频| 一区二区欧美在线观看| 国产精品日日做人人爱| 开心色5月久久精品| 亚洲精品影院在线观看| 最新日韩精品| 国产精品成人v| 亚洲欧美激情精品一区二区| 亚洲午夜91| 黄网站色欧美视频| 亚洲大片av| 欧美视频成人| 久久嫩草精品久久久精品一| 男人的天堂亚洲| 亚洲深夜福利| 久久精品国产精品亚洲综合| 亚洲欧洲日本国产| 亚洲天堂av在线免费观看| 国产伦精品一区二区三区照片91 | 国产欧美日韩中文字幕在线| 麻豆成人小视频| 欧美日韩亚洲一区| 久久人人97超碰精品888| 欧美成人精品激情在线观看| 亚洲一区二区成人在线观看| 午夜精品视频在线| 亚洲欧洲精品一区二区精品久久久| 亚洲美女尤物影院| 黑人一区二区三区四区五区| 一本一本久久a久久精品牛牛影视| 国产一区二区中文字幕免费看| 亚洲黄色小视频| 国产一级久久| 一区二区激情视频| 亚洲国产一区二区精品专区| 亚洲图片欧洲图片日韩av| 在线成人免费观看| 亚洲一区二区影院| 日韩午夜电影av| 久久精品72免费观看| 亚洲欧美亚洲| 欧美日韩国产美| 欧美激情第10页| 国产一区三区三区| 国产精品99久久久久久有的能看| 亚洲国产精品v| 欧美一区二区日韩一区二区| 亚洲一区二区综合| 欧美福利视频网站| 欧美成人伊人久久综合网| 国产丝袜一区二区| 亚洲一区二区三区在线播放| 夜夜嗨av一区二区三区中文字幕| 久久中文字幕一区二区三区| 久久久青草婷婷精品综合日韩 | 国产亚洲综合在线| 午夜精品在线| 欧美一区=区| 国产精品主播| 亚洲嫩草精品久久| 欧美亚洲视频在线观看| 国产精品黄色| 一区二区三区视频观看| 亚洲午夜未删减在线观看| 欧美日韩精品免费观看视频完整| 亚洲黄色尤物视频| 亚洲精品日韩在线| 欧美精品乱码久久久久久按摩| 亚洲成人资源网| 亚洲激情二区| 欧美激情一区二区三区全黄| 亚洲精品九九| 亚洲一区免费视频| 国产精品久久久久久久第一福利| 99国内精品| 欧美一区二区三区视频免费| 国产亚洲成av人在线观看导航| 午夜精品亚洲一区二区三区嫩草| 久久高清免费观看| 在线日韩欧美视频| 免费久久精品视频| 99re8这里有精品热视频免费| 亚洲一二三区在线| 国产精品自在线| 久久精品女人的天堂av| 亚洲高清毛片| 亚洲午夜久久久久久久久电影院 | 国产精品久久99| 欧美亚洲色图校园春色| 免费看亚洲片| 亚洲性色视频| 韩日欧美一区二区| 欧美成人免费播放| 亚洲手机在线| 久久亚洲美女| 亚洲午夜成aⅴ人片| 狠狠色噜噜狠狠狠狠色吗综合| 久久夜色精品国产欧美乱| 一本色道久久99精品综合| 久久久久成人精品| 亚洲美洲欧洲综合国产一区| 国产欧美一区二区三区久久| 欧美暴力喷水在线| 亚洲欧美成人综合| 欧美激情精品久久久久久黑人| 亚洲小说春色综合另类电影| 一区二区三区在线免费视频| 欧美精品 日韩| 久久av一区二区三区亚洲| 99av国产精品欲麻豆| 老牛嫩草一区二区三区日本| 亚洲一区二区在线看| 亚洲日本国产| 国产综合av| 国产精品羞羞答答xxdd| 欧美精品一区二区三| 久久激情综合| 香蕉久久国产| 在线一区视频| 99视频日韩| 亚洲国产91色在线| 久久久精品2019中文字幕神马| 一区二区三区波多野结衣在线观看| 亚洲电影视频在线| 国外精品视频|