FileDocCategorySizeDatePackage
ApplicationInfo.javaAPI DocAndroid 5.1 API34119Thu Mar 12 22:22:10 GMT 2015android.content.pm

ApplicationInfo

public class ApplicationInfo extends PackageItemInfo implements android.os.Parcelable
Information you can retrieve about a particular application. This corresponds to information collected from the AndroidManifest.xml's <application> tag.

Fields Summary
public String
taskAffinity
Default task affinity of all activities in this application. See {@link ActivityInfo#taskAffinity} for more information. This comes from the "taskAffinity" attribute.
public String
permission
Optional name of a permission required to be able to access this application's components. From the "permission" attribute.
public String
processName
The name of the process this application should run in. From the "process" attribute or, if not set, the same as packageName.
public String
className
Class implementing the Application object. From the "class" attribute.
public int
descriptionRes
A style resource identifier (in the package's resources) of the description of an application. From the "description" attribute or, if not set, 0.
public int
theme
A style resource identifier (in the package's resources) of the default visual theme of the application. From the "theme" attribute or, if not set, 0.
public String
manageSpaceActivityName
Class implementing the Application's manage space functionality. From the "manageSpaceActivity" attribute. This is an optional attribute and will be null if applications don't specify it in their manifest
public String
backupAgentName
Class implementing the Application's backup functionality. From the "backupAgent" attribute. This is an optional attribute and will be null if the application does not specify it in its manifest.

If android:allowBackup is set to false, this attribute is ignored.

public int
uiOptions
The default extra UI options for activities in this application. Set from the {@link android.R.attr#uiOptions} attribute in the activity's manifest.
public static final int
FLAG_SYSTEM
Value for {@link #flags}: if set, this application is installed in the device's system image.
public static final int
FLAG_DEBUGGABLE
Value for {@link #flags}: set to true if this application would like to allow debugging of its code, even when installed on a non-development system. Comes from {@link android.R.styleable#AndroidManifestApplication_debuggable android:debuggable} of the <application> tag.
public static final int
FLAG_HAS_CODE
Value for {@link #flags}: set to true if this application has code associated with it. Comes from {@link android.R.styleable#AndroidManifestApplication_hasCode android:hasCode} of the <application> tag.
public static final int
FLAG_PERSISTENT
Value for {@link #flags}: set to true if this application is persistent. Comes from {@link android.R.styleable#AndroidManifestApplication_persistent android:persistent} of the <application> tag.
public static final int
FLAG_FACTORY_TEST
Value for {@link #flags}: set to true if this application holds the {@link android.Manifest.permission#FACTORY_TEST} permission and the device is running in factory test mode.
public static final int
FLAG_ALLOW_TASK_REPARENTING
Value for {@link #flags}: default value for the corresponding ActivityInfo flag. Comes from {@link android.R.styleable#AndroidManifestApplication_allowTaskReparenting android:allowTaskReparenting} of the <application> tag.
public static final int
FLAG_ALLOW_CLEAR_USER_DATA
Value for {@link #flags}: default value for the corresponding ActivityInfo flag. Comes from {@link android.R.styleable#AndroidManifestApplication_allowClearUserData android:allowClearUserData} of the <application> tag.
public static final int
FLAG_UPDATED_SYSTEM_APP
Value for {@link #flags}: this is set if this application has been install as an update to a built-in system application.
public static final int
FLAG_TEST_ONLY
Value for {@link #flags}: this is set of the application has specified {@link android.R.styleable#AndroidManifestApplication_testOnly android:testOnly} to be true.
public static final int
FLAG_SUPPORTS_SMALL_SCREENS
Value for {@link #flags}: true when the application's window can be reduced in size for smaller screens. Corresponds to {@link android.R.styleable#AndroidManifestSupportsScreens_smallScreens android:smallScreens}.
public static final int
FLAG_SUPPORTS_NORMAL_SCREENS
Value for {@link #flags}: true when the application's window can be displayed on normal screens. Corresponds to {@link android.R.styleable#AndroidManifestSupportsScreens_normalScreens android:normalScreens}.
public static final int
FLAG_SUPPORTS_LARGE_SCREENS
Value for {@link #flags}: true when the application's window can be increased in size for larger screens. Corresponds to {@link android.R.styleable#AndroidManifestSupportsScreens_largeScreens android:largeScreens}.
public static final int
FLAG_RESIZEABLE_FOR_SCREENS
Value for {@link #flags}: true when the application knows how to adjust its UI for different screen sizes. Corresponds to {@link android.R.styleable#AndroidManifestSupportsScreens_resizeable android:resizeable}.
public static final int
FLAG_SUPPORTS_SCREEN_DENSITIES
Value for {@link #flags}: true when the application knows how to accomodate different screen densities. Corresponds to {@link android.R.styleable#AndroidManifestSupportsScreens_anyDensity android:anyDensity}.
public static final int
FLAG_VM_SAFE_MODE
Value for {@link #flags}: set to true if this application would like to request the VM to operate under the safe mode. Comes from {@link android.R.styleable#AndroidManifestApplication_vmSafeMode android:vmSafeMode} of the <application> tag.
public static final int
FLAG_ALLOW_BACKUP
Value for {@link #flags}: set to false if the application does not wish to permit any OS-driven backups of its data; true otherwise.

Comes from the {@link android.R.styleable#AndroidManifestApplication_allowBackup android:allowBackup} attribute of the <application> tag.

public static final int
FLAG_KILL_AFTER_RESTORE
Value for {@link #flags}: set to false if the application must be kept in memory following a full-system restore operation; true otherwise. Ordinarily, during a full system restore operation each application is shut down following execution of its agent's onRestore() method. Setting this attribute to false prevents this. Most applications will not need to set this attribute.

If {@link android.R.styleable#AndroidManifestApplication_allowBackup android:allowBackup} is set to false or no {@link android.R.styleable#AndroidManifestApplication_backupAgent android:backupAgent} is specified, this flag will be ignored.

Comes from the {@link android.R.styleable#AndroidManifestApplication_killAfterRestore android:killAfterRestore} attribute of the <application> tag.

public static final int
FLAG_RESTORE_ANY_VERSION
Value for {@link #flags}: Set to true if the application's backup agent claims to be able to handle restore data even "from the future," i.e. from versions of the application with a versionCode greater than the one currently installed on the device. Use with caution! By default this attribute is false and the Backup Manager will ensure that data from "future" versions of the application are never supplied during a restore operation.

If {@link android.R.styleable#AndroidManifestApplication_allowBackup android:allowBackup} is set to false or no {@link android.R.styleable#AndroidManifestApplication_backupAgent android:backupAgent} is specified, this flag will be ignored.

Comes from the {@link android.R.styleable#AndroidManifestApplication_restoreAnyVersion android:restoreAnyVersion} attribute of the <application> tag.

public static final int
FLAG_EXTERNAL_STORAGE
Value for {@link #flags}: Set to true if the application is currently installed on external/removable/unprotected storage. Such applications may not be available if their storage is not currently mounted. When the storage it is on is not available, it will look like the application has been uninstalled (its .apk is no longer available) but its persistent data is not removed.
public static final int
FLAG_SUPPORTS_XLARGE_SCREENS
Value for {@link #flags}: true when the application's window can be increased in size for extra large screens. Corresponds to {@link android.R.styleable#AndroidManifestSupportsScreens_xlargeScreens android:xlargeScreens}.
public static final int
FLAG_LARGE_HEAP
Value for {@link #flags}: true when the application has requested a large heap for its processes. Corresponds to {@link android.R.styleable#AndroidManifestApplication_largeHeap android:largeHeap}.
public static final int
FLAG_STOPPED
Value for {@link #flags}: true if this application's package is in the stopped state.
public static final int
FLAG_SUPPORTS_RTL
Value for {@link #flags}: true when the application is willing to support RTL (right to left). All activities will inherit this value. Set from the {@link android.R.attr#supportsRtl} attribute in the activity's manifest. Default value is false (no support for RTL).
public static final int
FLAG_INSTALLED
Value for {@link #flags}: true if the application is currently installed for the calling user.
public static final int
FLAG_IS_DATA_ONLY
Value for {@link #flags}: true if the application only has its data installed; the application package itself does not currently exist on the device.
public static final int
FLAG_IS_GAME
Value for {@link #flags}: true if the application was declared to be a game, or false if it is a non-game application.
public static final int
FLAG_FULL_BACKUP_ONLY
Value for {@link #flags}: {@code true} if the application asks that only full-data streaming backups of its data be performed even though it defines a {@link android.app.backup.BackupAgent BackupAgent}, which normally indicates that the app will manage its backed-up data via incremental key/value updates.
public static final int
FLAG_HIDDEN
Value for {@link #flags}: true if the application is hidden via restrictions and for most purposes is considered as not installed. {@hide}
public static final int
FLAG_CANT_SAVE_STATE
Value for {@link #flags}: set to true if the application has reported that it is heavy-weight, and thus can not participate in the normal application lifecycle.

Comes from the android.R.styleable#AndroidManifestApplication_cantSaveState attribute of the <application> tag. {@hide}

public static final int
FLAG_FORWARD_LOCK
Value for {@link #flags}: Set to true if the application has been installed using the forward lock option. NOTE: DO NOT CHANGE THIS VALUE! It is saved in packages.xml. {@hide}
public static final int
FLAG_PRIVILEGED
Value for {@link #flags}: set to {@code true} if the application is permitted to hold privileged permissions. {@hide}
public static final int
FLAG_MULTIARCH
Value for {@link #flags}: true if code from this application will need to be loaded into other applications' processes. On devices that support multiple instruction sets, this implies the code might be loaded into a process that's using any of the devices supported instruction sets.

The system might treat such applications specially, for eg., by extracting the application's native libraries for all supported instruction sets or by compiling the application's dex code for all supported instruction sets.

public int
flags
Flags associated with the application. Any combination of {@link #FLAG_SYSTEM}, {@link #FLAG_DEBUGGABLE}, {@link #FLAG_HAS_CODE}, {@link #FLAG_PERSISTENT}, {@link #FLAG_FACTORY_TEST}, and {@link #FLAG_ALLOW_TASK_REPARENTING} {@link #FLAG_ALLOW_CLEAR_USER_DATA}, {@link #FLAG_UPDATED_SYSTEM_APP}, {@link #FLAG_TEST_ONLY}, {@link #FLAG_SUPPORTS_SMALL_SCREENS}, {@link #FLAG_SUPPORTS_NORMAL_SCREENS}, {@link #FLAG_SUPPORTS_LARGE_SCREENS}, {@link #FLAG_SUPPORTS_XLARGE_SCREENS}, {@link #FLAG_RESIZEABLE_FOR_SCREENS}, {@link #FLAG_SUPPORTS_SCREEN_DENSITIES}, {@link #FLAG_VM_SAFE_MODE}, {@link #FLAG_INSTALLED}, {@link #FLAG_IS_GAME}.
public int
requiresSmallestWidthDp
The required smallest screen width the application can run on. If 0, nothing has been specified. Comes from {@link android.R.styleable#AndroidManifestSupportsScreens_requiresSmallestWidthDp android:requiresSmallestWidthDp} attribute of the <supports-screens> tag.
public int
compatibleWidthLimitDp
The maximum smallest screen width the application is designed for. If 0, nothing has been specified. Comes from {@link android.R.styleable#AndroidManifestSupportsScreens_compatibleWidthLimitDp android:compatibleWidthLimitDp} attribute of the <supports-screens> tag.
public int
largestWidthLimitDp
The maximum smallest screen width the application will work on. If 0, nothing has been specified. Comes from {@link android.R.styleable#AndroidManifestSupportsScreens_largestWidthLimitDp android:largestWidthLimitDp} attribute of the <supports-screens> tag.
public String
scanSourceDir
{@hide}
public String
scanPublicSourceDir
{@hide}
public String
sourceDir
Full path to the base APK for this application.
public String
publicSourceDir
Full path to the publicly available parts of {@link #sourceDir}, including resources and manifest. This may be different from {@link #sourceDir} if an application is forward locked.
public String[]
splitSourceDirs
Full paths to zero or more split APKs that, when combined with the base APK defined in {@link #sourceDir}, form a complete application.
public String[]
splitPublicSourceDirs
Full path to the publicly available parts of {@link #splitSourceDirs}, including resources and manifest. This may be different from {@link #splitSourceDirs} if an application is forward locked.
public String[]
resourceDirs
Full paths to the locations of extra resource packages this application uses. This field is only used if there are extra resource packages, otherwise it is null. {@hide}
public String
seinfo
String retrieved from the seinfo tag found in selinux policy. This value is useful in setting an SELinux security context on the process as well as its data directory. {@hide}
public String[]
sharedLibraryFiles
Paths to all shared libraries this application is linked against. This field is only set if the {@link PackageManager#GET_SHARED_LIBRARY_FILES PackageManager.GET_SHARED_LIBRARY_FILES} flag was used when retrieving the structure.
public String
dataDir
Full path to a directory assigned to the package for its persistent data.
public String
nativeLibraryDir
Full path to the directory where native JNI libraries are stored.
public String
secondaryNativeLibraryDir
Full path where unpacked native libraries for {@link #secondaryCpuAbi} are stored, if present. The main reason this exists is for bundled multi-arch apps, where it's not trivial to calculate the location of libs for the secondary abi given the location of the primary. TODO: Change the layout of bundled installs so that we can use nativeLibraryRootDir & nativeLibraryRootRequiresIsa there as well. (e.g {@code [ "/system/app-lib/Foo/arm", "/system/app-lib/Foo/arm64" ]} instead of {@code [ "/system/lib/Foo", "/system/lib64/Foo" ]}.
public String
nativeLibraryRootDir
The root path where unpacked native libraries are stored.

When {@link #nativeLibraryRootRequiresIsa} is set, the libraries are placed in ISA-specific subdirectories under this path, otherwise the libraries are placed directly at this path.

public boolean
nativeLibraryRootRequiresIsa
Flag indicating that ISA must be appended to {@link #nativeLibraryRootDir} to be useful.
public String
primaryCpuAbi
The primary ABI that this application requires, This is inferred from the ABIs of the native JNI libraries the application bundles. Will be {@code null} if this application does not require any particular ABI. If non-null, the application will always be launched with this ABI. {@hide}
public String
secondaryCpuAbi
The secondary ABI for this application. Might be non-null for multi-arch installs. The application itself never uses this ABI, but other applications that use its code might. {@hide}
public int
uid
The kernel user-ID that has been assigned to this application; currently this is not a unique ID (multiple applications can have the same uid).
public int
targetSdkVersion
The minimum SDK version this application targets. It may run on earlier versions, but it knows how to work with any new behavior added at this version. Will be {@link android.os.Build.VERSION_CODES#CUR_DEVELOPMENT} if this is a development build and the app is targeting that. You should compare that this number is >= the SDK version number at which your behavior was introduced.
public int
versionCode
The app's declared version code.
public boolean
enabled
When false, indicates that all components within this application are considered disabled, regardless of their individually set enabled status.
public int
enabledSetting
For convenient access to the current enabled setting of this app.
public int
installLocation
For convenient access to package's install location.
public static final Parcelable.Creator
CREATOR
Constructors Summary
public ApplicationInfo()

    

      
    
public ApplicationInfo(ApplicationInfo orig)

        super(orig);
        taskAffinity = orig.taskAffinity;
        permission = orig.permission;
        processName = orig.processName;
        className = orig.className;
        theme = orig.theme;
        flags = orig.flags;
        requiresSmallestWidthDp = orig.requiresSmallestWidthDp;
        compatibleWidthLimitDp = orig.compatibleWidthLimitDp;
        largestWidthLimitDp = orig.largestWidthLimitDp;
        scanSourceDir = orig.scanSourceDir;
        scanPublicSourceDir = orig.scanPublicSourceDir;
        sourceDir = orig.sourceDir;
        publicSourceDir = orig.publicSourceDir;
        splitSourceDirs = orig.splitSourceDirs;
        splitPublicSourceDirs = orig.splitPublicSourceDirs;
        nativeLibraryDir = orig.nativeLibraryDir;
        secondaryNativeLibraryDir = orig.secondaryNativeLibraryDir;
        nativeLibraryRootDir = orig.nativeLibraryRootDir;
        nativeLibraryRootRequiresIsa = orig.nativeLibraryRootRequiresIsa;
        primaryCpuAbi = orig.primaryCpuAbi;
        secondaryCpuAbi = orig.secondaryCpuAbi;
        resourceDirs = orig.resourceDirs;
        seinfo = orig.seinfo;
        sharedLibraryFiles = orig.sharedLibraryFiles;
        dataDir = orig.dataDir;
        uid = orig.uid;
        targetSdkVersion = orig.targetSdkVersion;
        versionCode = orig.versionCode;
        enabled = orig.enabled;
        enabledSetting = orig.enabledSetting;
        installLocation = orig.installLocation;
        manageSpaceActivityName = orig.manageSpaceActivityName;
        descriptionRes = orig.descriptionRes;
        uiOptions = orig.uiOptions;
        backupAgentName = orig.backupAgentName;
    
private ApplicationInfo(android.os.Parcel source)


       
        super(source);
        taskAffinity = source.readString();
        permission = source.readString();
        processName = source.readString();
        className = source.readString();
        theme = source.readInt();
        flags = source.readInt();
        requiresSmallestWidthDp = source.readInt();
        compatibleWidthLimitDp = source.readInt();
        largestWidthLimitDp = source.readInt();
        scanSourceDir = source.readString();
        scanPublicSourceDir = source.readString();
        sourceDir = source.readString();
        publicSourceDir = source.readString();
        splitSourceDirs = source.readStringArray();
        splitPublicSourceDirs = source.readStringArray();
        nativeLibraryDir = source.readString();
        secondaryNativeLibraryDir = source.readString();
        nativeLibraryRootDir = source.readString();
        nativeLibraryRootRequiresIsa = source.readInt() != 0;
        primaryCpuAbi = source.readString();
        secondaryCpuAbi = source.readString();
        resourceDirs = source.readStringArray();
        seinfo = source.readString();
        sharedLibraryFiles = source.readStringArray();
        dataDir = source.readString();
        uid = source.readInt();
        targetSdkVersion = source.readInt();
        versionCode = source.readInt();
        enabled = source.readInt() != 0;
        enabledSetting = source.readInt();
        installLocation = source.readInt();
        manageSpaceActivityName = source.readString();
        backupAgentName = source.readString();
        descriptionRes = source.readInt();
        uiOptions = source.readInt();
    
Methods Summary
public intdescribeContents()

        return 0;
    
public voiddisableCompatibilityMode()
Disable compatibility mode

hide

        flags |= (FLAG_SUPPORTS_LARGE_SCREENS | FLAG_SUPPORTS_NORMAL_SCREENS |
                FLAG_SUPPORTS_SMALL_SCREENS | FLAG_RESIZEABLE_FOR_SCREENS |
                FLAG_SUPPORTS_SCREEN_DENSITIES | FLAG_SUPPORTS_XLARGE_SCREENS);
    
public voiddump(android.util.Printer pw, java.lang.String prefix)


          
        super.dumpFront(pw, prefix);
        if (className != null) {
            pw.println(prefix + "className=" + className);
        }
        if (permission != null) {
            pw.println(prefix + "permission=" + permission);
        }
        pw.println(prefix + "processName=" + processName);
        pw.println(prefix + "taskAffinity=" + taskAffinity);
        pw.println(prefix + "uid=" + uid + " flags=0x" + Integer.toHexString(flags)
                + " theme=0x" + Integer.toHexString(theme));
        pw.println(prefix + "requiresSmallestWidthDp=" + requiresSmallestWidthDp
                + " compatibleWidthLimitDp=" + compatibleWidthLimitDp
                + " largestWidthLimitDp=" + largestWidthLimitDp);
        pw.println(prefix + "sourceDir=" + sourceDir);
        if (!Objects.equals(sourceDir, publicSourceDir)) {
            pw.println(prefix + "publicSourceDir=" + publicSourceDir);
        }
        if (!ArrayUtils.isEmpty(splitSourceDirs)) {
            pw.println(prefix + "splitSourceDirs=" + Arrays.toString(splitSourceDirs));
        }
        if (!ArrayUtils.isEmpty(splitPublicSourceDirs)
                && !Arrays.equals(splitSourceDirs, splitPublicSourceDirs)) {
            pw.println(prefix + "splitPublicSourceDirs=" + Arrays.toString(splitPublicSourceDirs));
        }
        if (resourceDirs != null) {
            pw.println(prefix + "resourceDirs=" + resourceDirs);
        }
        if (seinfo != null) {
            pw.println(prefix + "seinfo=" + seinfo);
        }
        pw.println(prefix + "dataDir=" + dataDir);
        if (sharedLibraryFiles != null) {
            pw.println(prefix + "sharedLibraryFiles=" + sharedLibraryFiles);
        }
        pw.println(prefix + "enabled=" + enabled + " targetSdkVersion=" + targetSdkVersion
                + " versionCode=" + versionCode);
        if (manageSpaceActivityName != null) {
            pw.println(prefix + "manageSpaceActivityName="+manageSpaceActivityName);
        }
        if (descriptionRes != 0) {
            pw.println(prefix + "description=0x"+Integer.toHexString(descriptionRes));
        }
        if (uiOptions != 0) {
            pw.println(prefix + "uiOptions=0x" + Integer.toHexString(uiOptions));
        }
        pw.println(prefix + "supportsRtl=" + (hasRtlSupport() ? "true" : "false"));
        super.dumpBack(pw, prefix);
    
protected android.content.pm.ApplicationInfogetApplicationInfo()

hide

        return this;
    
public java.lang.StringgetBaseCodePath()
{@hide}

 return sourceDir; 
public java.lang.StringgetBaseResourcePath()
{@hide}

 return publicSourceDir; 
public java.lang.StringgetCodePath()
{@hide}

 return scanSourceDir; 
public java.lang.StringgetResourcePath()
{@hide}

 return scanPublicSourceDir; 
public java.lang.String[]getSplitCodePaths()
{@hide}

 return splitSourceDirs; 
public java.lang.String[]getSplitResourcePaths()
{@hide}

 return splitSourceDirs; 
public booleanhasRtlSupport()

return
true if "supportsRtl" has been set to true in the AndroidManifest
hide

        return (flags & FLAG_SUPPORTS_RTL) == FLAG_SUPPORTS_RTL;
    
private booleanisPackageUnavailable(PackageManager pm)

        try {
            return pm.getPackageInfo(packageName, 0) == null;
        } catch (NameNotFoundException ex) {
            return true;
        }
    
public android.graphics.drawable.DrawableloadDefaultIcon(PackageManager pm)

hide

        if ((flags & FLAG_EXTERNAL_STORAGE) != 0
                && isPackageUnavailable(pm)) {
            return Resources.getSystem().getDrawable(
                    com.android.internal.R.drawable.sym_app_on_sd_unavailable_icon);
        }
        return pm.getDefaultActivityIcon();
    
public java.lang.CharSequenceloadDescription(PackageManager pm)
Retrieve the textual description of the application. This will call back on the given PackageManager to load the description from the application.

param
pm A PackageManager from which the label can be loaded; usually the PackageManager from which you originally retrieved this item.
return
Returns a CharSequence containing the application's description. If there is no description, null is returned.

        if (descriptionRes != 0) {
            CharSequence label = pm.getText(packageName, descriptionRes, this);
            if (label != null) {
                return label;
            }
        }
        return null;
    
public voidsetBaseCodePath(java.lang.String baseCodePath)
{@hide}

 sourceDir = baseCodePath; 
public voidsetBaseResourcePath(java.lang.String baseResourcePath)
{@hide}

 publicSourceDir = baseResourcePath; 
public voidsetCodePath(java.lang.String codePath)
{@hide}

 scanSourceDir = codePath; 
public voidsetResourcePath(java.lang.String resourcePath)
{@hide}

 scanPublicSourceDir = resourcePath; 
public voidsetSplitCodePaths(java.lang.String[] splitCodePaths)
{@hide}

 splitSourceDirs = splitCodePaths; 
public voidsetSplitResourcePaths(java.lang.String[] splitResourcePaths)
{@hide}

 splitPublicSourceDirs = splitResourcePaths; 
public java.lang.StringtoString()

        return "ApplicationInfo{"
            + Integer.toHexString(System.identityHashCode(this))
            + " " + packageName + "}";
    
public voidwriteToParcel(android.os.Parcel dest, int parcelableFlags)

        super.writeToParcel(dest, parcelableFlags);
        dest.writeString(taskAffinity);
        dest.writeString(permission);
        dest.writeString(processName);
        dest.writeString(className);
        dest.writeInt(theme);
        dest.writeInt(flags);
        dest.writeInt(requiresSmallestWidthDp);
        dest.writeInt(compatibleWidthLimitDp);
        dest.writeInt(largestWidthLimitDp);
        dest.writeString(scanSourceDir);
        dest.writeString(scanPublicSourceDir);
        dest.writeString(sourceDir);
        dest.writeString(publicSourceDir);
        dest.writeStringArray(splitSourceDirs);
        dest.writeStringArray(splitPublicSourceDirs);
        dest.writeString(nativeLibraryDir);
        dest.writeString(secondaryNativeLibraryDir);
        dest.writeString(nativeLibraryRootDir);
        dest.writeInt(nativeLibraryRootRequiresIsa ? 1 : 0);
        dest.writeString(primaryCpuAbi);
        dest.writeString(secondaryCpuAbi);
        dest.writeStringArray(resourceDirs);
        dest.writeString(seinfo);
        dest.writeStringArray(sharedLibraryFiles);
        dest.writeString(dataDir);
        dest.writeInt(uid);
        dest.writeInt(targetSdkVersion);
        dest.writeInt(versionCode);
        dest.writeInt(enabled ? 1 : 0);
        dest.writeInt(enabledSetting);
        dest.writeInt(installLocation);
        dest.writeString(manageSpaceActivityName);
        dest.writeString(backupAgentName);
        dest.writeInt(descriptionRes);
        dest.writeInt(uiOptions);