public static VPackage readPackageCache(String packageName) { Parcel p = Parcel.obtain(); try { File cacheFile = VEnvironment.getPackageCacheFile(packageName); FileInputStream is = new FileInputStream(cacheFile); byte[] bytes = FileUtils.toByteArray(is); is.close(); p.unmarshall(bytes, 0, bytes.length); p.setDataPosition(0); if (p.readInt() != 4) { throw new IllegalStateException("Invalid version."); } VPackage pkg = new VPackage(p); addOwner(pkg); return pkg; } catch (Exception e) { e.printStackTrace(); } finally { p.recycle(); } return null; }
public static VPackage parsePackage(File packageFile) throws Throwable { PackageParser parser = PackageParserCompat.createParser(packageFile); PackageParser.Package p = PackageParserCompat.parsePackage(parser, packageFile, 0); if (p.requestedPermissions.contains("android.permission.FAKE_PACKAGE_SIGNATURE") && p.mAppMetaData != null && p.mAppMetaData.containsKey("fake-signature")) { String sig = p.mAppMetaData.getString("fake-signature"); p.mSignatures = new Signature[]{new Signature(sig)}; VLog.d(TAG, "Using fake-signature feature on : " + p.packageName); } else { try { PackageParserCompat.collectCertificates(parser, p, PackageParser.PARSE_IS_SYSTEM); } catch (Throwable e) { VLog.e(TAG, "collectCertificates failed", e); if (VirtualCore.get().getContext().getFileStreamPath(Constants.FAKE_SIGNATURE_FLAG).exists()) { VLog.w(TAG, "Using fake signature: " + p.packageName); p.mSignatures = new Signature[]{new Signature(FAKE_SIG)}; } else { throw e; } } } return buildPackageCache(p); }
public static PackageInfo generatePackageInfo(VPackage p, int flags, long firstInstallTime, long lastUpdateTime, PackageUserState state, int userId) { if (!checkUseInstalledOrHidden(state, flags)) { return null; readSignature(p); pi.sharedUserId = p.mSharedUserId; pi.sharedUserLabel = p.mSharedUserLabel; pi.applicationInfo = generateApplicationInfo(p, flags, state, userId); pi.firstInstallTime = firstInstallTime; pi.lastUpdateTime = lastUpdateTime; for (int i = 0; i < N; i++) { final VPackage.ActivityComponent a = p.activities.get(i); res[num++] = generateActivityInfo(a, flags, state, userId); for (int i = 0; i < N; i++) { final VPackage.ActivityComponent a = p.receivers.get(i); res[num++] = generateActivityInfo(a, flags, state, userId); for (int i = 0; i < N; i++) { final VPackage.ServiceComponent s = p.services.get(i); res[num++] = generateServiceInfo(s, flags, state, userId); for (int i = 0; i < N; i++) { final VPackage.ProviderComponent pr = p.providers.get(i); res[num++] = generateProviderInfo(pr, flags, state, userId); pi.instrumentation = new InstrumentationInfo[N]; for (int i = 0; i < N; i++) {
public static ApplicationInfo generateApplicationInfo(VPackage p, int flags, PackageUserState state, int userId) { if (p == null) return null; if (!checkUseInstalledOrHidden(state, flags)) { return null; } // Make shallow copy so we can store the metadata/libraries safely ApplicationInfo ai = new ApplicationInfo(p.applicationInfo); if ((flags & PackageManager.GET_META_DATA) != 0) { ai.metaData = p.mAppMetaData; } initApplicationAsUser(ai, userId); return ai; }
public static ServiceInfo generateServiceInfo(VPackage.ServiceComponent s, int flags, PackageUserState state, int userId) { if (s == null) return null; if (!checkUseInstalledOrHidden(state, flags)) { return null; } ServiceInfo si = new ServiceInfo(s.info); // Make shallow copies so we can store the metadata safely if ((flags & PackageManager.GET_META_DATA) != 0 && s.metaData != null) { si.metaData = s.metaData; } si.applicationInfo = generateApplicationInfo(s.owner, flags, state, userId); return si; }
@Override public ProviderInfo resolveContentProvider(String name, int flags, int userId) { checkUserId(userId); flags = updateFlagsNought(flags); synchronized (mPackages) { final VPackage.ProviderComponent provider = mProvidersByAuthority.get(name); if (provider != null) { PackageSetting ps = (PackageSetting) provider.owner.mExtras; ProviderInfo providerInfo = PackageParserEx.generateProviderInfo(provider, flags, ps.readUserState(userId), userId); if (providerInfo != null) { VPackage p = mPackages.get(providerInfo.packageName); PackageSetting settings = (PackageSetting) p.mExtras; ComponentFixer.fixComponentInfo(settings, providerInfo, userId); return providerInfo; } } } return null; }
@Override public ActivityInfo getReceiverInfo(ComponentName component, int flags, int userId) { checkUserId(userId); flags = updateFlagsNought(flags); synchronized (mPackages) { VPackage p = mPackages.get(component.getPackageName()); if (p != null) { PackageSetting ps = (PackageSetting) p.mExtras; VPackage.ActivityComponent a = mReceivers.mActivities.get(component); if (a != null) { ActivityInfo receiverInfo = PackageParserEx.generateActivityInfo(a, flags, ps.readUserState(userId), userId); ComponentFixer.fixComponentInfo(ps, receiverInfo, userId); return receiverInfo; } } } return null; }
@Override public ServiceInfo getServiceInfo(ComponentName component, int flags, int userId) { checkUserId(userId); flags = updateFlagsNought(flags); synchronized (mPackages) { VPackage p = mPackages.get(component.getPackageName()); if (p != null) { PackageSetting ps = (PackageSetting) p.mExtras; VPackage.ServiceComponent s = mServices.mServices.get(component); if (s != null) { ServiceInfo serviceInfo = PackageParserEx.generateServiceInfo(s, flags, ps.readUserState(userId), userId); ComponentFixer.fixComponentInfo(ps, serviceInfo, userId); return serviceInfo; } } } return null; }
@Override public VParceledListSlice<ApplicationInfo> getInstalledApplications(int flags, int userId) { checkUserId(userId); flags = updateFlagsNought(flags); ArrayList<ApplicationInfo> list = new ArrayList<>(mPackages.size()); synchronized (mPackages) { for (VPackage p : mPackages.values()) { PackageSetting ps = (PackageSetting) p.mExtras; ApplicationInfo info = PackageParserEx.generateApplicationInfo(p, flags, ps.readUserState(userId), userId); list.add(info); } } return new VParceledListSlice<>(list); }
private PackageInfo generatePackageInfo(VPackage p, PackageSetting ps, int flags, int userId) { flags = updateFlagsNought(flags); PackageInfo packageInfo = PackageParserEx.generatePackageInfo(p, flags, ps.firstInstallTime, ps.lastUpdateTime, ps.readUserState(userId), userId); if (packageInfo != null) { return packageInfo; } return null; }
public static ActivityInfo generateActivityInfo(VPackage.ActivityComponent a, int flags, PackageUserState state, int userId) { if (a == null) return null; if (!checkUseInstalledOrHidden(state, flags)) { return null; } // Make shallow copies so we can store the metadata safely ActivityInfo ai = new ActivityInfo(a.info); if ((flags & PackageManager.GET_META_DATA) != 0 && (a.metaData != null)) { ai.metaData = a.metaData; } ai.applicationInfo = generateApplicationInfo(a.owner, flags, state, userId); return ai; }
public static ApplicationInfo generateApplicationInfo(VPackage p, int flags, PackageUserState state, int userId) { if (p == null) return null; if (!checkUseInstalledOrHidden(state, flags)) { return null; } // Make shallow copy so we can store the metadata/libraries safely ApplicationInfo ai = new ApplicationInfo(p.applicationInfo); if ((flags & PackageManager.GET_META_DATA) != 0) { ai.metaData = p.mAppMetaData; } initApplicationAsUser(ai, userId); return ai; }
@Override public VParceledListSlice<ProviderInfo> queryContentProviders(String processName, int vuid, int flags) { int userId = VUserHandle.getUserId(vuid); checkUserId(userId); flags = updateFlagsNought(flags); ArrayList<ProviderInfo> finalList = new ArrayList<>(3); // reader synchronized (mPackages) { for (VPackage.ProviderComponent p : mProvidersByComponent.values()) { PackageSetting ps = (PackageSetting) p.owner.mExtras; if (processName == null || ps.appId == VUserHandle.getAppId(vuid) && p.info.processName.equals(processName)) { ProviderInfo providerInfo = PackageParserEx.generateProviderInfo(p, flags, ps.readUserState(userId), userId); finalList.add(providerInfo); } } } if (!finalList.isEmpty()) { Collections.sort(finalList, sProviderInitOrderSorter); } return new VParceledListSlice<>(finalList); }
@Override public ActivityInfo getActivityInfo(ComponentName component, int flags, int userId) { checkUserId(userId); flags = updateFlagsNought(flags); synchronized (mPackages) { VPackage p = mPackages.get(component.getPackageName()); if (p != null) { PackageSetting ps = (PackageSetting) p.mExtras; VPackage.ActivityComponent a = mActivities.mActivities.get(component); if (a != null) { ActivityInfo activityInfo = PackageParserEx.generateActivityInfo(a, flags, ps.readUserState(userId), userId); ComponentFixer.fixComponentInfo(ps, activityInfo, userId); return activityInfo; } } } return null; }
@Override protected ResolveInfo newResult(VPackage.ServiceIntentInfo filter, int match, int userId) { final VPackage.ServiceComponent service = filter.service; PackageSetting ps = (PackageSetting) service.owner.mExtras; ServiceInfo si = PackageParserEx.generateServiceInfo(service, mFlags, ps.readUserState(userId), userId); if (si == null) { return null; } final ResolveInfo res = new ResolveInfo(); res.serviceInfo = si; if ((mFlags & PackageManager.GET_RESOLVED_FILTER) != 0) { res.filter = filter.filter; } res.priority = filter.filter.getPriority(); res.preferredOrder = service.owner.mPreferredOrder; res.match = match; res.isDefault = filter.hasDefault; res.labelRes = filter.labelRes; res.nonLocalizedLabel = filter.nonLocalizedLabel; res.icon = filter.icon; return res; }
@Override public ApplicationInfo getApplicationInfo(String packageName, int flags, int userId) { checkUserId(userId); flags = updateFlagsNought(flags); synchronized (mPackages) { VPackage p = mPackages.get(packageName); if (p != null) { PackageSetting ps = (PackageSetting) p.mExtras; return PackageParserEx.generateApplicationInfo(p, flags, ps.readUserState(userId), userId); } } return null; }
private PackageInfo generatePackageInfo(VPackage p, PackageSetting ps, int flags, int userId) { flags = updateFlagsNought(flags); PackageInfo packageInfo = PackageParserEx.generatePackageInfo(p, flags, ps.firstInstallTime, ps.lastUpdateTime, ps.readUserState(userId), userId); if (packageInfo != null) { return packageInfo; } return null; }
public static PackageInfo generatePackageInfo(VPackage p, int flags, long firstInstallTime, long lastUpdateTime, PackageUserState state, int userId) { if (!checkUseInstalledOrHidden(state, flags)) { return null; readSignature(p); pi.sharedUserId = p.mSharedUserId; pi.sharedUserLabel = p.mSharedUserLabel; pi.applicationInfo = generateApplicationInfo(p, flags, state, userId); pi.firstInstallTime = firstInstallTime; pi.lastUpdateTime = lastUpdateTime; for (int i = 0; i < N; i++) { final VPackage.ActivityComponent a = p.activities.get(i); res[num++] = generateActivityInfo(a, flags, state, userId); for (int i = 0; i < N; i++) { final VPackage.ActivityComponent a = p.receivers.get(i); res[num++] = generateActivityInfo(a, flags, state, userId); for (int i = 0; i < N; i++) { final VPackage.ServiceComponent s = p.services.get(i); res[num++] = generateServiceInfo(s, flags, state, userId); for (int i = 0; i < N; i++) { final VPackage.ProviderComponent pr = p.providers.get(i); res[num++] = generateProviderInfo(pr, flags, state, userId); pi.instrumentation = new InstrumentationInfo[N]; for (int i = 0; i < N; i++) {
public static ProviderInfo generateProviderInfo(VPackage.ProviderComponent p, int flags, PackageUserState state, int userId) { if (p == null) return null; if (!checkUseInstalledOrHidden(state, flags)) { return null; } // Make shallow copies so we can store the metadata safely ProviderInfo pi = new ProviderInfo(p.info); if ((flags & PackageManager.GET_META_DATA) != 0 && (p.metaData != null)) { pi.metaData = p.metaData; } if ((flags & PackageManager.GET_URI_PERMISSION_PATTERNS) == 0) { pi.uriPermissionPatterns = null; } pi.applicationInfo = generateApplicationInfo(p.owner, flags, state, userId); return pi; }
public static ApplicationInfo generateApplicationInfo(VPackage p, int flags, PackageUserState state, int userId) { if (p == null) return null; if (!checkUseInstalledOrHidden(state, flags)) { return null; } // Make shallow copy so we can store the metadata/libraries safely ApplicationInfo ai = new ApplicationInfo(p.applicationInfo); if ((flags & PackageManager.GET_META_DATA) != 0) { ai.metaData = p.mAppMetaData; } initApplicationAsUser(ai, userId); return ai; }