Loading core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java +15 −0 Original line number Diff line number Diff line Loading @@ -421,6 +421,8 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, @NonNull private String[] mUsesStaticLibrariesSorted; private boolean mAppMetadataFileInApk = false; @NonNull public static PackageImpl forParsing(@NonNull String packageName, @NonNull String baseCodePath, @NonNull String codePath, @NonNull TypedArray manifestArray, boolean isCoreApp, Loading Loading @@ -1063,6 +1065,11 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, return memtagMode; } @Override public boolean isAppMetadataFileInApk() { return mAppMetadataFileInApk; } @Nullable @Override public Bundle getMetaData() { Loading Loading @@ -2150,6 +2157,12 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, return this; } @Override public PackageImpl setAppMetadataFileInApk(boolean fileInApk) { mAppMetadataFileInApk = fileInApk; return this; } @Override public PackageImpl setMetaData(@Nullable Bundle value) { metaData = value; Loading Loading @@ -3264,6 +3277,7 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, dest.writeLong(this.mBooleans); dest.writeLong(this.mBooleans2); dest.writeBoolean(this.mAllowCrossUidActivitySwitchFromBelow); dest.writeBoolean(this.mAppMetadataFileInApk); } public PackageImpl(Parcel in) { Loading Loading @@ -3426,6 +3440,7 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, this.mBooleans = in.readLong(); this.mBooleans2 = in.readLong(); this.mAllowCrossUidActivitySwitchFromBelow = in.readBoolean(); this.mAppMetadataFileInApk = in.readBoolean(); assignDerivedFields(); assignDerivedFields2(); Loading core/java/com/android/internal/pm/parsing/pkg/ParsedPackage.java +3 −0 Original line number Diff line number Diff line Loading @@ -127,4 +127,7 @@ public interface ParsedPackage extends AndroidPackage { ParsedPackage setDirectBootAware(boolean directBootAware); ParsedPackage setPersistent(boolean persistent); /** Retrieves whether the apk contains a app metadata file. */ boolean isAppMetadataFileInApk(); } core/java/com/android/internal/pm/pkg/parsing/ParsingPackage.java +3 −0 Original line number Diff line number Diff line Loading @@ -133,6 +133,9 @@ public interface ParsingPackage { @Nullable SparseArray<int[]> splitDependencies ); /** Sets whether the apk contains a app metadata file. */ ParsingPackage setAppMetadataFileInApk(boolean fileInApk); ParsingPackage setMetaData(Bundle metaData); ParsingPackage setForceQueryable(boolean forceQueryable); Loading core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java +10 −1 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.ConfigurationInfo; import android.content.pm.FeatureGroupInfo; import android.content.pm.FeatureInfo; import android.content.pm.Flags; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.Property; Loading Loading @@ -163,6 +164,8 @@ public class ParsingPackageUtils { */ public static final String ANDROID_MANIFEST_FILENAME = "AndroidManifest.xml"; public static final String APP_METADATA_FILE_NAME = "app.metadata"; /** * Path prefix for apps on expanded storage */ Loading Loading @@ -636,6 +639,11 @@ public class ParsingPackageUtils { pkg.setSigningDetails(SigningDetails.UNKNOWN); } if (Flags.aslInApkAppMetadataSource() && ArrayUtils.contains(assets.list(""), APP_METADATA_FILE_NAME)) { pkg.setAppMetadataFileInApk(true); } return input.success(pkg); } catch (Exception e) { return input.error(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION, Loading Loading @@ -686,7 +694,8 @@ public class ParsingPackageUtils { */ private ParseResult<ParsingPackage> parseBaseApk(ParseInput input, String apkPath, String codePath, Resources res, XmlResourceParser parser, int flags, boolean shouldSkipComponents) throws XmlPullParserException, IOException { boolean shouldSkipComponents) throws XmlPullParserException, IOException { final String splitName; final String pkgName; Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +11 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.server.pm; import static android.content.pm.Flags.disallowSdkLibsToBeApps; import static android.content.pm.PackageManager.APP_METADATA_SOURCE_APK; import static android.content.pm.PackageManager.APP_METADATA_SOURCE_INSTALLER; import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED; import static android.content.pm.PackageManager.INSTALL_FAILED_ALREADY_EXISTS; Loading @@ -43,11 +45,11 @@ import static android.os.storage.StorageManager.FLAG_STORAGE_CE; import static android.os.storage.StorageManager.FLAG_STORAGE_DE; import static android.os.storage.StorageManager.FLAG_STORAGE_EXTERNAL; import static com.android.internal.pm.pkg.parsing.ParsingPackageUtils.APP_METADATA_FILE_NAME; import static com.android.server.pm.DexOptHelper.useArtService; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSet; import static com.android.server.pm.InstructionSets.getPreferredInstructionSet; import static com.android.server.pm.PackageManagerService.APP_METADATA_FILE_NAME; import static com.android.server.pm.PackageManagerService.DEBUG_COMPRESSION; import static com.android.server.pm.PackageManagerService.DEBUG_INSTALL; import static com.android.server.pm.PackageManagerService.DEBUG_PACKAGE_SCANNING; Loading Loading @@ -2225,12 +2227,18 @@ final class InstallPackageHelper { if (appMetadataFile.exists()) { ps.setAppMetadataFilePath(appMetadataFile.getAbsolutePath()); if (Flags.aslInApkAppMetadataSource()) { ps.setAppMetadataSource(PackageManager.APP_METADATA_SOURCE_INSTALLER); ps.setAppMetadataSource(APP_METADATA_SOURCE_INSTALLER); } } else { if (Flags.aslInApkAppMetadataSource() && parsedPackage.isAppMetadataFileInApk()) { ps.setAppMetadataFilePath(appMetadataFile.getAbsolutePath()); ps.setAppMetadataSource(APP_METADATA_SOURCE_APK); } else { ps.setAppMetadataFilePath(null); } } } if (installRequest.getReturnCode() == PackageManager.INSTALL_SUCCEEDED) { // If this is an archival installation then we'll initialize the archive status, // while also marking package as not installed. Loading Loading
core/java/com/android/internal/pm/parsing/pkg/PackageImpl.java +15 −0 Original line number Diff line number Diff line Loading @@ -421,6 +421,8 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, @NonNull private String[] mUsesStaticLibrariesSorted; private boolean mAppMetadataFileInApk = false; @NonNull public static PackageImpl forParsing(@NonNull String packageName, @NonNull String baseCodePath, @NonNull String codePath, @NonNull TypedArray manifestArray, boolean isCoreApp, Loading Loading @@ -1063,6 +1065,11 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, return memtagMode; } @Override public boolean isAppMetadataFileInApk() { return mAppMetadataFileInApk; } @Nullable @Override public Bundle getMetaData() { Loading Loading @@ -2150,6 +2157,12 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, return this; } @Override public PackageImpl setAppMetadataFileInApk(boolean fileInApk) { mAppMetadataFileInApk = fileInApk; return this; } @Override public PackageImpl setMetaData(@Nullable Bundle value) { metaData = value; Loading Loading @@ -3264,6 +3277,7 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, dest.writeLong(this.mBooleans); dest.writeLong(this.mBooleans2); dest.writeBoolean(this.mAllowCrossUidActivitySwitchFromBelow); dest.writeBoolean(this.mAppMetadataFileInApk); } public PackageImpl(Parcel in) { Loading Loading @@ -3426,6 +3440,7 @@ public class PackageImpl implements ParsedPackage, AndroidPackageInternal, this.mBooleans = in.readLong(); this.mBooleans2 = in.readLong(); this.mAllowCrossUidActivitySwitchFromBelow = in.readBoolean(); this.mAppMetadataFileInApk = in.readBoolean(); assignDerivedFields(); assignDerivedFields2(); Loading
core/java/com/android/internal/pm/parsing/pkg/ParsedPackage.java +3 −0 Original line number Diff line number Diff line Loading @@ -127,4 +127,7 @@ public interface ParsedPackage extends AndroidPackage { ParsedPackage setDirectBootAware(boolean directBootAware); ParsedPackage setPersistent(boolean persistent); /** Retrieves whether the apk contains a app metadata file. */ boolean isAppMetadataFileInApk(); }
core/java/com/android/internal/pm/pkg/parsing/ParsingPackage.java +3 −0 Original line number Diff line number Diff line Loading @@ -133,6 +133,9 @@ public interface ParsingPackage { @Nullable SparseArray<int[]> splitDependencies ); /** Sets whether the apk contains a app metadata file. */ ParsingPackage setAppMetadataFileInApk(boolean fileInApk); ParsingPackage setMetaData(Bundle metaData); ParsingPackage setForceQueryable(boolean forceQueryable); Loading
core/java/com/android/internal/pm/pkg/parsing/ParsingPackageUtils.java +10 −1 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.ConfigurationInfo; import android.content.pm.FeatureGroupInfo; import android.content.pm.FeatureInfo; import android.content.pm.Flags; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.Property; Loading Loading @@ -163,6 +164,8 @@ public class ParsingPackageUtils { */ public static final String ANDROID_MANIFEST_FILENAME = "AndroidManifest.xml"; public static final String APP_METADATA_FILE_NAME = "app.metadata"; /** * Path prefix for apps on expanded storage */ Loading Loading @@ -636,6 +639,11 @@ public class ParsingPackageUtils { pkg.setSigningDetails(SigningDetails.UNKNOWN); } if (Flags.aslInApkAppMetadataSource() && ArrayUtils.contains(assets.list(""), APP_METADATA_FILE_NAME)) { pkg.setAppMetadataFileInApk(true); } return input.success(pkg); } catch (Exception e) { return input.error(INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION, Loading Loading @@ -686,7 +694,8 @@ public class ParsingPackageUtils { */ private ParseResult<ParsingPackage> parseBaseApk(ParseInput input, String apkPath, String codePath, Resources res, XmlResourceParser parser, int flags, boolean shouldSkipComponents) throws XmlPullParserException, IOException { boolean shouldSkipComponents) throws XmlPullParserException, IOException { final String splitName; final String pkgName; Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +11 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.server.pm; import static android.content.pm.Flags.disallowSdkLibsToBeApps; import static android.content.pm.PackageManager.APP_METADATA_SOURCE_APK; import static android.content.pm.PackageManager.APP_METADATA_SOURCE_INSTALLER; import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED; import static android.content.pm.PackageManager.INSTALL_FAILED_ALREADY_EXISTS; Loading @@ -43,11 +45,11 @@ import static android.os.storage.StorageManager.FLAG_STORAGE_CE; import static android.os.storage.StorageManager.FLAG_STORAGE_DE; import static android.os.storage.StorageManager.FLAG_STORAGE_EXTERNAL; import static com.android.internal.pm.pkg.parsing.ParsingPackageUtils.APP_METADATA_FILE_NAME; import static com.android.server.pm.DexOptHelper.useArtService; import static com.android.server.pm.InstructionSets.getAppDexInstructionSets; import static com.android.server.pm.InstructionSets.getDexCodeInstructionSet; import static com.android.server.pm.InstructionSets.getPreferredInstructionSet; import static com.android.server.pm.PackageManagerService.APP_METADATA_FILE_NAME; import static com.android.server.pm.PackageManagerService.DEBUG_COMPRESSION; import static com.android.server.pm.PackageManagerService.DEBUG_INSTALL; import static com.android.server.pm.PackageManagerService.DEBUG_PACKAGE_SCANNING; Loading Loading @@ -2225,12 +2227,18 @@ final class InstallPackageHelper { if (appMetadataFile.exists()) { ps.setAppMetadataFilePath(appMetadataFile.getAbsolutePath()); if (Flags.aslInApkAppMetadataSource()) { ps.setAppMetadataSource(PackageManager.APP_METADATA_SOURCE_INSTALLER); ps.setAppMetadataSource(APP_METADATA_SOURCE_INSTALLER); } } else { if (Flags.aslInApkAppMetadataSource() && parsedPackage.isAppMetadataFileInApk()) { ps.setAppMetadataFilePath(appMetadataFile.getAbsolutePath()); ps.setAppMetadataSource(APP_METADATA_SOURCE_APK); } else { ps.setAppMetadataFilePath(null); } } } if (installRequest.getReturnCode() == PackageManager.INSTALL_SUCCEEDED) { // If this is an archival installation then we'll initialize the archive status, // while also marking package as not installed. Loading