PackageInfo.java revision 531270a4a177a9f245d328d9467c6d1adbd5354a
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 17package android.content.pm; 18 19import android.os.Parcel; 20import 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 */ 26public 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 * The time at which the app was first installed. Units are as 69 * per {@link System#currentTimeMillis()}. 70 */ 71 public long firstInstallTime; 72 73 /** 74 * The time at which the app was last updated. Units are as 75 * per {@link System#currentTimeMillis()}. 76 */ 77 public long lastUpdateTime; 78 79 /** 80 * All kernel group-IDs that have been assigned to this package. 81 * This is only filled in if the flag {@link PackageManager#GET_GIDS} was set. 82 */ 83 public int[] gids; 84 85 /** 86 * Array of all {@link android.R.styleable#AndroidManifestActivity 87 * <activity>} tags included under <application>, 88 * or null if there were none. This is only filled in if the flag 89 * {@link PackageManager#GET_ACTIVITIES} was set. 90 */ 91 public ActivityInfo[] activities; 92 93 /** 94 * Array of all {@link android.R.styleable#AndroidManifestReceiver 95 * <receiver>} tags included under <application>, 96 * or null if there were none. This is only filled in if the flag 97 * {@link PackageManager#GET_RECEIVERS} was set. 98 */ 99 public ActivityInfo[] receivers; 100 101 /** 102 * Array of all {@link android.R.styleable#AndroidManifestService 103 * <service>} tags included under <application>, 104 * or null if there were none. This is only filled in if the flag 105 * {@link PackageManager#GET_SERVICES} was set. 106 */ 107 public ServiceInfo[] services; 108 109 /** 110 * Array of all {@link android.R.styleable#AndroidManifestProvider 111 * <provider>} tags included under <application>, 112 * or null if there were none. This is only filled in if the flag 113 * {@link PackageManager#GET_PROVIDERS} was set. 114 */ 115 public ProviderInfo[] providers; 116 117 /** 118 * Array of all {@link android.R.styleable#AndroidManifestInstrumentation 119 * <instrumentation>} tags included under <manifest>, 120 * or null if there were none. This is only filled in if the flag 121 * {@link PackageManager#GET_INSTRUMENTATION} was set. 122 */ 123 public InstrumentationInfo[] instrumentation; 124 125 /** 126 * Array of all {@link android.R.styleable#AndroidManifestPermission 127 * <permission>} tags included under <manifest>, 128 * or null if there were none. This is only filled in if the flag 129 * {@link PackageManager#GET_PERMISSIONS} was set. 130 */ 131 public PermissionInfo[] permissions; 132 133 /** 134 * Array of all {@link android.R.styleable#AndroidManifestUsesPermission 135 * <uses-permission>} tags included under <manifest>, 136 * or null if there were none. This is only filled in if the flag 137 * {@link PackageManager#GET_PERMISSIONS} was set. This list includes 138 * all permissions requested, even those that were not granted or known 139 * by the system at install time. 140 */ 141 public String[] requestedPermissions; 142 143 /** 144 * Array of flags of all {@link android.R.styleable#AndroidManifestUsesPermission 145 * <uses-permission>} tags included under <manifest>, 146 * or null if there were none. This is only filled in if the flag 147 * {@link PackageManager#GET_PERMISSIONS} was set. Each value matches 148 * the corresponding entry in {@link #requestedPermissions}, and will have 149 * the flags {@link #REQUESTED_PERMISSION_REQUIRED} and 150 * {@link #REQUESTED_PERMISSION_GRANTED} set as appropriate. 151 */ 152 public int[] requestedPermissionsFlags; 153 154 /** 155 * Flag for {@link #requestedPermissionsFlags}: the requested permission 156 * is required for the application to run; the user can not optionally 157 * disable it. Currently all permissions are required. 158 */ 159 public static final int REQUESTED_PERMISSION_REQUIRED = 1<<0; 160 161 /** 162 * Flag for {@link #requestedPermissionsFlags}: the requested permission 163 * is currently granted to the application. 164 */ 165 public static final int REQUESTED_PERMISSION_GRANTED = 1<<1; 166 167 /** 168 * Array of all signatures read from the package file. This is only filled 169 * in if the flag {@link PackageManager#GET_SIGNATURES} was set. 170 */ 171 public Signature[] signatures; 172 173 /** 174 * Application specified preferred configuration 175 * {@link android.R.styleable#AndroidManifestUsesConfiguration 176 * <uses-configuration>} tags included under <manifest>, 177 * or null if there were none. This is only filled in if the flag 178 * {@link PackageManager#GET_CONFIGURATIONS} was set. 179 */ 180 public ConfigurationInfo[] configPreferences; 181 182 /** 183 * The features that this application has said it requires. 184 */ 185 public FeatureInfo[] reqFeatures; 186 187 /** 188 * Constant corresponding to <code>auto</code> in 189 * the {@link android.R.attr#installLocation} attribute. 190 * @hide 191 */ 192 public static final int INSTALL_LOCATION_UNSPECIFIED = -1; 193 /** 194 * Constant corresponding to <code>auto</code> in 195 * the {@link android.R.attr#installLocation} attribute. 196 * @hide 197 */ 198 public static final int INSTALL_LOCATION_AUTO = 0; 199 /** 200 * Constant corresponding to <code>internalOnly</code> in 201 * the {@link android.R.attr#installLocation} attribute. 202 * @hide 203 */ 204 public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1; 205 /** 206 * Constant corresponding to <code>preferExternal</code> in 207 * the {@link android.R.attr#installLocation} attribute. 208 * @hide 209 */ 210 public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2; 211 /** 212 * Flag for {@link #requiredForProfile} 213 * The application will always be installed for a restricted profile. 214 * @hide 215 */ 216 public static final int RESTRICTED_PROFILE = 1; 217 /** 218 * Flag for {@link #requiredForProfile} 219 * The application will always be installed for a managed profile. 220 * @hide 221 */ 222 public static final int MANAGED_PROFILE = 2; 223 224 /** 225 * The install location requested by the activity. From the 226 * {@link android.R.attr#installLocation} attribute, one of 227 * {@link #INSTALL_LOCATION_AUTO}, 228 * {@link #INSTALL_LOCATION_INTERNAL_ONLY}, 229 * {@link #INSTALL_LOCATION_PREFER_EXTERNAL} 230 * @hide 231 */ 232 public int installLocation = INSTALL_LOCATION_INTERNAL_ONLY; 233 234 /** 235 * Defines which profiles this app is required for. 236 * @hide 237 */ 238 public int requiredForProfile; 239 240 /** @hide */ 241 public boolean requiredForAllUsers; 242 243 /** @hide */ 244 public String restrictedAccountType; 245 246 /** @hide */ 247 public String requiredAccountType; 248 249 /** 250 * What package, if any, this package will overlay. 251 * 252 * Package name of target package, or null. 253 * @hide 254 */ 255 public String overlayTarget; 256 257 public PackageInfo() { 258 } 259 260 public String toString() { 261 return "PackageInfo{" 262 + Integer.toHexString(System.identityHashCode(this)) 263 + " " + packageName + "}"; 264 } 265 266 public int describeContents() { 267 return 0; 268 } 269 270 public void writeToParcel(Parcel dest, int parcelableFlags) { 271 dest.writeString(packageName); 272 dest.writeInt(versionCode); 273 dest.writeString(versionName); 274 dest.writeString(sharedUserId); 275 dest.writeInt(sharedUserLabel); 276 if (applicationInfo != null) { 277 dest.writeInt(1); 278 applicationInfo.writeToParcel(dest, parcelableFlags); 279 } else { 280 dest.writeInt(0); 281 } 282 dest.writeLong(firstInstallTime); 283 dest.writeLong(lastUpdateTime); 284 dest.writeIntArray(gids); 285 dest.writeTypedArray(activities, parcelableFlags); 286 dest.writeTypedArray(receivers, parcelableFlags); 287 dest.writeTypedArray(services, parcelableFlags); 288 dest.writeTypedArray(providers, parcelableFlags); 289 dest.writeTypedArray(instrumentation, parcelableFlags); 290 dest.writeTypedArray(permissions, parcelableFlags); 291 dest.writeStringArray(requestedPermissions); 292 dest.writeIntArray(requestedPermissionsFlags); 293 dest.writeTypedArray(signatures, parcelableFlags); 294 dest.writeTypedArray(configPreferences, parcelableFlags); 295 dest.writeTypedArray(reqFeatures, parcelableFlags); 296 dest.writeInt(installLocation); 297 dest.writeInt(requiredForAllUsers ? 1 : 0); 298 dest.writeInt(requiredForProfile); 299 dest.writeString(restrictedAccountType); 300 dest.writeString(requiredAccountType); 301 dest.writeString(overlayTarget); 302 } 303 304 public static final Parcelable.Creator<PackageInfo> CREATOR 305 = new Parcelable.Creator<PackageInfo>() { 306 public PackageInfo createFromParcel(Parcel source) { 307 return new PackageInfo(source); 308 } 309 310 public PackageInfo[] newArray(int size) { 311 return new PackageInfo[size]; 312 } 313 }; 314 315 private PackageInfo(Parcel source) { 316 packageName = source.readString(); 317 versionCode = source.readInt(); 318 versionName = source.readString(); 319 sharedUserId = source.readString(); 320 sharedUserLabel = source.readInt(); 321 int hasApp = source.readInt(); 322 if (hasApp != 0) { 323 applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source); 324 } 325 firstInstallTime = source.readLong(); 326 lastUpdateTime = source.readLong(); 327 gids = source.createIntArray(); 328 activities = source.createTypedArray(ActivityInfo.CREATOR); 329 receivers = source.createTypedArray(ActivityInfo.CREATOR); 330 services = source.createTypedArray(ServiceInfo.CREATOR); 331 providers = source.createTypedArray(ProviderInfo.CREATOR); 332 instrumentation = source.createTypedArray(InstrumentationInfo.CREATOR); 333 permissions = source.createTypedArray(PermissionInfo.CREATOR); 334 requestedPermissions = source.createStringArray(); 335 requestedPermissionsFlags = source.createIntArray(); 336 signatures = source.createTypedArray(Signature.CREATOR); 337 configPreferences = source.createTypedArray(ConfigurationInfo.CREATOR); 338 reqFeatures = source.createTypedArray(FeatureInfo.CREATOR); 339 installLocation = source.readInt(); 340 requiredForAllUsers = source.readInt() != 0; 341 requiredForProfile = source.readInt(); 342 restrictedAccountType = source.readString(); 343 requiredAccountType = source.readString(); 344 overlayTarget = source.readString(); 345 } 346} 347