Loading core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -13040,6 +13040,7 @@ package android.content.pm { method @CheckResult public abstract boolean isPermissionRevokedByPolicy(@NonNull String, @NonNull String); method public abstract boolean isSafeMode(); method @FlaggedApi("android.content.pm.get_package_info") @WorkerThread public <T> T parseAndroidManifest(@NonNull java.io.File, @NonNull java.util.function.Function<android.content.res.XmlResourceParser,T>) throws java.io.IOException; method @FlaggedApi("android.content.pm.get_package_info_with_fd") @WorkerThread public <T> T parseAndroidManifest(@NonNull android.os.ParcelFileDescriptor, @NonNull java.util.function.Function<android.content.res.XmlResourceParser,T>) throws java.io.IOException; method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryActivityProperty(@NonNull String); method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryApplicationProperty(@NonNull String); method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(@NonNull android.content.Intent, int); core/java/android/app/ApplicationPackageManager.java +32 −0 Original line number Diff line number Diff line Loading @@ -4097,6 +4097,38 @@ public class ApplicationPackageManager extends PackageManager { } } @Override public <T> T parseAndroidManifest(@NonNull ParcelFileDescriptor apkFileDescriptor, @NonNull Function<XmlResourceParser, T> parserFunction) throws IOException { Objects.requireNonNull(apkFileDescriptor, "apkFileDescriptor cannot be null"); Objects.requireNonNull(parserFunction, "parserFunction cannot be null"); try (XmlResourceParser xmlResourceParser = getAndroidManifestParser(apkFileDescriptor)) { return parserFunction.apply(xmlResourceParser); } catch (IOException e) { Log.w(TAG, "Failed to get the android manifest parser", e); throw e; } } private static XmlResourceParser getAndroidManifestParser(@NonNull ParcelFileDescriptor fd) throws IOException { ApkAssets apkAssets = null; try { apkAssets = ApkAssets.loadFromFd( fd.getFileDescriptor(), fd.toString(), /* flags= */ 0 , /* assets= */null); return apkAssets.openXml(ApkLiteParseUtils.ANDROID_MANIFEST_FILENAME); } finally { if (apkAssets != null) { try { apkAssets.close(); } catch (Throwable ignored) { Log.w(TAG, "Failed to close apkAssets", ignored); } } } } @Override public TypedArray extractPackageItemInfoAttributes(PackageItemInfo info, String name, String rootTag, int[] attributes) { Loading core/java/android/content/pm/PackageManager.java +22 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.Parcelable; import android.os.PersistableBundle; import android.os.RemoteException; Loading Loading @@ -11754,6 +11755,27 @@ public abstract class PackageManager { "parseAndroidManifest not implemented in subclass"); } /** * Similar to {@link #parseAndroidManifest(File, Function)}, but accepting a file descriptor * instead of a File object. * * @param apkFileDescriptor The file descriptor of an application apk. * The parserFunction will be invoked with the XmlResourceParser object * after getting the AndroidManifest.xml of an application package. * * @return Returns the result of the {@link Function#apply(Object)}. * * @throws IOException if the AndroidManifest.xml of an application package cannot be * read or accessed. */ @FlaggedApi(android.content.pm.Flags.FLAG_GET_PACKAGE_INFO_WITH_FD) @WorkerThread public <T> T parseAndroidManifest(@NonNull ParcelFileDescriptor apkFileDescriptor, @NonNull Function<XmlResourceParser, T> parserFunction) throws IOException { throw new UnsupportedOperationException( "parseAndroidManifest not implemented in subclass"); } /** * @param info The {@link ServiceInfo} to pull the attributes from. * @param name The name of the Xml metadata where the attributes are stored. Loading core/java/android/content/pm/flags.aconfig +8 −0 Original line number Diff line number Diff line Loading @@ -276,3 +276,11 @@ flag { bug: "300309050" is_fixed_read_only: true } flag { name: "get_package_info_with_fd" is_exported: true namespace: "package_manager_service" description: "Feature flag to enable the feature to retrieve package info without installation with a file descriptor." bug: "340879905" } No newline at end of file Loading
core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -13040,6 +13040,7 @@ package android.content.pm { method @CheckResult public abstract boolean isPermissionRevokedByPolicy(@NonNull String, @NonNull String); method public abstract boolean isSafeMode(); method @FlaggedApi("android.content.pm.get_package_info") @WorkerThread public <T> T parseAndroidManifest(@NonNull java.io.File, @NonNull java.util.function.Function<android.content.res.XmlResourceParser,T>) throws java.io.IOException; method @FlaggedApi("android.content.pm.get_package_info_with_fd") @WorkerThread public <T> T parseAndroidManifest(@NonNull android.os.ParcelFileDescriptor, @NonNull java.util.function.Function<android.content.res.XmlResourceParser,T>) throws java.io.IOException; method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryActivityProperty(@NonNull String); method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryApplicationProperty(@NonNull String); method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(@NonNull android.content.Intent, int);
core/java/android/app/ApplicationPackageManager.java +32 −0 Original line number Diff line number Diff line Loading @@ -4097,6 +4097,38 @@ public class ApplicationPackageManager extends PackageManager { } } @Override public <T> T parseAndroidManifest(@NonNull ParcelFileDescriptor apkFileDescriptor, @NonNull Function<XmlResourceParser, T> parserFunction) throws IOException { Objects.requireNonNull(apkFileDescriptor, "apkFileDescriptor cannot be null"); Objects.requireNonNull(parserFunction, "parserFunction cannot be null"); try (XmlResourceParser xmlResourceParser = getAndroidManifestParser(apkFileDescriptor)) { return parserFunction.apply(xmlResourceParser); } catch (IOException e) { Log.w(TAG, "Failed to get the android manifest parser", e); throw e; } } private static XmlResourceParser getAndroidManifestParser(@NonNull ParcelFileDescriptor fd) throws IOException { ApkAssets apkAssets = null; try { apkAssets = ApkAssets.loadFromFd( fd.getFileDescriptor(), fd.toString(), /* flags= */ 0 , /* assets= */null); return apkAssets.openXml(ApkLiteParseUtils.ANDROID_MANIFEST_FILENAME); } finally { if (apkAssets != null) { try { apkAssets.close(); } catch (Throwable ignored) { Log.w(TAG, "Failed to close apkAssets", ignored); } } } } @Override public TypedArray extractPackageItemInfoAttributes(PackageItemInfo info, String name, String rootTag, int[] attributes) { Loading
core/java/android/content/pm/PackageManager.java +22 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.Parcelable; import android.os.PersistableBundle; import android.os.RemoteException; Loading Loading @@ -11754,6 +11755,27 @@ public abstract class PackageManager { "parseAndroidManifest not implemented in subclass"); } /** * Similar to {@link #parseAndroidManifest(File, Function)}, but accepting a file descriptor * instead of a File object. * * @param apkFileDescriptor The file descriptor of an application apk. * The parserFunction will be invoked with the XmlResourceParser object * after getting the AndroidManifest.xml of an application package. * * @return Returns the result of the {@link Function#apply(Object)}. * * @throws IOException if the AndroidManifest.xml of an application package cannot be * read or accessed. */ @FlaggedApi(android.content.pm.Flags.FLAG_GET_PACKAGE_INFO_WITH_FD) @WorkerThread public <T> T parseAndroidManifest(@NonNull ParcelFileDescriptor apkFileDescriptor, @NonNull Function<XmlResourceParser, T> parserFunction) throws IOException { throw new UnsupportedOperationException( "parseAndroidManifest not implemented in subclass"); } /** * @param info The {@link ServiceInfo} to pull the attributes from. * @param name The name of the Xml metadata where the attributes are stored. Loading
core/java/android/content/pm/flags.aconfig +8 −0 Original line number Diff line number Diff line Loading @@ -276,3 +276,11 @@ flag { bug: "300309050" is_fixed_read_only: true } flag { name: "get_package_info_with_fd" is_exported: true namespace: "package_manager_service" description: "Feature flag to enable the feature to retrieve package info without installation with a file descriptor." bug: "340879905" } No newline at end of file