1 /* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.content.pm; 18 19 import android.os.Parcel; 20 import android.os.Parcelable; 21 22 /** 23 * Overall information about the contents of a package. This corresponds 24 * to all of the information collected from AndroidManifest.xml. 25 */ 26 public class PackageInfo implements Parcelable { 27 /** 28 * The name of this package. From the <manifest> tag's "name" 29 * attribute. 30 */ 31 public String packageName; 32 33 /** 34 * The version number of this package, as specified by the <manifest> 35 * tag's {@link android.R.styleable#AndroidManifest_versionCode versionCode} 36 * attribute. 37 */ 38 public int versionCode; 39 40 /** 41 * The version name of this package, as specified by the <manifest> 42 * tag's {@link android.R.styleable#AndroidManifest_versionName versionName} 43 * attribute. 44 */ 45 public String versionName; 46 47 /** 48 * The shared user ID name of this package, as specified by the <manifest> 49 * tag's {@link android.R.styleable#AndroidManifest_sharedUserId sharedUserId} 50 * attribute. 51 */ 52 public String sharedUserId; 53 54 /** 55 * The shared user ID label of this package, as specified by the <manifest> 56 * tag's {@link android.R.styleable#AndroidManifest_sharedUserLabel sharedUserLabel} 57 * attribute. 58 */ 59 public int sharedUserLabel; 60 61 /** 62 * Information collected from the <application> tag, or null if 63 * there was none. 64 */ 65 public ApplicationInfo applicationInfo; 66 67 /** 68 * All kernel group-IDs that have been assigned to this package. 69 * This is only filled in if the flag {@link PackageManager#GET_GIDS} was set. 70 */ 71 public int[] gids; 72 73 /** 74 * Array of all {@link android.R.styleable#AndroidManifestActivity 75 * <activity>} tags included under <application>, 76 * or null if there were none. This is only filled in if the flag 77 * {@link PackageManager#GET_ACTIVITIES} was set. 78 */ 79 public ActivityInfo[] activities; 80 81 /** 82 * Array of all {@link android.R.styleable#AndroidManifestReceiver 83 * <receiver>} tags included under <application>, 84 * or null if there were none. This is only filled in if the flag 85 * {@link PackageManager#GET_RECEIVERS} was set. 86 */ 87 public ActivityInfo[] receivers; 88 89 /** 90 * Array of all {@link android.R.styleable#AndroidManifestService 91 * <service>} tags included under <application>, 92 * or null if there were none. This is only filled in if the flag 93 * {@link PackageManager#GET_SERVICES} was set. 94 */ 95 public ServiceInfo[] services; 96 97 /** 98 * Array of all {@link android.R.styleable#AndroidManifestProvider 99 * <provider>} tags included under <application>, 100 * or null if there were none. This is only filled in if the flag 101 * {@link PackageManager#GET_PROVIDERS} was set. 102 */ 103 public ProviderInfo[] providers; 104 105 /** 106 * Array of all {@link android.R.styleable#AndroidManifestInstrumentation 107 * <instrumentation>} tags included under <manifest>, 108 * or null if there were none. This is only filled in if the flag 109 * {@link PackageManager#GET_INSTRUMENTATION} was set. 110 */ 111 public InstrumentationInfo[] instrumentation; 112 113 /** 114 * Array of all {@link android.R.styleable#AndroidManifestPermission 115 * <permission>} tags included under <manifest>, 116 * or null if there were none. This is only filled in if the flag 117 * {@link PackageManager#GET_PERMISSIONS} was set. 118 */ 119 public PermissionInfo[] permissions; 120 121 /** 122 * Array of all {@link android.R.styleable#AndroidManifestUsesPermission 123 * <uses-permission>} tags included under <manifest>, 124 * or null if there were none. This is only filled in if the flag 125 * {@link PackageManager#GET_PERMISSIONS} was set. This list includes 126 * all permissions requested, even those that were not granted or known 127 * by the system at install time. 128 */ 129 public String[] requestedPermissions; 130 131 /** 132 * Array of all signatures read from the package file. This is only filled 133 * in if the flag {@link PackageManager#GET_SIGNATURES} was set. 134 */ 135 public Signature[] signatures; 136 137 /** 138 * Application specified preferred configuration 139 * {@link android.R.styleable#AndroidManifestUsesConfiguration 140 * <uses-configuration>} tags included under <manifest>, 141 * or null if there were none. This is only filled in if the flag 142 * {@link PackageManager#GET_CONFIGURATIONS} was set. 143 */ 144 public ConfigurationInfo[] configPreferences; 145 146 /** 147 * The features that this application has said it requires. 148 */ 149 public FeatureInfo[] reqFeatures; 150 151 /** 152 * Constant corresponding to <code>auto</code> in 153 * the {@link android.R.attr#installLocation} attribute. 154 * @hide 155 */ 156 public static final int INSTALL_LOCATION_UNSPECIFIED = -1; 157 /** 158 * Constant corresponding to <code>auto</code> in 159 * the {@link android.R.attr#installLocation} attribute. 160 * @hide 161 */ 162 public static final int INSTALL_LOCATION_AUTO = 0; 163 /** 164 * Constant corresponding to <code>internalOnly</code> in 165 * the {@link android.R.attr#installLocation} attribute. 166 * @hide 167 */ 168 public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1; 169 /** 170 * Constant corresponding to <code>preferExternal</code> in 171 * the {@link android.R.attr#installLocation} attribute. 172 * @hide 173 */ 174 public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2; 175 /** 176 * The install location requested by the activity. From the 177 * {@link android.R.attr#installLocation} attribute, one of 178 * {@link #INSTALL_LOCATION_AUTO}, 179 * {@link #INSTALL_LOCATION_INTERNAL_ONLY}, 180 * {@link #INSTALL_LOCATION_PREFER_EXTERNAL} 181 * @hide 182 */ 183 public int installLocation = INSTALL_LOCATION_INTERNAL_ONLY; 184 185 public PackageInfo() { 186 } 187 188 public String toString() { 189 return "PackageInfo{" 190 + Integer.toHexString(System.identityHashCode(this)) 191 + " " + packageName + "}"; 192 } 193 194 public int describeContents() { 195 return 0; 196 } 197 198 public void writeToParcel(Parcel dest, int parcelableFlags) { 199 dest.writeString(packageName); 200 dest.writeInt(versionCode); 201 dest.writeString(versionName); 202 dest.writeString(sharedUserId); 203 dest.writeInt(sharedUserLabel); 204 if (applicationInfo != null) { 205 dest.writeInt(1); 206 applicationInfo.writeToParcel(dest, parcelableFlags); 207 } else { 208 dest.writeInt(0); 209 } 210 dest.writeIntArray(gids); 211 dest.writeTypedArray(activities, parcelableFlags); 212 dest.writeTypedArray(receivers, parcelableFlags); 213 dest.writeTypedArray(services, parcelableFlags); 214 dest.writeTypedArray(providers, parcelableFlags); 215 dest.writeTypedArray(instrumentation, parcelableFlags); 216 dest.writeTypedArray(permissions, parcelableFlags); 217 dest.writeStringArray(requestedPermissions); 218 dest.writeTypedArray(signatures, parcelableFlags); 219 dest.writeTypedArray(configPreferences, parcelableFlags); 220 dest.writeTypedArray(reqFeatures, parcelableFlags); 221 dest.writeInt(installLocation); 222 } 223 224 public static final Parcelable.Creator<PackageInfo> CREATOR 225 = new Parcelable.Creator<PackageInfo>() { 226 public PackageInfo createFromParcel(Parcel source) { 227 return new PackageInfo(source); 228 } 229 230 public PackageInfo[] newArray(int size) { 231 return new PackageInfo[size]; 232 } 233 }; 234 235 private PackageInfo(Parcel source) { 236 packageName = source.readString(); 237 versionCode = source.readInt(); 238 versionName = source.readString(); 239 sharedUserId = source.readString(); 240 sharedUserLabel = source.readInt(); 241 int hasApp = source.readInt(); 242 if (hasApp != 0) { 243 applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source); 244 } 245 gids = source.createIntArray(); 246 activities = source.createTypedArray(ActivityInfo.CREATOR); 247 receivers = source.createTypedArray(ActivityInfo.CREATOR); 248 services = source.createTypedArray(ServiceInfo.CREATOR); 249 providers = source.createTypedArray(ProviderInfo.CREATOR); 250 instrumentation = source.createTypedArray(InstrumentationInfo.CREATOR); 251 permissions = source.createTypedArray(PermissionInfo.CREATOR); 252 requestedPermissions = source.createStringArray(); 253 signatures = source.createTypedArray(Signature.CREATOR); 254 configPreferences = source.createTypedArray(ConfigurationInfo.CREATOR); 255 reqFeatures = source.createTypedArray(FeatureInfo.CREATOR); 256 installLocation = source.readInt(); 257 } 258 } 259