blob: 9172555bfcd3343f6a57727f71a3a0c5b7ba5b0c [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.content.pm.parsing;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.pm.PackageInfo;
import android.content.pm.VerifierInfo;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.DataClass;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Lightweight parsed details about a single package.
*
* @hide
*/
@DataClass(genConstructor = false, genConstDefs = false)
public class PackageLite {
/** Name of the package as used to identify it in the system */
private final @NonNull String mPackageName;
/**
* Path where this package was found on disk. For monolithic packages
* this is path to single base APK file; for cluster packages this is
* path to the cluster directory.
*/
private final @NonNull String mPath;
/** Path of base APK */
private final @NonNull String mBaseApkPath;
/** Paths of any split APKs, ordered by parsed splitName */
private final @Nullable String[] mSplitApkPaths;
/** Names of any split APKs, ordered by parsed splitName */
private final @Nullable String[] mSplitNames;
/** Dependencies of any split APKs, ordered by parsed splitName */
private final @Nullable String[] mUsesSplitNames;
private final @Nullable String[] mConfigForSplit;
/** Major and minor version number of this package */
private final int mVersionCodeMajor;
private final int mVersionCode;
private final int mTargetSdk;
/** Revision code of base APK */
private final int mBaseRevisionCode;
/** Revision codes of any split APKs, ordered by parsed splitName */
private final @Nullable int[] mSplitRevisionCodes;
/**
* Indicate the install location of this package
*
* @see {@link PackageInfo#INSTALL_LOCATION_AUTO}
* @see {@link PackageInfo#INSTALL_LOCATION_INTERNAL_ONLY}
* @see {@link PackageInfo#INSTALL_LOCATION_PREFER_EXTERNAL}
*/
private final int mInstallLocation;
/** Information about a package verifiers as used during package verification */
private final @NonNull VerifierInfo[] mVerifiers;
/** Indicate whether any split APKs that are features. Ordered by splitName */
private final @Nullable boolean[] mIsFeatureSplits;
/** Indicate whether each split should be load into their own Context objects */
private final boolean mIsolatedSplits;
/**
* Indicate whether this package requires at least one split (either feature or resource)
* to be present in order to function
*/
private final boolean mSplitRequired;
/** Indicate whether this app is coreApp */
private final boolean mCoreApp;
/** Indicate whether this app can be debugged */
private final boolean mDebuggable;
/** Indicate whether this app needs to be loaded into other applications' processes */
private final boolean mMultiArch;
/** Indicate whether the 32 bit version of the ABI should be used */
private final boolean mUse32bitAbi;
/** Indicate whether installer extracts native libraries */
private final boolean mExtractNativeLibs;
/** Indicate whether this app is profileable by Shell */
private final boolean mProfileableByShell;
/**
* Indicate whether this package wants to run the dex within its APK but not extracted
* or locally compiled variants.
*/
private final boolean mUseEmbeddedDex;
public PackageLite(String path, String baseApkPath, ApkLite baseApk,
String[] splitNames, boolean[] isFeatureSplits, String[] usesSplitNames,
String[] configForSplit, String[] splitApkPaths, int[] splitRevisionCodes,
int targetSdk) {
// The following paths may be different from the path in ApkLite because we
// move or rename the APK files. Use parameters to indicate the correct paths.
mPath = path;
mBaseApkPath = baseApkPath;
mPackageName = baseApk.getPackageName();
mVersionCode = baseApk.getVersionCode();
mVersionCodeMajor = baseApk.getVersionCodeMajor();
mInstallLocation = baseApk.getInstallLocation();
mVerifiers = baseApk.getVerifiers();
mBaseRevisionCode = baseApk.getRevisionCode();
mCoreApp = baseApk.isCoreApp();
mDebuggable = baseApk.isDebuggable();
mMultiArch = baseApk.isMultiArch();
mUse32bitAbi = baseApk.isUse32bitAbi();
mExtractNativeLibs = baseApk.isExtractNativeLibs();
mIsolatedSplits = baseApk.isIsolatedSplits();
mUseEmbeddedDex = baseApk.isUseEmbeddedDex();
mSplitRequired = baseApk.isSplitRequired();
mProfileableByShell = baseApk.isProfileableByShell();
mSplitNames = splitNames;
mIsFeatureSplits = isFeatureSplits;
mUsesSplitNames = usesSplitNames;
mConfigForSplit = configForSplit;
mSplitApkPaths = splitApkPaths;
mSplitRevisionCodes = splitRevisionCodes;
mTargetSdk = targetSdk;
}
/**
* Return code path to the base APK file, and split APK files if any.
*/
public List<String> getAllApkPaths() {
final ArrayList<String> paths = new ArrayList<>();
paths.add(mBaseApkPath);
if (!ArrayUtils.isEmpty(mSplitApkPaths)) {
Collections.addAll(paths, mSplitApkPaths);
}
return paths;
}
/**
* Return {@link #mVersionCode} and {@link #mVersionCodeMajor} combined together as a
* single long value. The {@link #mVersionCodeMajor} is placed in the upper 32 bits.
*/
public long getLongVersionCode() {
return PackageInfo.composeLongVersionCode(mVersionCodeMajor, mVersionCode);
}
// Code below generated by codegen v1.0.22.
//
// DO NOT MODIFY!
// CHECKSTYLE:OFF Generated code
//
// To regenerate run:
// $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/content/pm/parsing/PackageLite.java
//
// To exclude the generated code from IntelliJ auto-formatting enable (one-time):
// Settings > Editor > Code Style > Formatter Control
//@formatter:off
/**
* Name of the package as used to identify it in the system
*/
@DataClass.Generated.Member
public @NonNull String getPackageName() {
return mPackageName;
}
/**
* Path where this package was found on disk. For monolithic packages
* this is path to single base APK file; for cluster packages this is
* path to the cluster directory.
*/
@DataClass.Generated.Member
public @NonNull String getPath() {
return mPath;
}
/**
* Path of base APK
*/
@DataClass.Generated.Member
public @NonNull String getBaseApkPath() {
return mBaseApkPath;
}
/**
* Paths of any split APKs, ordered by parsed splitName
*/
@DataClass.Generated.Member
public @Nullable String[] getSplitApkPaths() {
return mSplitApkPaths;
}
/**
* Names of any split APKs, ordered by parsed splitName
*/
@DataClass.Generated.Member
public @Nullable String[] getSplitNames() {
return mSplitNames;
}
/**
* Dependencies of any split APKs, ordered by parsed splitName
*/
@DataClass.Generated.Member
public @Nullable String[] getUsesSplitNames() {
return mUsesSplitNames;
}
@DataClass.Generated.Member
public @Nullable String[] getConfigForSplit() {
return mConfigForSplit;
}
/**
* Major and minor version number of this package
*/
@DataClass.Generated.Member
public int getVersionCodeMajor() {
return mVersionCodeMajor;
}
@DataClass.Generated.Member
public int getVersionCode() {
return mVersionCode;
}
@DataClass.Generated.Member
public int getTargetSdk() {
return mTargetSdk;
}
/**
* Revision code of base APK
*/
@DataClass.Generated.Member
public int getBaseRevisionCode() {
return mBaseRevisionCode;
}
/**
* Revision codes of any split APKs, ordered by parsed splitName
*/
@DataClass.Generated.Member
public @Nullable int[] getSplitRevisionCodes() {
return mSplitRevisionCodes;
}
/**
* Indicate the install location of this package
*
* @see {@link PackageInfo#INSTALL_LOCATION_AUTO}
* @see {@link PackageInfo#INSTALL_LOCATION_INTERNAL_ONLY}
* @see {@link PackageInfo#INSTALL_LOCATION_PREFER_EXTERNAL}
*/
@DataClass.Generated.Member
public int getInstallLocation() {
return mInstallLocation;
}
/**
* Information about a package verifiers as used during package verification
*/
@DataClass.Generated.Member
public @NonNull VerifierInfo[] getVerifiers() {
return mVerifiers;
}
/**
* Indicate whether any split APKs that are features. Ordered by splitName
*/
@DataClass.Generated.Member
public @Nullable boolean[] getIsFeatureSplits() {
return mIsFeatureSplits;
}
/**
* Indicate whether each split should be load into their own Context objects
*/
@DataClass.Generated.Member
public boolean isIsolatedSplits() {
return mIsolatedSplits;
}
/**
* Indicate whether this package requires at least one split (either feature or resource)
* to be present in order to function
*/
@DataClass.Generated.Member
public boolean isSplitRequired() {
return mSplitRequired;
}
/**
* Indicate whether this app is coreApp
*/
@DataClass.Generated.Member
public boolean isCoreApp() {
return mCoreApp;
}
/**
* Indicate whether this app can be debugged
*/
@DataClass.Generated.Member
public boolean isDebuggable() {
return mDebuggable;
}
/**
* Indicate whether this app needs to be loaded into other applications' processes
*/
@DataClass.Generated.Member
public boolean isMultiArch() {
return mMultiArch;
}
/**
* Indicate whether the 32 bit version of the ABI should be used
*/
@DataClass.Generated.Member
public boolean isUse32bitAbi() {
return mUse32bitAbi;
}
/**
* Indicate whether installer extracts native libraries
*/
@DataClass.Generated.Member
public boolean isExtractNativeLibs() {
return mExtractNativeLibs;
}
/**
* Indicate whether this app is profileable by Shell
*/
@DataClass.Generated.Member
public boolean isProfileableByShell() {
return mProfileableByShell;
}
/**
* Indicate whether this package wants to run the dex within its APK but not extracted
* or locally compiled variants.
*/
@DataClass.Generated.Member
public boolean isUseEmbeddedDex() {
return mUseEmbeddedDex;
}
@DataClass.Generated(
time = 1615914120261L,
codegenVersion = "1.0.22",
sourceFile = "frameworks/base/core/java/android/content/pm/parsing/PackageLite.java",
inputSignatures = "private final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.NonNull java.lang.String mPath\nprivate final @android.annotation.NonNull java.lang.String mBaseApkPath\nprivate final @android.annotation.Nullable java.lang.String[] mSplitApkPaths\nprivate final @android.annotation.Nullable java.lang.String[] mSplitNames\nprivate final @android.annotation.Nullable java.lang.String[] mUsesSplitNames\nprivate final @android.annotation.Nullable java.lang.String[] mConfigForSplit\nprivate final int mVersionCodeMajor\nprivate final int mVersionCode\nprivate final int mTargetSdk\nprivate final int mBaseRevisionCode\nprivate final @android.annotation.Nullable int[] mSplitRevisionCodes\nprivate final int mInstallLocation\nprivate final @android.annotation.NonNull android.content.pm.VerifierInfo[] mVerifiers\nprivate final @android.annotation.Nullable boolean[] mIsFeatureSplits\nprivate final boolean mIsolatedSplits\nprivate final boolean mSplitRequired\nprivate final boolean mCoreApp\nprivate final boolean mDebuggable\nprivate final boolean mMultiArch\nprivate final boolean mUse32bitAbi\nprivate final boolean mExtractNativeLibs\nprivate final boolean mProfileableByShell\nprivate final boolean mUseEmbeddedDex\npublic java.util.List<java.lang.String> getAllApkPaths()\npublic long getLongVersionCode()\nclass PackageLite extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false, genConstDefs=false)")
@Deprecated
private void __metadata() {}
//@formatter:on
// End of generated code
}