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

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>
            性亚洲最疯狂xxxx高清| 免费观看欧美在线视频的网站| 欧美激情网站在线观看| 一本大道久久a久久综合婷婷 | 亚洲午夜精品久久久久久浪潮| 久久综合999| 亚洲高清自拍| 麻豆精品精品国产自在97香蕉| 欧美在线观看视频在线| 久久久久久久久久久成人| 午夜久久电影网| 免费试看一区| 中文网丁香综合网| 性色av一区二区三区红粉影视| 亚洲欧美成人网| 欧美电影免费网站| 国产精品乱码人人做人人爱| 国产乱码精品一区二区三区五月婷| 国产精品影片在线观看| 黄色成人精品网站| 亚洲天堂av在线免费| 久久九九精品99国产精品| 亚洲韩国青草视频| 欧美一区免费视频| 欧美精品亚洲| 亚洲国产影院| 香港久久久电影| 一本色道久久精品| 免费观看成人网| 99精品国产福利在线观看免费| 亚洲午夜一区二区三区| 欧美风情在线| 影音先锋亚洲电影| 久久精品一区二区三区不卡| 91久久在线观看| 欧美高清不卡在线| 日韩视频三区| 亚洲三级电影全部在线观看高清| 久久黄色小说| 亚洲成色777777女色窝| 久久久精品免费视频| 99精品国产99久久久久久福利| 欧美精品国产精品| 亚洲欧美日韩在线不卡| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美精品123区| 亚洲在线国产日韩欧美| 亚洲小说春色综合另类电影| 欧美日韩免费观看一区=区三区| 亚洲精品你懂的| 一本一本大道香蕉久在线精品| 欧美激情视频一区二区三区不卡| 亚洲国产国产亚洲一二三| 欧美激情精品久久久久久免费印度| 久久精品99无色码中文字幕 | 午夜精品久久久久久久99水蜜桃 | 欧美视频在线观看免费网址| 亚洲一区二区三区影院| 亚洲午夜一二三区视频| 亚洲欧美日韩一区在线| 亚洲国产精品欧美一二99| 久久蜜臀精品av| 欧美激情视频在线播放| 日韩一区二区精品视频| 亚洲激情在线激情| 亚洲精品久久在线| 欧美日韩国产综合久久| 国产区精品视频| 欧美国产一区二区| 国产日韩免费| 中文欧美在线视频| 久久久久久91香蕉国产| 亚洲午夜国产成人av电影男同| 久久精品国产久精国产一老狼| 中文成人激情娱乐网| 欧美顶级大胆免费视频| 久久亚洲精品视频| 国产精品影音先锋| 亚洲视频一区二区在线观看| 欧美日韩一区二区三区在线视频| 日韩午夜黄色| 国产三级欧美三级| 欧美激情国产日韩精品一区18| 国产伦精品一区二区三区高清| 亚洲天堂成人| 久久成人久久爱| 国产日韩精品电影| 久久精品成人| 日韩天堂在线视频| 久久久久久一区二区| 亚洲国产成人av在线| 欧美伦理影院| 狠狠色伊人亚洲综合成人| 亚洲一区二区三区中文字幕| 久久精品国产欧美亚洲人人爽| 激情视频一区二区| 欧美特黄一级大片| 久久久久久高潮国产精品视| 米奇777在线欧美播放| 亚洲伦理自拍| 国产在线精品自拍| 欧美偷拍另类| 久久精品国产精品亚洲精品| 91久久精品一区| 欧美一区二区视频97| 亚洲高清二区| 国产亚洲欧美另类一区二区三区| 久久精品国产综合精品| 亚洲一区二区伦理| 亚洲视频在线一区观看| 亚洲乱码久久| 欧美激情第一页xxx| 欧美在线免费观看视频| 曰本成人黄色| 亚洲成人在线网站| 国产伦精品一区二区三区在线观看 | 欧美女人交a| 久热精品在线| 久久久久久久久岛国免费| 午夜一区在线| 欧美一区二区三区四区视频| 亚洲一区欧美二区| 欧美一区二区高清在线观看| 亚洲综合第一页| 久久精品成人一区二区三区| 性欧美1819sex性高清| 久久精品亚洲精品| 欧美激情视频网站| 国产精品黄色| 欧美一区二区三区的| 欧美一区二区三区免费视频 | 亚洲日本无吗高清不卡| 亚洲国产aⅴ天堂久久| 亚洲人成在线观看一区二区| aaa亚洲精品一二三区| 欧美一区二区三区在线免费观看| 欧美一区二区三区另类| 亚洲电影毛片| 欧美伊人久久| 国产精品高潮粉嫩av| 黑人巨大精品欧美黑白配亚洲 | 国语自产精品视频在线看一大j8| 136国产福利精品导航网址应用 | 亚洲国产精品嫩草影院| 午夜免费在线观看精品视频| 噜噜噜91成人网| 亚洲女爱视频在线| 欧美视频精品在线| 在线一区二区三区四区| 欧美 日韩 国产精品免费观看| 亚洲网站在线看| 欧美午夜宅男影院| 亚洲视频免费在线| 99人久久精品视频最新地址| 欧美成人精品h版在线观看| 国产日产高清欧美一区二区三区| 国产精品99久久久久久宅男 | 亚洲图片欧洲图片av| 亚洲国产成人在线播放| 久久狠狠一本精品综合网| 国产亚洲欧美一区在线观看| 欧美一区二区三区啪啪| 亚洲欧美日韩另类| 国产欧美日韩伦理| 国产精品久久久久久久浪潮网站| 在线中文字幕一区| 午夜精品久久久久久久久久久久久| 亚洲色图制服丝袜| 国产精品乱码一区二三区小蝌蚪| 久久精品123| 欧美激情一区在线观看| 午夜视频一区在线观看| 久久国内精品自在自线400部| 亚洲第一页自拍| 亚洲一区日韩| 亚洲一二三区精品| 久久综合久久综合九色| 亚洲最黄网站| 免费一区二区三区| 欧美一区精品| 国产精品成人国产乱一区| 欧美99在线视频观看| 国产主播一区| 欧美一区二区三区在线看| 一区二区国产精品| 欧美成人精品影院| 久久天天狠狠| 亚洲国产你懂的| 亚洲精选久久| 亚洲国产日韩欧美在线99| 性做久久久久久久久| 欧美二区在线播放| 在线观看不卡| 欧美成人一区二区在线 | 国产亚洲欧洲| 亚洲无玛一区| 久久国产视频网站| 欧美在线视频网站| 欧美14一18处毛片| 亚洲国产欧美精品|