1

我試圖跟蹤應用程序是如何從開始安裝的,到目前爲止我已經能夠跟蹤源代碼,其中調用去了PackageManagerService,它擴展了PackageManager並調用該方法installPackageWithVerification()時,代碼如下所示以供參考,其中:上述瞭解Android應用程序的安裝過程PackageManagerService.installPackage

@Override 
    public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest) { 

     mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null); 

     final int uid = Binder.getCallingUid(); 

     final int filteredFlags; 

     if (uid == Process.SHELL_UID || uid == 0) { 
      if (DEBUG_INSTALL) { 
       Slog.v(TAG, "Install from ADB"); 
      } 
      filteredFlags = flags | PackageManager.INSTALL_FROM_ADB; 
     } else { 
      filteredFlags = flags & ~PackageManager.INSTALL_FROM_ADB; 
     } 

      final Message msg = mHandler.obtainMessage(INIT_COPY); 
      msg.obj = new InstallParams(packageURI, observer, filteredFlags, installerPackageName, 
        verificationURI, manifestDigest); 
      mHandler.sendMessage(msg); 
    } 

代碼的最後3行創建一個消息處理程序對象和基本上封裝了包安裝PARAMS消息中併發送。我並不清楚消息的傳遞位置。

我去和調試基本上限定的sendMessage(該android.os.Handler),所有我能找到是該消息被添加到隊列本身使用android.os.MessageQueue

實例

莫非有人親切地告訴我包裹旁邊會發生什麼?甚至是在NativeMessageQueue中入隊的消息。

在此先感謝!

+0

在AOSP代碼中搜索'InstallParams',您會發現該位置。或者找出'mHandler'的來源以及'handleMessage'的實現位置。 – 323go

+0

我明白了。 mHandler是服務本身定義的PackageHandler類(它擴展了android.os.Handler類)。正如我提到的android.os.Handler中的sendMessage方法將消息添加到MessageQueue。這就是我卡住的地方,無法弄清楚接下來會發生什麼! –

+1

這就是你必須弄清'mHandler'來自何處的地方 - 這個'Handler'將處理你發送的消息。 – 323go

回答

0

我明白了。我的糟糕的是PackageHandler在同一個文件中的頂部。使用3K行代碼瀏覽文件時很難找到:-P

相關問題