public class PackageParser extends Object
Apps packaged as multiple APKs always consist of a single "base" APK (with a
null
split name) and zero or more "split" APKs (with unique split
names). Any subset of those split APKs are a valid install, as long as the
following constraints are met:
Modifier and Type | Class and Description |
---|---|
static class |
PackageParser.Activity |
static class |
PackageParser.ActivityIntentInfo |
static class |
PackageParser.ApkLite
Lightweight parsed details about a single APK file.
|
static class |
PackageParser.Component<II extends PackageParser.IntentInfo> |
static class |
PackageParser.Instrumentation |
static class |
PackageParser.IntentInfo |
static class |
PackageParser.NewPermissionInfo |
static class |
PackageParser.Package
Representation of a full package parsed from APK files on disk.
|
static class |
PackageParser.PackageLite
Lightweight parsed details about a single package.
|
static class |
PackageParser.PackageParserException |
static class |
PackageParser.Permission |
static class |
PackageParser.PermissionGroup |
static class |
PackageParser.Provider |
static class |
PackageParser.ProviderIntentInfo |
static class |
PackageParser.Service |
static class |
PackageParser.ServiceIntentInfo |
static class |
PackageParser.SplitPermissionInfo |
Modifier and Type | Field and Description |
---|---|
static int |
APK_SIGNING_UNKNOWN |
static int |
APK_SIGNING_V1 |
static int |
APK_SIGNING_V2 |
static PackageParser.NewPermissionInfo[] |
NEW_PERMISSIONS
List of new permissions that have been added since 1.0.
|
static int |
PARSE_CHATTY |
static int |
PARSE_COLLECT_CERTIFICATES |
static int |
PARSE_ENFORCE_CODE |
static int |
PARSE_EXTERNAL_STORAGE |
static int |
PARSE_FORCE_SDK |
static int |
PARSE_FORWARD_LOCK |
static int |
PARSE_IGNORE_PROCESSES |
static int |
PARSE_IS_EPHEMERAL |
static int |
PARSE_IS_PRIVILEGED |
static int |
PARSE_IS_SYSTEM |
static int |
PARSE_IS_SYSTEM_DIR |
static int |
PARSE_MUST_BE_APK |
static int |
PARSE_TRUSTED_OVERLAY |
static PackageParser.SplitPermissionInfo[] |
SPLIT_PERMISSIONS
List of permissions that have been split into more granular or dependent
permissions.
|
Constructor and Description |
---|
PackageParser() |
Modifier and Type | Method and Description |
---|---|
static void |
closeQuietly(StrictJarFile jarFile) |
static void |
collectCertificates(PackageParser.Package pkg,
int parseFlags)
Collect certificates from all the APKs described in the given package,
populating
Package#mSignatures . |
static ActivityInfo |
generateActivityInfo(ActivityInfo ai,
int flags,
PackageUserState state,
int userId) |
static ActivityInfo |
generateActivityInfo(PackageParser.Activity a,
int flags,
PackageUserState state,
int userId) |
static ApplicationInfo |
generateApplicationInfo(ApplicationInfo ai,
int flags,
PackageUserState state,
int userId) |
static ApplicationInfo |
generateApplicationInfo(PackageParser.Package p,
int flags,
PackageUserState state) |
static ApplicationInfo |
generateApplicationInfo(PackageParser.Package p,
int flags,
PackageUserState state,
int userId) |
static InstrumentationInfo |
generateInstrumentationInfo(PackageParser.Instrumentation i,
int flags) |
static PackageInfo |
generatePackageInfo(PackageParser.Package p,
int[] gids,
int flags,
long firstInstallTime,
long lastUpdateTime,
Set<String> grantedPermissions,
PackageUserState state)
Generate and return the
PackageInfo for a parsed package. |
static PackageInfo |
generatePackageInfo(PackageParser.Package p,
int[] gids,
int flags,
long firstInstallTime,
long lastUpdateTime,
Set<String> grantedPermissions,
PackageUserState state,
int userId) |
static PermissionGroupInfo |
generatePermissionGroupInfo(PackageParser.PermissionGroup pg,
int flags) |
static PermissionInfo |
generatePermissionInfo(PackageParser.Permission p,
int flags) |
static ProviderInfo |
generateProviderInfo(PackageParser.Provider p,
int flags,
PackageUserState state,
int userId) |
static ServiceInfo |
generateServiceInfo(PackageParser.Service s,
int flags,
PackageUserState state,
int userId) |
static int |
getApkSigningVersion(PackageParser.Package pkg) |
static boolean |
isApkFile(File file) |
static boolean |
isAvailable(PackageUserState state) |
static PackageParser.ApkLite |
parseApkLite(File apkFile,
int flags)
Utility method that retrieves lightweight details about a single APK
file, including package name, split name, and install location.
|
PackageParser.Package |
parseMonolithicPackage(File apkFile,
int flags)
Deprecated.
external callers should move to
parsePackage(File, int) . Eventually this method will
be marked private. |
PackageParser.Package |
parsePackage(File packageFile,
int flags)
Parse the package at the given location.
|
static PackageParser.PackageLite |
parsePackageLite(File packageFile,
int flags)
Parse only lightweight details about the package at the given location.
|
static PublicKey |
parsePublicKey(String encodedPublicKey) |
static void |
populateCertificates(PackageParser.Package pkg,
Certificate[][] certificates)
Populates the correct packages fields with the given certificates.
|
static long |
readFullyIgnoringContents(InputStream in) |
static void |
setCompatibilityModeEnabled(boolean compatibilityModeEnabled) |
void |
setDisplayMetrics(DisplayMetrics metrics) |
void |
setOnlyCoreApps(boolean onlyCoreApps)
Flag indicating this parser should only consider apps with
coreApp manifest attribute to be valid apps. |
void |
setSeparateProcesses(String[] procs) |
static Signature |
stringToSignature(String str)
Temporary.
|
public static final int APK_SIGNING_UNKNOWN
public static final int APK_SIGNING_V1
public static final int APK_SIGNING_V2
public static final PackageParser.NewPermissionInfo[] NEW_PERMISSIONS
public static final PackageParser.SplitPermissionInfo[] SPLIT_PERMISSIONS
public static final int PARSE_IS_SYSTEM
public static final int PARSE_CHATTY
public static final int PARSE_MUST_BE_APK
public static final int PARSE_IGNORE_PROCESSES
public static final int PARSE_FORWARD_LOCK
public static final int PARSE_EXTERNAL_STORAGE
public static final int PARSE_IS_SYSTEM_DIR
public static final int PARSE_IS_PRIVILEGED
public static final int PARSE_COLLECT_CERTIFICATES
public static final int PARSE_TRUSTED_OVERLAY
public static final int PARSE_ENFORCE_CODE
public static final int PARSE_IS_EPHEMERAL
public static final int PARSE_FORCE_SDK
public void setSeparateProcesses(String[] procs)
public void setOnlyCoreApps(boolean onlyCoreApps)
coreApp
manifest attribute to be valid apps. This is useful when
creating a minimalist boot environment.public void setDisplayMetrics(DisplayMetrics metrics)
public static final boolean isApkFile(File file)
public static PackageInfo generatePackageInfo(PackageParser.Package p, int[] gids, int flags, long firstInstallTime, long lastUpdateTime, Set<String> grantedPermissions, PackageUserState state)
PackageInfo
for a parsed package.p
- the parsed package.flags
- indicating which optional information is included.public static boolean isAvailable(PackageUserState state)
public static PackageInfo generatePackageInfo(PackageParser.Package p, int[] gids, int flags, long firstInstallTime, long lastUpdateTime, Set<String> grantedPermissions, PackageUserState state, int userId)
public static PackageParser.PackageLite parsePackageLite(File packageFile, int flags) throws PackageParser.PackageParserException
This performs sanity checking on cluster style packages, such as requiring identical package name and version codes, a single base APK, and unique split names.
PackageParser.PackageParserException
parsePackage(File, int)
public PackageParser.Package parsePackage(File packageFile, int flags) throws PackageParser.PackageParserException
This performs sanity checking on cluster style packages, such as requiring identical package name and version codes, a single base APK, and unique split names.
Note that this does not perform signature verification; that
must be done separately in collectCertificates(Package, int)
.
PackageParser.PackageParserException
parsePackageLite(File, int)
@Deprecated public PackageParser.Package parseMonolithicPackage(File apkFile, int flags) throws PackageParser.PackageParserException
parsePackage(File, int)
. Eventually this method will
be marked private.
Note that this does not perform signature verification; that
must be done separately in collectCertificates(Package, int)
.
public static int getApkSigningVersion(PackageParser.Package pkg)
public static void populateCertificates(PackageParser.Package pkg, Certificate[][] certificates) throws PackageParser.PackageParserException
This is useful when we've already processed the certificates [such as during package installation through an installer session]. We don't re-process the archive and simply populate the correct fields.
public static void collectCertificates(PackageParser.Package pkg, int parseFlags) throws PackageParser.PackageParserException
Package#mSignatures
. Also asserts that all APK
contents are signed correctly and consistently.public static PackageParser.ApkLite parseApkLite(File apkFile, int flags) throws PackageParser.PackageParserException
apkFile
- path to a single APKflags
- optional parse flags, such as
PARSE_COLLECT_CERTIFICATES
PackageParser.PackageParserException
public static ApplicationInfo generateApplicationInfo(PackageParser.Package p, int flags, PackageUserState state)
public static ApplicationInfo generateApplicationInfo(PackageParser.Package p, int flags, PackageUserState state, int userId)
public static ApplicationInfo generateApplicationInfo(ApplicationInfo ai, int flags, PackageUserState state, int userId)
public static final PermissionInfo generatePermissionInfo(PackageParser.Permission p, int flags)
public static final PermissionGroupInfo generatePermissionGroupInfo(PackageParser.PermissionGroup pg, int flags)
public static final ActivityInfo generateActivityInfo(PackageParser.Activity a, int flags, PackageUserState state, int userId)
public static final ActivityInfo generateActivityInfo(ActivityInfo ai, int flags, PackageUserState state, int userId)
public static final ServiceInfo generateServiceInfo(PackageParser.Service s, int flags, PackageUserState state, int userId)
public static final ProviderInfo generateProviderInfo(PackageParser.Provider p, int flags, PackageUserState state, int userId)
public static final InstrumentationInfo generateInstrumentationInfo(PackageParser.Instrumentation i, int flags)
public static void setCompatibilityModeEnabled(boolean compatibilityModeEnabled)
public static long readFullyIgnoringContents(InputStream in) throws IOException
IOException
public static void closeQuietly(StrictJarFile jarFile)