问题:如何编写有关包的元信息或者在android源代码中PackageManagerService
处理安装意图的位置? (说明如下。)
我正在修改Android源代码以在安装过程中保存有关包的元信息。它可以存储在任何位置,但必须由系统读取。我的第一次尝试是使用/sdcard
(Android 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);
我可以在intent中添加一个“额外”但我不知道在PackageManagerService中处理这个意图的位置。
所以,qustion:在android源码的PackageManagerService中处理的安装意图在哪里?
答案 0 :(得分: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来安装该app。
我曾经在Android上使用部分权限授予系统。我所做的是在PMS中为installPackage方法添加一个参数,所以我认为你也可以这样做。 PackageManager是一个aidl服务,因此您还需要修改aidl文件。它位于framework/base/core/java/android/content/pm/