2

質問:パッケージに関するメタ情報を書き込む方法、またはインストール インテントPackageManagerServiceは Android ソースのどこで処理されますか? (以下に説明します。)

インストール中にパッケージに関するいくつかのメタ情報を保存するために Android ソースを変更しています。任意の場所に保存できますが、システムで読み取り可能である必要があります。私の最初の試みは/sdcardAndroid source error reading file from sdcard)を使用することでしたが、許可のために機能していないようです。

PackageManagerServiceここで、メタ情報をに送信して、インストール前に書き込むことができるようにしたいと考えています。それ自体を書き込む場合は、後で読み取ることができるはずです。

PackageInstallerActivityで、インストールの意図が発生するポイントを特定しました。

if(v == mOk) {
            // Start subactivity to actually install the application
            Intent newIntent = new Intent();
            newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO,
                    mPkgInfo.applicationInfo);
            newIntent.setData(mPackageURI);
            newIntent.setClass(this, InstallAppProgress.class);
            String installerPackageName = getIntent().getStringExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME);
            if (installerPackageName != null) {
                newIntent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, installerPackageName);
            }
            if(localLOGV) Log.i(TAG, "downloaded app uri="+mPackageURI);

インテントに「追加」を入れることはできますが、このインテントが PackageManagerService のどこで処理されるかわかりません。

だから、質問: Android ソースの PackageManagerService で処理されるインストール インテントはどこですか?

4

1 に答える 1

2

ご覧のとおり、インテントはコンポーネントを持つ明示的なインテントです: InstallAppProgress.class.

したがって、そのインテントは InstallAppProgress によって最初に処理されます。これは PackageInstaller のコンポーネントでもあります。インストールの進行状況を表示します (InstallAppProgress.java の initView())。そして、initView() メソッドで、PackageManagerService を呼び出します。

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    Intent intent = getIntent();
    mAppInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
    mPackageURI = intent.getData();
    initView();
}

public void initView() {
    ...
    String installerPackageName = getIntent().getStringExtra(
            Intent.EXTRA_INSTALLER_PACKAGE_NAME);
    PackageInstallObserver observer = new PackageInstallObserver();
    pm.installPackage(mPackageURI, observer, installFlags, installerPackageName);
}

そのため、インテントは PackageManagerService では処理されず、InstallAppProgress によって処理されます。その後、単に PackageManagerService を呼び出してそのアプリをインストールします。

私は以前、Android で部分的なアクセス許可を付与するシステムに取り組んでいました。私がやったのは、PMS の installPackage メソッドに引数を追加したことなので、そのようにすることもできると思います。PackageManager は aidl サービスであるため、aidl ファイルも変更する必要があります。下ですframework/base/core/java/android/content/pm/

于 2013-03-15T07:35:39.843 に答える