blob: 92232693e7d21033962d53ab9e59cbab7ff9090c [file] [log] [blame]
Kenny Root15a4d2f2010-03-11 18:20:12 -08001/*
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
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080017package 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 /**
Jeff Sharkey6c833e02014-07-14 22:44:30 -070034 * The names of any installed split APKs for this package.
35 */
36 public String[] splitNames;
37
38 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080039 * The version number of this package, as specified by the <manifest>
40 * tag's {@link android.R.styleable#AndroidManifest_versionCode versionCode}
41 * attribute.
42 */
43 public int versionCode;
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -080044
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080045 /**
46 * The version name of this package, as specified by the <manifest>
47 * tag's {@link android.R.styleable#AndroidManifest_versionName versionName}
48 * attribute.
49 */
50 public String versionName;
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -080051
52 /**
53 * The revision number of the base APK for this package, as specified by the
54 * <manifest> tag's
55 * {@link android.R.styleable#AndroidManifest_revisionCode revisionCode}
56 * attribute.
57 */
58 public int baseRevisionCode;
59
60 /**
61 * The revision number of any split APKs for this package, as specified by
62 * the <manifest> tag's
63 * {@link android.R.styleable#AndroidManifest_revisionCode revisionCode}
64 * attribute. Indexes are a 1:1 mapping against {@link #splitNames}.
65 */
66 public int[] splitRevisionCodes;
67
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080068 /**
69 * The shared user ID name of this package, as specified by the <manifest>
70 * tag's {@link android.R.styleable#AndroidManifest_sharedUserId sharedUserId}
71 * attribute.
72 */
73 public String sharedUserId;
74
75 /**
76 * The shared user ID label of this package, as specified by the <manifest>
77 * tag's {@link android.R.styleable#AndroidManifest_sharedUserLabel sharedUserLabel}
78 * attribute.
79 */
80 public int sharedUserLabel;
81
82 /**
83 * Information collected from the <application> tag, or null if
84 * there was none.
85 */
86 public ApplicationInfo applicationInfo;
87
88 /**
Dianne Hackborn78d6883692010-10-07 01:12:46 -070089 * The time at which the app was first installed. Units are as
90 * per {@link System#currentTimeMillis()}.
91 */
92 public long firstInstallTime;
93
94 /**
95 * The time at which the app was last updated. Units are as
96 * per {@link System#currentTimeMillis()}.
97 */
98 public long lastUpdateTime;
99
100 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800101 * All kernel group-IDs that have been assigned to this package.
102 * This is only filled in if the flag {@link PackageManager#GET_GIDS} was set.
103 */
104 public int[] gids;
105
106 /**
107 * Array of all {@link android.R.styleable#AndroidManifestActivity
108 * <activity>} tags included under <application>,
109 * or null if there were none. This is only filled in if the flag
110 * {@link PackageManager#GET_ACTIVITIES} was set.
111 */
112 public ActivityInfo[] activities;
113
114 /**
115 * Array of all {@link android.R.styleable#AndroidManifestReceiver
116 * <receiver>} tags included under <application>,
117 * or null if there were none. This is only filled in if the flag
118 * {@link PackageManager#GET_RECEIVERS} was set.
119 */
120 public ActivityInfo[] receivers;
121
122 /**
123 * Array of all {@link android.R.styleable#AndroidManifestService
124 * <service>} tags included under <application>,
125 * or null if there were none. This is only filled in if the flag
126 * {@link PackageManager#GET_SERVICES} was set.
127 */
128 public ServiceInfo[] services;
129
130 /**
131 * Array of all {@link android.R.styleable#AndroidManifestProvider
132 * <provider>} tags included under <application>,
133 * or null if there were none. This is only filled in if the flag
134 * {@link PackageManager#GET_PROVIDERS} was set.
135 */
136 public ProviderInfo[] providers;
137
138 /**
139 * Array of all {@link android.R.styleable#AndroidManifestInstrumentation
140 * <instrumentation>} tags included under <manifest>,
141 * or null if there were none. This is only filled in if the flag
142 * {@link PackageManager#GET_INSTRUMENTATION} was set.
143 */
144 public InstrumentationInfo[] instrumentation;
145
146 /**
147 * Array of all {@link android.R.styleable#AndroidManifestPermission
148 * <permission>} tags included under <manifest>,
149 * or null if there were none. This is only filled in if the flag
150 * {@link PackageManager#GET_PERMISSIONS} was set.
151 */
152 public PermissionInfo[] permissions;
153
154 /**
155 * Array of all {@link android.R.styleable#AndroidManifestUsesPermission
156 * <uses-permission>} tags included under <manifest>,
157 * or null if there were none. This is only filled in if the flag
158 * {@link PackageManager#GET_PERMISSIONS} was set. This list includes
159 * all permissions requested, even those that were not granted or known
160 * by the system at install time.
161 */
162 public String[] requestedPermissions;
163
164 /**
Dianne Hackborne639da72012-02-21 15:11:13 -0800165 * Array of flags of all {@link android.R.styleable#AndroidManifestUsesPermission
166 * <uses-permission>} tags included under <manifest>,
167 * or null if there were none. This is only filled in if the flag
168 * {@link PackageManager#GET_PERMISSIONS} was set. Each value matches
169 * the corresponding entry in {@link #requestedPermissions}, and will have
170 * the flags {@link #REQUESTED_PERMISSION_REQUIRED} and
171 * {@link #REQUESTED_PERMISSION_GRANTED} set as appropriate.
172 */
173 public int[] requestedPermissionsFlags;
174
175 /**
176 * Flag for {@link #requestedPermissionsFlags}: the requested permission
177 * is required for the application to run; the user can not optionally
Nick Kralevich32eb5b182013-04-11 10:20:09 -0700178 * disable it. Currently all permissions are required.
Dianne Hackborne639da72012-02-21 15:11:13 -0800179 */
180 public static final int REQUESTED_PERMISSION_REQUIRED = 1<<0;
181
182 /**
183 * Flag for {@link #requestedPermissionsFlags}: the requested permission
184 * is currently granted to the application.
185 */
186 public static final int REQUESTED_PERMISSION_GRANTED = 1<<1;
187
188 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800189 * Array of all signatures read from the package file. This is only filled
190 * in if the flag {@link PackageManager#GET_SIGNATURES} was set.
191 */
192 public Signature[] signatures;
193
194 /**
195 * Application specified preferred configuration
196 * {@link android.R.styleable#AndroidManifestUsesConfiguration
197 * &lt;uses-configuration&gt;} tags included under &lt;manifest&gt;,
198 * or null if there were none. This is only filled in if the flag
Adam Lesinskid3edfde2014-08-08 17:32:44 -0700199 * {@link PackageManager#GET_CONFIGURATIONS} was set.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800200 */
201 public ConfigurationInfo[] configPreferences;
202
Dianne Hackborn49237342009-08-27 20:08:01 -0700203 /**
Jeff Sharkeyda96e132014-07-15 14:54:09 -0700204 * Features that this application has requested.
205 *
206 * @see FeatureInfo#FLAG_REQUIRED
Dianne Hackborn49237342009-08-27 20:08:01 -0700207 */
208 public FeatureInfo[] reqFeatures;
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800209
210 /**
Adam Lesinskid3edfde2014-08-08 17:32:44 -0700211 * Groups of features that this application has requested.
212 * Each group contains a set of features that are required.
213 * A device must match the features listed in {@link #reqFeatures} and one
214 * or more FeatureGroups in order to have satisfied the feature requirement.
215 *
216 * @see FeatureInfo#FLAG_REQUIRED
217 */
218 public FeatureGroupInfo[] featureGroups;
219
220 /**
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800221 * Constant corresponding to <code>auto</code> in
222 * the {@link android.R.attr#installLocation} attribute.
223 * @hide
224 */
Suchi Amalapurapu90d8ee62010-03-18 11:38:35 -0700225 public static final int INSTALL_LOCATION_UNSPECIFIED = -1;
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700226
Suchi Amalapurapu90d8ee62010-03-18 11:38:35 -0700227 /**
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700228 * Constant corresponding to <code>auto</code> in the
229 * {@link android.R.attr#installLocation} attribute.
Suchi Amalapurapu90d8ee62010-03-18 11:38:35 -0700230 */
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800231 public static final int INSTALL_LOCATION_AUTO = 0;
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700232
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800233 /**
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700234 * Constant corresponding to <code>internalOnly</code> in the
235 * {@link android.R.attr#installLocation} attribute.
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800236 */
237 public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1;
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700238
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800239 /**
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700240 * Constant corresponding to <code>preferExternal</code> in the
241 * {@link android.R.attr#installLocation} attribute.
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800242 */
243 public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2;
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700244
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800245 /**
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700246 * The install location requested by the package. From the
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800247 * {@link android.R.attr#installLocation} attribute, one of
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700248 * {@link #INSTALL_LOCATION_AUTO}, {@link #INSTALL_LOCATION_INTERNAL_ONLY},
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800249 * {@link #INSTALL_LOCATION_PREFER_EXTERNAL}
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800250 */
251 public int installLocation = INSTALL_LOCATION_INTERNAL_ONLY;
Amith Yamasanidf2e92a2013-03-01 17:04:38 -0800252
253 /** @hide */
Jeff Hao272bf3a2014-10-08 13:34:43 -0700254 public boolean coreApp;
255
256 /** @hide */
Amith Yamasanidf2e92a2013-03-01 17:04:38 -0800257 public boolean requiredForAllUsers;
258
Amith Yamasani0ac1fc92013-03-27 18:56:08 -0700259 /** @hide */
260 public String restrictedAccountType;
261
Amith Yamasaniccbe3892013-04-12 17:52:42 -0700262 /** @hide */
263 public String requiredAccountType;
264
Mårten Kongstad48d22322014-01-31 14:43:27 +0100265 /**
266 * What package, if any, this package will overlay.
267 *
268 * Package name of target package, or null.
269 * @hide
270 */
271 public String overlayTarget;
272
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800273 public PackageInfo() {
274 }
275
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -0800276 @Override
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800277 public String toString() {
278 return "PackageInfo{"
279 + Integer.toHexString(System.identityHashCode(this))
280 + " " + packageName + "}";
281 }
282
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -0800283 @Override
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800284 public int describeContents() {
285 return 0;
286 }
287
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -0800288 @Override
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800289 public void writeToParcel(Parcel dest, int parcelableFlags) {
290 dest.writeString(packageName);
Jeff Sharkey6c833e02014-07-14 22:44:30 -0700291 dest.writeStringArray(splitNames);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800292 dest.writeInt(versionCode);
293 dest.writeString(versionName);
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -0800294 dest.writeInt(baseRevisionCode);
295 dest.writeIntArray(splitRevisionCodes);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800296 dest.writeString(sharedUserId);
297 dest.writeInt(sharedUserLabel);
298 if (applicationInfo != null) {
299 dest.writeInt(1);
300 applicationInfo.writeToParcel(dest, parcelableFlags);
301 } else {
302 dest.writeInt(0);
303 }
Dianne Hackborn78d6883692010-10-07 01:12:46 -0700304 dest.writeLong(firstInstallTime);
305 dest.writeLong(lastUpdateTime);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800306 dest.writeIntArray(gids);
307 dest.writeTypedArray(activities, parcelableFlags);
308 dest.writeTypedArray(receivers, parcelableFlags);
309 dest.writeTypedArray(services, parcelableFlags);
310 dest.writeTypedArray(providers, parcelableFlags);
311 dest.writeTypedArray(instrumentation, parcelableFlags);
312 dest.writeTypedArray(permissions, parcelableFlags);
313 dest.writeStringArray(requestedPermissions);
Dianne Hackborne639da72012-02-21 15:11:13 -0800314 dest.writeIntArray(requestedPermissionsFlags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800315 dest.writeTypedArray(signatures, parcelableFlags);
316 dest.writeTypedArray(configPreferences, parcelableFlags);
Dianne Hackborn49237342009-08-27 20:08:01 -0700317 dest.writeTypedArray(reqFeatures, parcelableFlags);
Adam Lesinskid3edfde2014-08-08 17:32:44 -0700318 dest.writeTypedArray(featureGroups, parcelableFlags);
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800319 dest.writeInt(installLocation);
Jeff Hao272bf3a2014-10-08 13:34:43 -0700320 dest.writeInt(coreApp ? 1 : 0);
Amith Yamasanidf2e92a2013-03-01 17:04:38 -0800321 dest.writeInt(requiredForAllUsers ? 1 : 0);
Amith Yamasani0ac1fc92013-03-27 18:56:08 -0700322 dest.writeString(restrictedAccountType);
Amith Yamasaniccbe3892013-04-12 17:52:42 -0700323 dest.writeString(requiredAccountType);
Mårten Kongstad48d22322014-01-31 14:43:27 +0100324 dest.writeString(overlayTarget);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800325 }
326
327 public static final Parcelable.Creator<PackageInfo> CREATOR
328 = new Parcelable.Creator<PackageInfo>() {
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -0800329 @Override
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800330 public PackageInfo createFromParcel(Parcel source) {
331 return new PackageInfo(source);
332 }
333
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -0800334 @Override
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800335 public PackageInfo[] newArray(int size) {
336 return new PackageInfo[size];
337 }
338 };
339
340 private PackageInfo(Parcel source) {
341 packageName = source.readString();
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -0800342 splitNames = source.createStringArray();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800343 versionCode = source.readInt();
344 versionName = source.readString();
Jeff Sharkey88d2a3c2014-11-22 16:49:34 -0800345 baseRevisionCode = source.readInt();
346 splitRevisionCodes = source.createIntArray();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800347 sharedUserId = source.readString();
348 sharedUserLabel = source.readInt();
349 int hasApp = source.readInt();
350 if (hasApp != 0) {
351 applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
352 }
Dianne Hackborn78d6883692010-10-07 01:12:46 -0700353 firstInstallTime = source.readLong();
354 lastUpdateTime = source.readLong();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800355 gids = source.createIntArray();
356 activities = source.createTypedArray(ActivityInfo.CREATOR);
357 receivers = source.createTypedArray(ActivityInfo.CREATOR);
358 services = source.createTypedArray(ServiceInfo.CREATOR);
359 providers = source.createTypedArray(ProviderInfo.CREATOR);
360 instrumentation = source.createTypedArray(InstrumentationInfo.CREATOR);
361 permissions = source.createTypedArray(PermissionInfo.CREATOR);
362 requestedPermissions = source.createStringArray();
Dianne Hackborne639da72012-02-21 15:11:13 -0800363 requestedPermissionsFlags = source.createIntArray();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800364 signatures = source.createTypedArray(Signature.CREATOR);
365 configPreferences = source.createTypedArray(ConfigurationInfo.CREATOR);
Dianne Hackborn49237342009-08-27 20:08:01 -0700366 reqFeatures = source.createTypedArray(FeatureInfo.CREATOR);
Adam Lesinskid3edfde2014-08-08 17:32:44 -0700367 featureGroups = source.createTypedArray(FeatureGroupInfo.CREATOR);
Suchi Amalapurapu117818e2010-02-09 03:45:40 -0800368 installLocation = source.readInt();
Jeff Hao272bf3a2014-10-08 13:34:43 -0700369 coreApp = source.readInt() != 0;
Amith Yamasanidf2e92a2013-03-01 17:04:38 -0800370 requiredForAllUsers = source.readInt() != 0;
Amith Yamasani0ac1fc92013-03-27 18:56:08 -0700371 restrictedAccountType = source.readString();
Amith Yamasaniccbe3892013-04-12 17:52:42 -0700372 requiredAccountType = source.readString();
Mårten Kongstad48d22322014-01-31 14:43:27 +0100373 overlayTarget = source.readString();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800374 }
375}