了解Android应用程序安装过程PackageManagerService.installPackage

时间:2014-02-24 21:55:36

标签: android message-queue sendmessage native-code android-package-managers

我正在尝试跟踪应用程序从一开始就是如何安装的,到目前为止,我已经能够跟踪调用PackageManagerService的源代码,它扩展了PackageManager并调用方法installPackageWithVerification(),代码其中显示的内容仅供参考:

@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行代码创建了一个消息处理程序对象,基本上将包安装参数封装在消息中并发送它。我不清楚邮件的发送地点。

我去调试了android.os.Handler,它基本上定义了sendMessage(),所有我能找到的是这个消息是使用android.os.MessageQueue实例本地添加到队列中的

有人可以帮助我了解包装旁边会发生什么吗?甚至是NativeMessageQueue中的消息。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我已经明白了。我的错误,PackageHandler被定义在同一个文件的顶部。当您使用3K代码行浏览文件时很难找到:-P