1 /*
2 **
3 ** Copyright 2007, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 **     http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 package android.content.pm;
19 
20 import android.content.ComponentName;
21 import android.content.Intent;
22 import android.content.IntentFilter;
23 import android.content.pm.ActivityInfo;
24 import android.content.pm.ApplicationInfo;
25 import android.content.pm.ChangedPackages;
26 import android.content.pm.InstantAppInfo;
27 import android.content.pm.FeatureInfo;
28 import android.content.pm.IDexModuleRegisterCallback;
29 import android.content.pm.IPackageInstaller;
30 import android.content.pm.IPackageDeleteObserver;
31 import android.content.pm.IPackageDeleteObserver2;
32 import android.content.pm.IPackageDataObserver;
33 import android.content.pm.IPackageMoveObserver;
34 import android.content.pm.IPackageStatsObserver;
35 import android.content.pm.IOnPermissionsChangeListener;
36 import android.content.pm.IntentFilterVerificationInfo;
37 import android.content.pm.InstrumentationInfo;
38 import android.content.pm.KeySet;
39 import android.content.pm.PackageInfo;
40 import android.content.pm.PackageCleanItem;
41 import android.content.pm.ParceledListSlice;
42 import android.content.pm.ProviderInfo;
43 import android.content.pm.PermissionGroupInfo;
44 import android.content.pm.PermissionInfo;
45 import android.content.pm.ResolveInfo;
46 import android.content.pm.ServiceInfo;
47 import android.content.pm.UserInfo;
48 import android.content.pm.VerifierDeviceIdentity;
49 import android.content.pm.VersionedPackage;
50 import android.content.pm.dex.IArtManager;
51 import android.graphics.Bitmap;
52 import android.net.Uri;
53 import android.os.ParcelFileDescriptor;
54 import android.os.PersistableBundle;
55 import android.content.IntentSender;
56 
57 /**
58  *  See {@link PackageManager} for documentation on most of the APIs
59  *  here.
60  *
61  *  {@hide}
62  */
63 interface IPackageManager {
checkPackageStartable(String packageName, int userId)64     void checkPackageStartable(String packageName, int userId);
isPackageAvailable(String packageName, int userId)65     boolean isPackageAvailable(String packageName, int userId);
getPackageInfo(String packageName, int flags, int userId)66     PackageInfo getPackageInfo(String packageName, int flags, int userId);
getPackageInfoVersioned(in VersionedPackage versionedPackage, int flags, int userId)67     PackageInfo getPackageInfoVersioned(in VersionedPackage versionedPackage,
68             int flags, int userId);
getPackageUid(String packageName, int flags, int userId)69     int getPackageUid(String packageName, int flags, int userId);
getPackageGids(String packageName, int flags, int userId)70     int[] getPackageGids(String packageName, int flags, int userId);
71 
currentToCanonicalPackageNames(in String[] names)72     String[] currentToCanonicalPackageNames(in String[] names);
canonicalToCurrentPackageNames(in String[] names)73     String[] canonicalToCurrentPackageNames(in String[] names);
74 
getPermissionInfo(String name, String packageName, int flags)75     PermissionInfo getPermissionInfo(String name, String packageName, int flags);
76 
queryPermissionsByGroup(String group, int flags)77     ParceledListSlice queryPermissionsByGroup(String group, int flags);
78 
getPermissionGroupInfo(String name, int flags)79     PermissionGroupInfo getPermissionGroupInfo(String name, int flags);
80 
getAllPermissionGroups(int flags)81     ParceledListSlice getAllPermissionGroups(int flags);
82 
getApplicationInfo(String packageName, int flags ,int userId)83     ApplicationInfo getApplicationInfo(String packageName, int flags ,int userId);
84 
getActivityInfo(in ComponentName className, int flags, int userId)85     ActivityInfo getActivityInfo(in ComponentName className, int flags, int userId);
86 
activitySupportsIntent(in ComponentName className, in Intent intent, String resolvedType)87     boolean activitySupportsIntent(in ComponentName className, in Intent intent,
88             String resolvedType);
89 
getReceiverInfo(in ComponentName className, int flags, int userId)90     ActivityInfo getReceiverInfo(in ComponentName className, int flags, int userId);
91 
getServiceInfo(in ComponentName className, int flags, int userId)92     ServiceInfo getServiceInfo(in ComponentName className, int flags, int userId);
93 
getProviderInfo(in ComponentName className, int flags, int userId)94     ProviderInfo getProviderInfo(in ComponentName className, int flags, int userId);
95 
checkPermission(String permName, String pkgName, int userId)96     int checkPermission(String permName, String pkgName, int userId);
97 
checkUidPermission(String permName, int uid)98     int checkUidPermission(String permName, int uid);
99 
addPermission(in PermissionInfo info)100     boolean addPermission(in PermissionInfo info);
101 
removePermission(String name)102     void removePermission(String name);
103 
grantRuntimePermission(String packageName, String permissionName, int userId)104     void grantRuntimePermission(String packageName, String permissionName, int userId);
105 
revokeRuntimePermission(String packageName, String permissionName, int userId)106     void revokeRuntimePermission(String packageName, String permissionName, int userId);
107 
resetRuntimePermissions()108     void resetRuntimePermissions();
109 
getPermissionFlags(String permissionName, String packageName, int userId)110     int getPermissionFlags(String permissionName, String packageName, int userId);
111 
updatePermissionFlags(String permissionName, String packageName, int flagMask, int flagValues, int userId)112     void updatePermissionFlags(String permissionName, String packageName, int flagMask,
113             int flagValues, int userId);
114 
updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId)115     void updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId);
116 
shouldShowRequestPermissionRationale(String permissionName, String packageName, int userId)117     boolean shouldShowRequestPermissionRationale(String permissionName,
118             String packageName, int userId);
119 
isProtectedBroadcast(String actionName)120     boolean isProtectedBroadcast(String actionName);
121 
checkSignatures(String pkg1, String pkg2)122     int checkSignatures(String pkg1, String pkg2);
123 
checkUidSignatures(int uid1, int uid2)124     int checkUidSignatures(int uid1, int uid2);
125 
getAllPackages()126     List<String> getAllPackages();
127 
getPackagesForUid(int uid)128     String[] getPackagesForUid(int uid);
129 
getNameForUid(int uid)130     String getNameForUid(int uid);
getNamesForUids(in int[] uids)131     String[] getNamesForUids(in int[] uids);
132 
getUidForSharedUser(String sharedUserName)133     int getUidForSharedUser(String sharedUserName);
134 
getFlagsForUid(int uid)135     int getFlagsForUid(int uid);
136 
getPrivateFlagsForUid(int uid)137     int getPrivateFlagsForUid(int uid);
138 
isUidPrivileged(int uid)139     boolean isUidPrivileged(int uid);
140 
getAppOpPermissionPackages(String permissionName)141     String[] getAppOpPermissionPackages(String permissionName);
142 
resolveIntent(in Intent intent, String resolvedType, int flags, int userId)143     ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId);
144 
findPersistentPreferredActivity(in Intent intent, int userId)145     ResolveInfo findPersistentPreferredActivity(in Intent intent, int userId);
146 
canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId)147     boolean canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId);
148 
queryIntentActivities(in Intent intent, String resolvedType, int flags, int userId)149     ParceledListSlice queryIntentActivities(in Intent intent,
150             String resolvedType, int flags, int userId);
151 
queryIntentActivityOptions( in ComponentName caller, in Intent[] specifics, in String[] specificTypes, in Intent intent, String resolvedType, int flags, int userId)152     ParceledListSlice queryIntentActivityOptions(
153             in ComponentName caller, in Intent[] specifics,
154             in String[] specificTypes, in Intent intent,
155             String resolvedType, int flags, int userId);
156 
queryIntentReceivers(in Intent intent, String resolvedType, int flags, int userId)157     ParceledListSlice queryIntentReceivers(in Intent intent,
158             String resolvedType, int flags, int userId);
159 
resolveService(in Intent intent, String resolvedType, int flags, int userId)160     ResolveInfo resolveService(in Intent intent,
161             String resolvedType, int flags, int userId);
162 
queryIntentServices(in Intent intent, String resolvedType, int flags, int userId)163     ParceledListSlice queryIntentServices(in Intent intent,
164             String resolvedType, int flags, int userId);
165 
queryIntentContentProviders(in Intent intent, String resolvedType, int flags, int userId)166     ParceledListSlice queryIntentContentProviders(in Intent intent,
167             String resolvedType, int flags, int userId);
168 
169     /**
170      * This implements getInstalledPackages via a "last returned row"
171      * mechanism that is not exposed in the API. This is to get around the IPC
172      * limit that kicks in when flags are included that bloat up the data
173      * returned.
174      */
getInstalledPackages(int flags, in int userId)175     ParceledListSlice getInstalledPackages(int flags, in int userId);
176 
177     /**
178      * This implements getPackagesHoldingPermissions via a "last returned row"
179      * mechanism that is not exposed in the API. This is to get around the IPC
180      * limit that kicks in when flags are included that bloat up the data
181      * returned.
182      */
getPackagesHoldingPermissions(in String[] permissions, int flags, int userId)183     ParceledListSlice getPackagesHoldingPermissions(in String[] permissions,
184             int flags, int userId);
185 
186     /**
187      * This implements getInstalledApplications via a "last returned row"
188      * mechanism that is not exposed in the API. This is to get around the IPC
189      * limit that kicks in when flags are included that bloat up the data
190      * returned.
191      */
getInstalledApplications(int flags, int userId)192     ParceledListSlice getInstalledApplications(int flags, int userId);
193 
194     /**
195      * Retrieve all applications that are marked as persistent.
196      *
197      * @return A List&lt;applicationInfo> containing one entry for each persistent
198      *         application.
199      */
getPersistentApplications(int flags)200     ParceledListSlice getPersistentApplications(int flags);
201 
resolveContentProvider(String name, int flags, int userId)202     ProviderInfo resolveContentProvider(String name, int flags, int userId);
203 
204     /**
205      * Retrieve sync information for all content providers.
206      *
207      * @param outNames Filled in with a list of the root names of the content
208      *                 providers that can sync.
209      * @param outInfo Filled in with a list of the ProviderInfo for each
210      *                name in 'outNames'.
211      */
querySyncProviders(inout List<String> outNames, inout List<ProviderInfo> outInfo)212     void querySyncProviders(inout List<String> outNames,
213             inout List<ProviderInfo> outInfo);
214 
queryContentProviders( String processName, int uid, int flags, String metaDataKey)215     ParceledListSlice queryContentProviders(
216             String processName, int uid, int flags, String metaDataKey);
217 
getInstrumentationInfo( in ComponentName className, int flags)218     InstrumentationInfo getInstrumentationInfo(
219             in ComponentName className, int flags);
220 
queryInstrumentation( String targetPackage, int flags)221     ParceledListSlice queryInstrumentation(
222             String targetPackage, int flags);
223 
finishPackageInstall(int token, boolean didLaunch)224     void finishPackageInstall(int token, boolean didLaunch);
225 
setInstallerPackageName(in String targetPackage, in String installerPackageName)226     void setInstallerPackageName(in String targetPackage, in String installerPackageName);
227 
setApplicationCategoryHint(String packageName, int categoryHint, String callerPackageName)228     void setApplicationCategoryHint(String packageName, int categoryHint, String callerPackageName);
229 
230     /** @deprecated rawr, don't call AIDL methods directly! */
deletePackageAsUser(in String packageName, int versionCode, IPackageDeleteObserver observer, int userId, int flags)231     void deletePackageAsUser(in String packageName, int versionCode,
232             IPackageDeleteObserver observer, int userId, int flags);
233 
234     /**
235      * Delete a package for a specific user.
236      *
237      * @param versionedPackage The package to delete.
238      * @param observer a callback to use to notify when the package deletion in finished.
239      * @param userId the id of the user for whom to delete the package
240      * @param flags - possible values: {@link #DONT_DELETE_DATA}
241      */
deletePackageVersioned(in VersionedPackage versionedPackage, IPackageDeleteObserver2 observer, int userId, int flags)242     void deletePackageVersioned(in VersionedPackage versionedPackage,
243             IPackageDeleteObserver2 observer, int userId, int flags);
244 
getInstallerPackageName(in String packageName)245     String getInstallerPackageName(in String packageName);
246 
resetApplicationPreferences(int userId)247     void resetApplicationPreferences(int userId);
248 
getLastChosenActivity(in Intent intent, String resolvedType, int flags)249     ResolveInfo getLastChosenActivity(in Intent intent,
250             String resolvedType, int flags);
251 
setLastChosenActivity(in Intent intent, String resolvedType, int flags, in IntentFilter filter, int match, in ComponentName activity)252     void setLastChosenActivity(in Intent intent, String resolvedType, int flags,
253             in IntentFilter filter, int match, in ComponentName activity);
254 
addPreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity, int userId)255     void addPreferredActivity(in IntentFilter filter, int match,
256             in ComponentName[] set, in ComponentName activity, int userId);
257 
replacePreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity, int userId)258     void replacePreferredActivity(in IntentFilter filter, int match,
259             in ComponentName[] set, in ComponentName activity, int userId);
260 
clearPackagePreferredActivities(String packageName)261     void clearPackagePreferredActivities(String packageName);
262 
getPreferredActivities(out List<IntentFilter> outFilters, out List<ComponentName> outActivities, String packageName)263     int getPreferredActivities(out List<IntentFilter> outFilters,
264             out List<ComponentName> outActivities, String packageName);
265 
addPersistentPreferredActivity(in IntentFilter filter, in ComponentName activity, int userId)266     void addPersistentPreferredActivity(in IntentFilter filter, in ComponentName activity, int userId);
267 
clearPackagePersistentPreferredActivities(String packageName, int userId)268     void clearPackagePersistentPreferredActivities(String packageName, int userId);
269 
addCrossProfileIntentFilter(in IntentFilter intentFilter, String ownerPackage, int sourceUserId, int targetUserId, int flags)270     void addCrossProfileIntentFilter(in IntentFilter intentFilter, String ownerPackage,
271             int sourceUserId, int targetUserId, int flags);
272 
clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage)273     void clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage);
274 
setPackagesSuspendedAsUser(in String[] packageNames, boolean suspended, in PersistableBundle appExtras, in PersistableBundle launcherExtras, String dialogMessage, String callingPackage, int userId)275     String[] setPackagesSuspendedAsUser(in String[] packageNames, boolean suspended,
276             in PersistableBundle appExtras, in PersistableBundle launcherExtras,
277             String dialogMessage, String callingPackage, int userId);
278 
isPackageSuspendedForUser(String packageName, int userId)279     boolean isPackageSuspendedForUser(String packageName, int userId);
280 
getSuspendedPackageAppExtras(String packageName, int userId)281     PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId);
282 
283     /**
284      * Backup/restore support - only the system uid may use these.
285      */
getPreferredActivityBackup(int userId)286     byte[] getPreferredActivityBackup(int userId);
restorePreferredActivities(in byte[] backup, int userId)287     void restorePreferredActivities(in byte[] backup, int userId);
getDefaultAppsBackup(int userId)288     byte[] getDefaultAppsBackup(int userId);
restoreDefaultApps(in byte[] backup, int userId)289     void restoreDefaultApps(in byte[] backup, int userId);
getIntentFilterVerificationBackup(int userId)290     byte[] getIntentFilterVerificationBackup(int userId);
restoreIntentFilterVerification(in byte[] backup, int userId)291     void restoreIntentFilterVerification(in byte[] backup, int userId);
getPermissionGrantBackup(int userId)292     byte[] getPermissionGrantBackup(int userId);
restorePermissionGrants(in byte[] backup, int userId)293     void restorePermissionGrants(in byte[] backup, int userId);
294 
295     /**
296      * Report the set of 'Home' activity candidates, plus (if any) which of them
297      * is the current "always use this one" setting.
298      */
getHomeActivities(out List<ResolveInfo> outHomeCandidates)299      ComponentName getHomeActivities(out List<ResolveInfo> outHomeCandidates);
300 
setHomeActivity(in ComponentName className, int userId)301     void setHomeActivity(in ComponentName className, int userId);
302 
303     /**
304      * As per {@link android.content.pm.PackageManager#setComponentEnabledSetting}.
305      */
setComponentEnabledSetting(in ComponentName componentName, in int newState, in int flags, int userId)306     void setComponentEnabledSetting(in ComponentName componentName,
307             in int newState, in int flags, int userId);
308 
309     /**
310      * As per {@link android.content.pm.PackageManager#getComponentEnabledSetting}.
311      */
getComponentEnabledSetting(in ComponentName componentName, int userId)312     int getComponentEnabledSetting(in ComponentName componentName, int userId);
313 
314     /**
315      * As per {@link android.content.pm.PackageManager#setApplicationEnabledSetting}.
316      */
setApplicationEnabledSetting(in String packageName, in int newState, int flags, int userId, String callingPackage)317     void setApplicationEnabledSetting(in String packageName, in int newState, int flags,
318             int userId, String callingPackage);
319 
320     /**
321      * As per {@link android.content.pm.PackageManager#getApplicationEnabledSetting}.
322      */
getApplicationEnabledSetting(in String packageName, int userId)323     int getApplicationEnabledSetting(in String packageName, int userId);
324 
325     /**
326      * Logs process start information (including APK hash) to the security log.
327      */
logAppProcessStartIfNeeded(String processName, int uid, String seinfo, String apkFile, int pid)328     void logAppProcessStartIfNeeded(String processName, int uid, String seinfo, String apkFile,
329             int pid);
330 
331     /**
332      * As per {@link android.content.pm.PackageManager#flushPackageRestrictionsAsUser}.
333      */
flushPackageRestrictionsAsUser(in int userId)334     void flushPackageRestrictionsAsUser(in int userId);
335 
336     /**
337      * Set whether the given package should be considered stopped, making
338      * it not visible to implicit intents that filter out stopped packages.
339      */
setPackageStoppedState(String packageName, boolean stopped, int userId)340     void setPackageStoppedState(String packageName, boolean stopped, int userId);
341 
342     /**
343      * Free storage by deleting LRU sorted list of cache files across
344      * all applications. If the currently available free storage
345      * on the device is greater than or equal to the requested
346      * free storage, no cache files are cleared. If the currently
347      * available storage on the device is less than the requested
348      * free storage, some or all of the cache files across
349      * all applications are deleted (based on last accessed time)
350      * to increase the free storage space on the device to
351      * the requested value. There is no guarantee that clearing all
352      * the cache files from all applications will clear up
353      * enough storage to achieve the desired value.
354      * @param freeStorageSize The number of bytes of storage to be
355      * freed by the system. Say if freeStorageSize is XX,
356      * and the current free storage is YY,
357      * if XX is less than YY, just return. if not free XX-YY number
358      * of bytes if possible.
359      * @param observer call back used to notify when
360      * the operation is completed
361      */
freeStorageAndNotify(in String volumeUuid, in long freeStorageSize, int storageFlags, IPackageDataObserver observer)362      void freeStorageAndNotify(in String volumeUuid, in long freeStorageSize,
363              int storageFlags, IPackageDataObserver observer);
364 
365     /**
366      * Free storage by deleting LRU sorted list of cache files across
367      * all applications. If the currently available free storage
368      * on the device is greater than or equal to the requested
369      * free storage, no cache files are cleared. If the currently
370      * available storage on the device is less than the requested
371      * free storage, some or all of the cache files across
372      * all applications are deleted (based on last accessed time)
373      * to increase the free storage space on the device to
374      * the requested value. There is no guarantee that clearing all
375      * the cache files from all applications will clear up
376      * enough storage to achieve the desired value.
377      * @param freeStorageSize The number of bytes of storage to be
378      * freed by the system. Say if freeStorageSize is XX,
379      * and the current free storage is YY,
380      * if XX is less than YY, just return. if not free XX-YY number
381      * of bytes if possible.
382      * @param pi IntentSender call back used to
383      * notify when the operation is completed.May be null
384      * to indicate that no call back is desired.
385      */
freeStorage(in String volumeUuid, in long freeStorageSize, int storageFlags, in IntentSender pi)386      void freeStorage(in String volumeUuid, in long freeStorageSize,
387              int storageFlags, in IntentSender pi);
388 
389     /**
390      * Delete all the cache files in an applications cache directory
391      * @param packageName The package name of the application whose cache
392      * files need to be deleted
393      * @param observer a callback used to notify when the deletion is finished.
394      */
deleteApplicationCacheFiles(in String packageName, IPackageDataObserver observer)395     void deleteApplicationCacheFiles(in String packageName, IPackageDataObserver observer);
396 
397     /**
398      * Delete all the cache files in an applications cache directory
399      * @param packageName The package name of the application whose cache
400      * files need to be deleted
401      * @param userId the user to delete application cache for
402      * @param observer a callback used to notify when the deletion is finished.
403      */
deleteApplicationCacheFilesAsUser(in String packageName, int userId, IPackageDataObserver observer)404     void deleteApplicationCacheFilesAsUser(in String packageName, int userId, IPackageDataObserver observer);
405 
406     /**
407      * Clear the user data directory of an application.
408      * @param packageName The package name of the application whose cache
409      * files need to be deleted
410      * @param observer a callback used to notify when the operation is completed.
411      */
clearApplicationUserData(in String packageName, IPackageDataObserver observer, int userId)412     void clearApplicationUserData(in String packageName, IPackageDataObserver observer, int userId);
413 
414     /**
415      * Clear the profile data of an application.
416      * @param packageName The package name of the application whose profile data
417      * need to be deleted
418      */
clearApplicationProfileData(in String packageName)419     void clearApplicationProfileData(in String packageName);
420 
421    /**
422      * Get package statistics including the code, data and cache size for
423      * an already installed package
424      * @param packageName The package name of the application
425      * @param userHandle Which user the size should be retrieved for
426      * @param observer a callback to use to notify when the asynchronous
427      * retrieval of information is complete.
428      */
getPackageSizeInfo(in String packageName, int userHandle, IPackageStatsObserver observer)429     void getPackageSizeInfo(in String packageName, int userHandle, IPackageStatsObserver observer);
430 
431     /**
432      * Get a list of shared libraries that are available on the
433      * system.
434      */
getSystemSharedLibraryNames()435     String[] getSystemSharedLibraryNames();
436 
437     /**
438      * Get a list of features that are available on the
439      * system.
440      */
getSystemAvailableFeatures()441     ParceledListSlice getSystemAvailableFeatures();
442 
hasSystemFeature(String name, int version)443     boolean hasSystemFeature(String name, int version);
444 
enterSafeMode()445     void enterSafeMode();
isSafeMode()446     boolean isSafeMode();
systemReady()447     void systemReady();
hasSystemUidErrors()448     boolean hasSystemUidErrors();
449 
450     /**
451      * Ask the package manager to fstrim the disk if needed.
452      */
performFstrimIfNeeded()453     void performFstrimIfNeeded();
454 
455     /**
456      * Ask the package manager to update packages if needed.
457      */
updatePackagesIfNeeded()458     void updatePackagesIfNeeded();
459 
460     /**
461      * Notify the package manager that a package is going to be used and why.
462      *
463      * See PackageManager.NOTIFY_PACKAGE_USE_* for reasons.
464      */
notifyPackageUse(String packageName, int reason)465     oneway void notifyPackageUse(String packageName, int reason);
466 
467     /**
468      * Notify the package manager that a list of dex files have been loaded.
469      *
470      * @param loadingPackageName the name of the package who performs the load
471      * @param classLoadersNames the names of the class loaders present in the loading chain. The
472      *    list encodes the class loader chain in the natural order. The first class loader has
473      *    the second one as its parent and so on. The dex files present in the class path of the
474      *    first class loader will be recorded in the usage file.
475      * @param classPaths the class paths corresponding to the class loaders names from
476      *     {@param classLoadersNames}. The the first element corresponds to the first class loader
477      *     and so on. A classpath is represented as a list of dex files separated by
478      *     {@code File.pathSeparator}.
479      *     The dex files found in the first class path will be recorded in the usage file.
480      * @param loaderIsa the ISA of the loader process
481      */
notifyDexLoad(String loadingPackageName, in List<String> classLoadersNames, in List<String> classPaths, String loaderIsa)482     oneway void notifyDexLoad(String loadingPackageName, in List<String> classLoadersNames,
483             in List<String> classPaths, String loaderIsa);
484 
485     /**
486      * Register an application dex module with the package manager.
487      * The package manager will keep track of the given module for future optimizations.
488      *
489      * Dex module optimizations will disable the classpath checking at runtime. The client bares
490      * the responsibility to ensure that the static assumptions on classes in the optimized code
491      * hold at runtime (e.g. there's no duplicate classes in the classpath).
492      *
493      * Note that the package manager already keeps track of dex modules loaded with
494      * {@link dalvik.system.DexClassLoader} and {@link dalvik.system.PathClassLoader}.
495      * This can be called for an eager registration.
496      *
497      * The call might take a while and the results will be posted on the main thread, using
498      * the given callback.
499      *
500      * If the module is intended to be shared with other apps, make sure that the file
501      * permissions allow for it.
502      * If at registration time the permissions allow for others to read it, the module would
503      * be marked as a shared module which might undergo a different optimization strategy.
504      * (usually shared modules will generated larger optimizations artifacts,
505      * taking more disk space).
506      *
507      * @param packageName the package name to which the dex module belongs
508      * @param dexModulePath the absolute path of the dex module.
509      * @param isSharedModule whether or not the module is intended to be used by other apps.
510      * @param callback if not null,
511      *   {@link android.content.pm.IDexModuleRegisterCallback.IDexModuleRegisterCallback#onDexModuleRegistered}
512      *   will be called once the registration finishes.
513      */
registerDexModule(in String packageName, in String dexModulePath, in boolean isSharedModule, IDexModuleRegisterCallback callback)514      oneway void registerDexModule(in String packageName, in String dexModulePath,
515              in boolean isSharedModule, IDexModuleRegisterCallback callback);
516 
517     /**
518      * Ask the package manager to perform a dex-opt with the given compiler filter.
519      *
520      * Note: exposed only for the shell command to allow moving packages explicitly to a
521      *       definite state.
522      */
performDexOptMode(String packageName, boolean checkProfiles, String targetCompilerFilter, boolean force, boolean bootComplete, String splitName)523     boolean performDexOptMode(String packageName, boolean checkProfiles,
524             String targetCompilerFilter, boolean force, boolean bootComplete, String splitName);
525 
526     /**
527      * Ask the package manager to perform a dex-opt with the given compiler filter on the
528      * secondary dex files belonging to the given package.
529      *
530      * Note: exposed only for the shell command to allow moving packages explicitly to a
531      *       definite state.
532      */
performDexOptSecondary(String packageName, String targetCompilerFilter, boolean force)533     boolean performDexOptSecondary(String packageName,
534             String targetCompilerFilter, boolean force);
535 
536     /**
537      * Ask the package manager to dump profiles associated with a package.
538      */
dumpProfiles(String packageName)539     void dumpProfiles(String packageName);
540 
forceDexOpt(String packageName)541     void forceDexOpt(String packageName);
542 
543     /**
544      * Execute the background dexopt job immediately on packages in packageNames.
545      * If null, then execute on all packages.
546      */
runBackgroundDexoptJob(in List<String> packageNames)547     boolean runBackgroundDexoptJob(in List<String> packageNames);
548 
549     /**
550      * Reconcile the information we have about the secondary dex files belonging to
551      * {@code packagName} and the actual dex files. For all dex files that were
552      * deleted, update the internal records and delete the generated oat files.
553      */
reconcileSecondaryDexFiles(String packageName)554     void reconcileSecondaryDexFiles(String packageName);
555 
nextPackageToClean(in PackageCleanItem lastPackage)556     PackageCleanItem nextPackageToClean(in PackageCleanItem lastPackage);
557 
getMoveStatus(int moveId)558     int getMoveStatus(int moveId);
559 
registerMoveCallback(in IPackageMoveObserver callback)560     void registerMoveCallback(in IPackageMoveObserver callback);
unregisterMoveCallback(in IPackageMoveObserver callback)561     void unregisterMoveCallback(in IPackageMoveObserver callback);
562 
movePackage(in String packageName, in String volumeUuid)563     int movePackage(in String packageName, in String volumeUuid);
movePrimaryStorage(in String volumeUuid)564     int movePrimaryStorage(in String volumeUuid);
565 
addPermissionAsync(in PermissionInfo info)566     boolean addPermissionAsync(in PermissionInfo info);
567 
setInstallLocation(int loc)568     boolean setInstallLocation(int loc);
getInstallLocation()569     int getInstallLocation();
570 
installExistingPackageAsUser(String packageName, int userId, int installFlags, int installReason)571     int installExistingPackageAsUser(String packageName, int userId, int installFlags,
572             int installReason);
573 
verifyPendingInstall(int id, int verificationCode)574     void verifyPendingInstall(int id, int verificationCode);
extendVerificationTimeout(int id, int verificationCodeAtTimeout, long millisecondsToDelay)575     void extendVerificationTimeout(int id, int verificationCodeAtTimeout, long millisecondsToDelay);
576 
verifyIntentFilter(int id, int verificationCode, in List<String> failedDomains)577     void verifyIntentFilter(int id, int verificationCode, in List<String> failedDomains);
getIntentVerificationStatus(String packageName, int userId)578     int getIntentVerificationStatus(String packageName, int userId);
updateIntentVerificationStatus(String packageName, int status, int userId)579     boolean updateIntentVerificationStatus(String packageName, int status, int userId);
getIntentFilterVerifications(String packageName)580     ParceledListSlice getIntentFilterVerifications(String packageName);
getAllIntentFilters(String packageName)581     ParceledListSlice getAllIntentFilters(String packageName);
582 
setDefaultBrowserPackageName(String packageName, int userId)583     boolean setDefaultBrowserPackageName(String packageName, int userId);
getDefaultBrowserPackageName(int userId)584     String getDefaultBrowserPackageName(int userId);
585 
getVerifierDeviceIdentity()586     VerifierDeviceIdentity getVerifierDeviceIdentity();
587 
isFirstBoot()588     boolean isFirstBoot();
isOnlyCoreApps()589     boolean isOnlyCoreApps();
isUpgrade()590     boolean isUpgrade();
591 
setPermissionEnforced(String permission, boolean enforced)592     void setPermissionEnforced(String permission, boolean enforced);
isPermissionEnforced(String permission)593     boolean isPermissionEnforced(String permission);
594 
595     /** Reflects current DeviceStorageMonitorService state */
isStorageLow()596     boolean isStorageLow();
597 
setApplicationHiddenSettingAsUser(String packageName, boolean hidden, int userId)598     boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, int userId);
getApplicationHiddenSettingAsUser(String packageName, int userId)599     boolean getApplicationHiddenSettingAsUser(String packageName, int userId);
600 
getPackageInstaller()601     IPackageInstaller getPackageInstaller();
602 
setBlockUninstallForUser(String packageName, boolean blockUninstall, int userId)603     boolean setBlockUninstallForUser(String packageName, boolean blockUninstall, int userId);
getBlockUninstallForUser(String packageName, int userId)604     boolean getBlockUninstallForUser(String packageName, int userId);
605 
getKeySetByAlias(String packageName, String alias)606     KeySet getKeySetByAlias(String packageName, String alias);
getSigningKeySet(String packageName)607     KeySet getSigningKeySet(String packageName);
isPackageSignedByKeySet(String packageName, in KeySet ks)608     boolean isPackageSignedByKeySet(String packageName, in KeySet ks);
isPackageSignedByKeySetExactly(String packageName, in KeySet ks)609     boolean isPackageSignedByKeySetExactly(String packageName, in KeySet ks);
610 
addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener)611     void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener)612     void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId)613     void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId);
grantDefaultPermissionsToEnabledImsServices(in String[] packageNames, int userId)614     void grantDefaultPermissionsToEnabledImsServices(in String[] packageNames, int userId);
grantDefaultPermissionsToEnabledTelephonyDataServices( in String[] packageNames, int userId)615     void grantDefaultPermissionsToEnabledTelephonyDataServices(
616             in String[] packageNames, int userId);
revokeDefaultPermissionsFromDisabledTelephonyDataServices( in String[] packageNames, int userId)617     void revokeDefaultPermissionsFromDisabledTelephonyDataServices(
618             in String[] packageNames, int userId);
grantDefaultPermissionsToActiveLuiApp(in String packageName, int userId)619     void grantDefaultPermissionsToActiveLuiApp(in String packageName, int userId);
revokeDefaultPermissionsFromLuiApps(in String[] packageNames, int userId)620     void revokeDefaultPermissionsFromLuiApps(in String[] packageNames, int userId);
621 
isPermissionRevokedByPolicy(String permission, String packageName, int userId)622     boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId);
623 
getPermissionControllerPackageName()624     String getPermissionControllerPackageName();
625 
getInstantApps(int userId)626     ParceledListSlice getInstantApps(int userId);
getInstantAppCookie(String packageName, int userId)627     byte[] getInstantAppCookie(String packageName, int userId);
setInstantAppCookie(String packageName, in byte[] cookie, int userId)628     boolean setInstantAppCookie(String packageName, in byte[] cookie, int userId);
getInstantAppIcon(String packageName, int userId)629     Bitmap getInstantAppIcon(String packageName, int userId);
isInstantApp(String packageName, int userId)630     boolean isInstantApp(String packageName, int userId);
631 
setRequiredForSystemUser(String packageName, boolean systemUserApp)632     boolean setRequiredForSystemUser(String packageName, boolean systemUserApp);
633 
634     /**
635      * Sets whether or not an update is available. Ostensibly for instant apps
636      * to force exteranl resolution.
637      */
setUpdateAvailable(String packageName, boolean updateAvaialble)638     void setUpdateAvailable(String packageName, boolean updateAvaialble);
639 
getServicesSystemSharedLibraryPackageName()640     String getServicesSystemSharedLibraryPackageName();
getSharedSystemSharedLibraryPackageName()641     String getSharedSystemSharedLibraryPackageName();
642 
getChangedPackages(int sequenceNumber, int userId)643     ChangedPackages getChangedPackages(int sequenceNumber, int userId);
644 
isPackageDeviceAdminOnAnyUser(String packageName)645     boolean isPackageDeviceAdminOnAnyUser(String packageName);
646 
getInstallReason(String packageName, int userId)647     int getInstallReason(String packageName, int userId);
648 
getSharedLibraries(in String packageName, int flags, int userId)649     ParceledListSlice getSharedLibraries(in String packageName, int flags, int userId);
650 
canRequestPackageInstalls(String packageName, int userId)651     boolean canRequestPackageInstalls(String packageName, int userId);
652 
deletePreloadsFileCache()653     void deletePreloadsFileCache();
654 
getInstantAppResolverComponent()655     ComponentName getInstantAppResolverComponent();
656 
getInstantAppResolverSettingsComponent()657     ComponentName getInstantAppResolverSettingsComponent();
658 
getInstantAppInstallerComponent()659     ComponentName getInstantAppInstallerComponent();
660 
getInstantAppAndroidId(String packageName, int userId)661     String getInstantAppAndroidId(String packageName, int userId);
662 
getArtManager()663     IArtManager getArtManager();
664 
setHarmfulAppWarning(String packageName, CharSequence warning, int userId)665     void setHarmfulAppWarning(String packageName, CharSequence warning, int userId);
666 
getHarmfulAppWarning(String packageName, int userId)667     CharSequence getHarmfulAppWarning(String packageName, int userId);
668 
hasSigningCertificate(String packageName, in byte[] signingCertificate, int flags)669     boolean hasSigningCertificate(String packageName, in byte[] signingCertificate, int flags);
670 
hasUidSigningCertificate(int uid, in byte[] signingCertificate, int flags)671     boolean hasUidSigningCertificate(int uid, in byte[] signingCertificate, int flags);
672 
getSystemTextClassifierPackageName()673     String getSystemTextClassifierPackageName();
674 
isPackageStateProtected(String packageName, int userId)675     boolean isPackageStateProtected(String packageName, int userId);
676 }
677