Loading Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -675,6 +675,7 @@ java_defaults { ], static_libs: [ "apex_aidl_interface-java", "framework-protos", "android.hidl.base-V1.0-java", "android.hardware.cas-V1.0-java", Loading api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -11012,6 +11012,7 @@ package android.content.pm { field public int[] gids; field public int installLocation; field public android.content.pm.InstrumentationInfo[] instrumentation; field public boolean isApex; field public long lastUpdateTime; field public java.lang.String packageName; field public android.content.pm.PermissionInfo[] permissions; Loading Loading @@ -11390,6 +11391,7 @@ package android.content.pm { field public static final int INSTALL_REASON_UNKNOWN = 0; // 0x0 field public static final int INSTALL_REASON_USER = 4; // 0x4 field public static final int MATCH_ALL = 131072; // 0x20000 field public static final int MATCH_APEX = 1073741824; // 0x40000000 field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000 field public static final int MATCH_DIRECT_BOOT_AWARE = 524288; // 0x80000 field public static final int MATCH_DIRECT_BOOT_UNAWARE = 262144; // 0x40000 core/java/android/content/pm/PackageInfo.java +17 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.content.pm; import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.apex.ApexInfo; import android.os.Parcel; import android.os.Parcelable; Loading Loading @@ -390,6 +391,11 @@ public class PackageInfo implements Parcelable { @Nullable public String compileSdkVersionCodename; /** * Whether the package is an APEX package. */ public boolean isApex; public PackageInfo() { } Loading Loading @@ -472,6 +478,7 @@ public class PackageInfo implements Parcelable { } else { dest.writeInt(0); } dest.writeBoolean(isApex); } public static final Parcelable.Creator<PackageInfo> CREATOR Loading Loading @@ -533,7 +540,7 @@ public class PackageInfo implements Parcelable { if (hasSigningInfo != 0) { signingInfo = SigningInfo.CREATOR.createFromParcel(source); } isApex = source.readBoolean(); // The component lists were flattened with the redundant ApplicationInfo // instances omitted. Distribute the canonical one here as appropriate. if (applicationInfo != null) { Loading @@ -544,6 +551,15 @@ public class PackageInfo implements Parcelable { } } /** * @hide */ public PackageInfo(ApexInfo apexInfo) { packageName = apexInfo.packageName; setLongVersionCode(apexInfo.versionCode); isApex = true; } private void propagateApplicationInfo(ApplicationInfo appInfo, ComponentInfo[] components) { if (components != null) { for (ComponentInfo ci : components) { Loading core/java/android/content/pm/PackageManager.java +20 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,7 @@ public abstract class PackageManager { MATCH_FACTORY_ONLY, MATCH_DEBUG_TRIAGED_MISSING, MATCH_INSTANT, MATCH_APEX, GET_DISABLED_COMPONENTS, GET_DISABLED_UNTIL_USED_COMPONENTS, GET_UNINSTALLED_PACKAGES, Loading Loading @@ -530,6 +531,17 @@ public abstract class PackageManager { */ public static final int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS = 0x20000000; /** * {@link PackageInfo} flag: include APEX packages that are currently * installed. In APEX terminology, this corresponds to packages that are * currently active, i.e. mounted and available to other processes of the OS. * In particular, this flag alone will not match APEX files that are staged * for activation at next reboot. * TODO(b/119767311): include uninstalled/inactive APEX if * MATCH_UNINSTALLED_PACKAGES is set. */ public static final int MATCH_APEX = 0x40000000; /** * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set: when * resolving an intent that matches the {@code CrossProfileIntentFilter}, Loading Loading @@ -846,6 +858,14 @@ public abstract class PackageManager { */ public static final int INSTALL_VIRTUAL_PRELOAD = 0x00010000; /** * Flag parameter for {@link #installPackage} to indicate that this package * is an APEX package * * @hide */ public static final int INSTALL_APEX = 0x00020000; /** @hide */ @IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = { DONT_KILL_APP Loading services/core/java/com/android/server/pm/PackageInstallerService.java +2 −3 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ import android.os.Process; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.SELinux; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; Loading Loading @@ -646,8 +645,8 @@ public class PackageInstallerService extends IPackageInstaller.Stub { } try { Os.mkdir(stageDir.getAbsolutePath(), 0755); Os.chmod(stageDir.getAbsolutePath(), 0755); Os.mkdir(stageDir.getAbsolutePath(), 0775); Os.chmod(stageDir.getAbsolutePath(), 0775); } catch (ErrnoException e) { // This purposefully throws if directory already exists throw new IOException("Failed to prepare session dir: " + stageDir, e); Loading Loading
Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -675,6 +675,7 @@ java_defaults { ], static_libs: [ "apex_aidl_interface-java", "framework-protos", "android.hidl.base-V1.0-java", "android.hardware.cas-V1.0-java", Loading
api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -11012,6 +11012,7 @@ package android.content.pm { field public int[] gids; field public int installLocation; field public android.content.pm.InstrumentationInfo[] instrumentation; field public boolean isApex; field public long lastUpdateTime; field public java.lang.String packageName; field public android.content.pm.PermissionInfo[] permissions; Loading Loading @@ -11390,6 +11391,7 @@ package android.content.pm { field public static final int INSTALL_REASON_UNKNOWN = 0; // 0x0 field public static final int INSTALL_REASON_USER = 4; // 0x4 field public static final int MATCH_ALL = 131072; // 0x20000 field public static final int MATCH_APEX = 1073741824; // 0x40000000 field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000 field public static final int MATCH_DIRECT_BOOT_AWARE = 524288; // 0x80000 field public static final int MATCH_DIRECT_BOOT_UNAWARE = 262144; // 0x40000
core/java/android/content/pm/PackageInfo.java +17 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.content.pm; import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.apex.ApexInfo; import android.os.Parcel; import android.os.Parcelable; Loading Loading @@ -390,6 +391,11 @@ public class PackageInfo implements Parcelable { @Nullable public String compileSdkVersionCodename; /** * Whether the package is an APEX package. */ public boolean isApex; public PackageInfo() { } Loading Loading @@ -472,6 +478,7 @@ public class PackageInfo implements Parcelable { } else { dest.writeInt(0); } dest.writeBoolean(isApex); } public static final Parcelable.Creator<PackageInfo> CREATOR Loading Loading @@ -533,7 +540,7 @@ public class PackageInfo implements Parcelable { if (hasSigningInfo != 0) { signingInfo = SigningInfo.CREATOR.createFromParcel(source); } isApex = source.readBoolean(); // The component lists were flattened with the redundant ApplicationInfo // instances omitted. Distribute the canonical one here as appropriate. if (applicationInfo != null) { Loading @@ -544,6 +551,15 @@ public class PackageInfo implements Parcelable { } } /** * @hide */ public PackageInfo(ApexInfo apexInfo) { packageName = apexInfo.packageName; setLongVersionCode(apexInfo.versionCode); isApex = true; } private void propagateApplicationInfo(ApplicationInfo appInfo, ComponentInfo[] components) { if (components != null) { for (ComponentInfo ci : components) { Loading
core/java/android/content/pm/PackageManager.java +20 −0 Original line number Diff line number Diff line Loading @@ -145,6 +145,7 @@ public abstract class PackageManager { MATCH_FACTORY_ONLY, MATCH_DEBUG_TRIAGED_MISSING, MATCH_INSTANT, MATCH_APEX, GET_DISABLED_COMPONENTS, GET_DISABLED_UNTIL_USED_COMPONENTS, GET_UNINSTALLED_PACKAGES, Loading Loading @@ -530,6 +531,17 @@ public abstract class PackageManager { */ public static final int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS = 0x20000000; /** * {@link PackageInfo} flag: include APEX packages that are currently * installed. In APEX terminology, this corresponds to packages that are * currently active, i.e. mounted and available to other processes of the OS. * In particular, this flag alone will not match APEX files that are staged * for activation at next reboot. * TODO(b/119767311): include uninstalled/inactive APEX if * MATCH_UNINSTALLED_PACKAGES is set. */ public static final int MATCH_APEX = 0x40000000; /** * Flag for {@link #addCrossProfileIntentFilter}: if this flag is set: when * resolving an intent that matches the {@code CrossProfileIntentFilter}, Loading Loading @@ -846,6 +858,14 @@ public abstract class PackageManager { */ public static final int INSTALL_VIRTUAL_PRELOAD = 0x00010000; /** * Flag parameter for {@link #installPackage} to indicate that this package * is an APEX package * * @hide */ public static final int INSTALL_APEX = 0x00020000; /** @hide */ @IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = { DONT_KILL_APP Loading
services/core/java/com/android/server/pm/PackageInstallerService.java +2 −3 Original line number Diff line number Diff line Loading @@ -58,7 +58,6 @@ import android.os.Process; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.SELinux; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; Loading Loading @@ -646,8 +645,8 @@ public class PackageInstallerService extends IPackageInstaller.Stub { } try { Os.mkdir(stageDir.getAbsolutePath(), 0755); Os.chmod(stageDir.getAbsolutePath(), 0755); Os.mkdir(stageDir.getAbsolutePath(), 0775); Os.chmod(stageDir.getAbsolutePath(), 0775); } catch (ErrnoException e) { // This purposefully throws if directory already exists throw new IOException("Failed to prepare session dir: " + stageDir, e); Loading