1 /* 2 * Copyright (C) 2020 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 com.android.server.pm.parsing.pkg; 18 19 import android.annotation.NonNull; 20 import android.annotation.Nullable; 21 import android.content.pm.ActivityInfo; 22 import android.content.pm.ApplicationInfo; 23 import android.content.pm.PackageInfo; 24 import android.content.pm.PackageParser; 25 import android.content.pm.parsing.ParsingPackage; 26 import android.content.pm.parsing.ParsingPackageImpl; 27 import android.content.pm.parsing.component.ParsedActivity; 28 import android.content.pm.parsing.component.ParsedProvider; 29 import android.content.pm.parsing.component.ParsedService; 30 import android.content.res.TypedArray; 31 import android.os.Parcel; 32 import android.os.storage.StorageManager; 33 import android.text.TextUtils; 34 35 import com.android.internal.annotations.VisibleForTesting; 36 import com.android.internal.util.CollectionUtils; 37 import com.android.internal.util.DataClass; 38 import com.android.internal.util.Parcelling.BuiltIn.ForInternedString; 39 import com.android.server.pm.parsing.PackageInfoUtils; 40 41 import java.util.UUID; 42 43 /** 44 * Extensions to {@link ParsingPackageImpl} including fields/state contained in the system server 45 * and not exposed to the core SDK. 46 * 47 * Many of the fields contained here will eventually be moved inside 48 * {@link com.android.server.pm.PackageSetting} or {@link android.content.pm.PackageUserState}. 49 * 50 * @hide 51 */ 52 public final class PackageImpl extends ParsingPackageImpl implements ParsedPackage, AndroidPackage { 53 forParsing(@onNull String packageName, @NonNull String baseCodePath, @NonNull String codePath, @NonNull TypedArray manifestArray, boolean isCoreApp)54 public static PackageImpl forParsing(@NonNull String packageName, @NonNull String baseCodePath, 55 @NonNull String codePath, @NonNull TypedArray manifestArray, boolean isCoreApp) { 56 return new PackageImpl(packageName, baseCodePath, codePath, manifestArray, isCoreApp); 57 } 58 59 /** 60 * Mock an unavailable {@link AndroidPackage} to use when 61 * removing 62 * a package from the system. 63 * This can occur if the package was installed on a storage device that has since been removed. 64 * Since the infrastructure uses {@link AndroidPackage}, but 65 * for 66 * this case only cares about 67 * volumeUuid, just fake it rather than having separate method paths. 68 */ buildFakeForDeletion(String packageName, String volumeUuid)69 public static AndroidPackage buildFakeForDeletion(String packageName, String volumeUuid) { 70 return ((ParsedPackage) PackageImpl.forTesting(packageName) 71 .setVolumeUuid(volumeUuid) 72 .hideAsParsed()) 73 .hideAsFinal(); 74 } 75 76 @VisibleForTesting forTesting(String packageName)77 public static ParsingPackage forTesting(String packageName) { 78 return forTesting(packageName, ""); 79 } 80 81 @VisibleForTesting forTesting(String packageName, String baseCodePath)82 public static ParsingPackage forTesting(String packageName, String baseCodePath) { 83 return new PackageImpl(packageName, baseCodePath, baseCodePath, null, false); 84 } 85 86 @NonNull 87 @DataClass.ParcelWith(ForInternedString.class) 88 private final String manifestPackageName; 89 90 private boolean stub; 91 92 @Nullable 93 @DataClass.ParcelWith(ForInternedString.class) 94 protected String nativeLibraryDir; 95 96 @Nullable 97 @DataClass.ParcelWith(ForInternedString.class) 98 protected String nativeLibraryRootDir; 99 100 private boolean nativeLibraryRootRequiresIsa; 101 102 @Nullable 103 @DataClass.ParcelWith(ForInternedString.class) 104 protected String primaryCpuAbi; 105 @Nullable 106 @DataClass.ParcelWith(ForInternedString.class) 107 protected String secondaryCpuAbi; 108 @Nullable 109 @DataClass.ParcelWith(ForInternedString.class) 110 protected String secondaryNativeLibraryDir; 111 112 @Nullable 113 @DataClass.ParcelWith(ForInternedString.class) 114 protected String seInfo; 115 @Nullable 116 @DataClass.ParcelWith(ForInternedString.class) 117 protected String seInfoUser; 118 119 private boolean coreApp; 120 121 private boolean system; 122 private boolean factoryTest; 123 124 private boolean systemExt; 125 private boolean privileged; 126 private boolean oem; 127 private boolean vendor; 128 private boolean product; 129 private boolean odm; 130 131 private boolean signedWithPlatformKey; 132 133 /** 134 * This is an appId, the uid if the userId is == USER_SYSTEM 135 */ 136 private int uid = -1; 137 138 @VisibleForTesting PackageImpl(@onNull String packageName, @NonNull String baseCodePath, @NonNull String codePath, @Nullable TypedArray manifestArray, boolean isCoreApp)139 public PackageImpl(@NonNull String packageName, @NonNull String baseCodePath, 140 @NonNull String codePath, @Nullable TypedArray manifestArray, boolean isCoreApp) { 141 super(packageName, baseCodePath, codePath, manifestArray); 142 this.manifestPackageName = this.packageName; 143 this.coreApp = isCoreApp; 144 } 145 146 @Override hideAsParsed()147 public ParsedPackage hideAsParsed() { 148 return this; 149 } 150 151 @Override hideAsFinal()152 public AndroidPackage hideAsFinal() { 153 // TODO(b/135203078): Lock as immutable 154 return this; 155 } 156 157 @Override getLongVersionCode()158 public long getLongVersionCode() { 159 return PackageInfo.composeLongVersionCode(versionCodeMajor, versionCode); 160 } 161 162 @Override removePermission(int index)163 public PackageImpl removePermission(int index) { 164 this.permissions.remove(index); 165 return this; 166 } 167 168 @Override addUsesOptionalLibrary(int index, String libraryName)169 public PackageImpl addUsesOptionalLibrary(int index, String libraryName) { 170 this.usesOptionalLibraries = CollectionUtils.add(usesOptionalLibraries, index, 171 TextUtils.safeIntern(libraryName)); 172 return this; 173 } 174 175 @Override addUsesLibrary(int index, String libraryName)176 public PackageImpl addUsesLibrary(int index, String libraryName) { 177 this.usesLibraries = CollectionUtils.add(usesLibraries, index, 178 TextUtils.safeIntern(libraryName)); 179 return this; 180 } 181 182 @Override removeUsesLibrary(String libraryName)183 public PackageImpl removeUsesLibrary(String libraryName) { 184 this.usesLibraries = CollectionUtils.remove(this.usesLibraries, libraryName); 185 return this; 186 } 187 188 @Override removeUsesOptionalLibrary(String libraryName)189 public PackageImpl removeUsesOptionalLibrary(String libraryName) { 190 super.removeUsesOptionalLibrary(libraryName); 191 return this; 192 } 193 194 @Override setSigningDetails(@ullable PackageParser.SigningDetails value)195 public PackageImpl setSigningDetails(@Nullable PackageParser.SigningDetails value) { 196 super.setSigningDetails(value); 197 return this; 198 } 199 200 @Override setRestrictUpdateHash(@ullable byte... value)201 public PackageImpl setRestrictUpdateHash(@Nullable byte... value) { 202 super.setRestrictUpdateHash(value); 203 return this; 204 } 205 206 @Override setRealPackage(@ullable String realPackage)207 public PackageImpl setRealPackage(@Nullable String realPackage) { 208 super.setRealPackage(realPackage); 209 return this; 210 } 211 212 @Override setPersistent(boolean value)213 public PackageImpl setPersistent(boolean value) { 214 super.setPersistent(value); 215 return this; 216 } 217 218 @Override setDefaultToDeviceProtectedStorage(boolean value)219 public PackageImpl setDefaultToDeviceProtectedStorage(boolean value) { 220 super.setDefaultToDeviceProtectedStorage(value); 221 return this; 222 } 223 224 @Override setDirectBootAware(boolean value)225 public PackageImpl setDirectBootAware(boolean value) { 226 super.setDirectBootAware(value); 227 return this; 228 } 229 230 @Override clearProtectedBroadcasts()231 public PackageImpl clearProtectedBroadcasts() { 232 protectedBroadcasts.clear(); 233 return this; 234 } 235 236 @Override clearOriginalPackages()237 public PackageImpl clearOriginalPackages() { 238 originalPackages.clear(); 239 return this; 240 } 241 242 @Override clearAdoptPermissions()243 public PackageImpl clearAdoptPermissions() { 244 adoptPermissions.clear(); 245 return this; 246 } 247 248 @Override setCodePath(@onNull String value)249 public PackageImpl setCodePath(@NonNull String value) { 250 this.codePath = value; 251 return this; 252 } 253 254 // TODO(b/135203078): Move PackageManagerService#renameStaticSharedLibraryPackage 255 // into initial package parsing 256 @Override setPackageName(@onNull String packageName)257 public PackageImpl setPackageName(@NonNull String packageName) { 258 this.packageName = TextUtils.safeIntern(packageName); 259 260 int permissionsSize = permissions.size(); 261 for (int index = 0; index < permissionsSize; index++) { 262 permissions.get(index).setPackageName(this.packageName); 263 } 264 265 int permissionGroupsSize = permissionGroups.size(); 266 for (int index = 0; index < permissionGroupsSize; index++) { 267 permissionGroups.get(index).setPackageName(this.packageName); 268 } 269 270 int activitiesSize = activities.size(); 271 for (int index = 0; index < activitiesSize; index++) { 272 activities.get(index).setPackageName(this.packageName); 273 } 274 275 int receiversSize = receivers.size(); 276 for (int index = 0; index < receiversSize; index++) { 277 receivers.get(index).setPackageName(this.packageName); 278 } 279 280 int providersSize = providers.size(); 281 for (int index = 0; index < providersSize; index++) { 282 providers.get(index).setPackageName(this.packageName); 283 } 284 285 int servicesSize = services.size(); 286 for (int index = 0; index < servicesSize; index++) { 287 services.get(index).setPackageName(this.packageName); 288 } 289 290 int instrumentationsSize = instrumentations.size(); 291 for (int index = 0; index < instrumentationsSize; index++) { 292 instrumentations.get(index).setPackageName(this.packageName); 293 } 294 295 return this; 296 } 297 298 @Override setAllComponentsDirectBootAware(boolean allComponentsDirectBootAware)299 public PackageImpl setAllComponentsDirectBootAware(boolean allComponentsDirectBootAware) { 300 int activitiesSize = activities.size(); 301 for (int index = 0; index < activitiesSize; index++) { 302 activities.get(index).setDirectBootAware(allComponentsDirectBootAware); 303 } 304 305 int receiversSize = receivers.size(); 306 for (int index = 0; index < receiversSize; index++) { 307 receivers.get(index).setDirectBootAware(allComponentsDirectBootAware); 308 } 309 310 int providersSize = providers.size(); 311 for (int index = 0; index < providersSize; index++) { 312 providers.get(index).setDirectBootAware(allComponentsDirectBootAware); 313 } 314 315 int servicesSize = services.size(); 316 for (int index = 0; index < servicesSize; index++) { 317 services.get(index).setDirectBootAware(allComponentsDirectBootAware); 318 } 319 320 return this; 321 } 322 323 @Override setBaseCodePath(@onNull String baseCodePath)324 public PackageImpl setBaseCodePath(@NonNull String baseCodePath) { 325 this.baseCodePath = TextUtils.safeIntern(baseCodePath); 326 return this; 327 } 328 329 @Override setNativeLibraryDir(@ullable String nativeLibraryDir)330 public PackageImpl setNativeLibraryDir(@Nullable String nativeLibraryDir) { 331 this.nativeLibraryDir = TextUtils.safeIntern(nativeLibraryDir); 332 return this; 333 } 334 335 @Override setNativeLibraryRootDir(@ullable String nativeLibraryRootDir)336 public PackageImpl setNativeLibraryRootDir(@Nullable String nativeLibraryRootDir) { 337 this.nativeLibraryRootDir = TextUtils.safeIntern(nativeLibraryRootDir); 338 return this; 339 } 340 341 @Override setPrimaryCpuAbi(@ullable String primaryCpuAbi)342 public PackageImpl setPrimaryCpuAbi(@Nullable String primaryCpuAbi) { 343 this.primaryCpuAbi = TextUtils.safeIntern(primaryCpuAbi); 344 return this; 345 } 346 347 @Override setSecondaryCpuAbi(@ullable String secondaryCpuAbi)348 public PackageImpl setSecondaryCpuAbi(@Nullable String secondaryCpuAbi) { 349 this.secondaryCpuAbi = TextUtils.safeIntern(secondaryCpuAbi); 350 return this; 351 } 352 353 @Override setSecondaryNativeLibraryDir(@ullable String secondaryNativeLibraryDir)354 public PackageImpl setSecondaryNativeLibraryDir(@Nullable String secondaryNativeLibraryDir) { 355 this.secondaryNativeLibraryDir = TextUtils.safeIntern(secondaryNativeLibraryDir); 356 return this; 357 } 358 359 @Override setSeInfo(@ullable String seInfo)360 public PackageImpl setSeInfo(@Nullable String seInfo) { 361 this.seInfo = TextUtils.safeIntern(seInfo); 362 return this; 363 } 364 365 @Override setSeInfoUser(@ullable String seInfoUser)366 public PackageImpl setSeInfoUser(@Nullable String seInfoUser) { 367 this.seInfoUser = TextUtils.safeIntern(seInfoUser); 368 return this; 369 } 370 371 @Override setSplitCodePaths(@ullable String[] splitCodePaths)372 public PackageImpl setSplitCodePaths(@Nullable String[] splitCodePaths) { 373 this.splitCodePaths = splitCodePaths; 374 if (splitCodePaths != null) { 375 int size = splitCodePaths.length; 376 for (int index = 0; index < size; index++) { 377 this.splitCodePaths[index] = TextUtils.safeIntern(this.splitCodePaths[index]); 378 } 379 } 380 return this; 381 } 382 383 @Override capPermissionPriorities()384 public PackageImpl capPermissionPriorities() { 385 int size = permissionGroups.size(); 386 for (int index = size - 1; index >= 0; --index) { 387 // TODO(b/135203078): Builder/immutability 388 permissionGroups.get(index).setPriority(0); 389 } 390 return this; 391 } 392 393 @Override markNotActivitiesAsNotExportedIfSingleUser()394 public PackageImpl markNotActivitiesAsNotExportedIfSingleUser() { 395 // ignore export request for single user receivers 396 int receiversSize = receivers.size(); 397 for (int index = 0; index < receiversSize; index++) { 398 ParsedActivity receiver = receivers.get(index); 399 if ((receiver.getFlags() & ActivityInfo.FLAG_SINGLE_USER) != 0) { 400 receiver.setExported(false); 401 } 402 } 403 404 // ignore export request for single user services 405 int servicesSize = services.size(); 406 for (int index = 0; index < servicesSize; index++) { 407 ParsedService service = services.get(index); 408 if ((service.getFlags() & ActivityInfo.FLAG_SINGLE_USER) != 0) { 409 service.setExported(false); 410 } 411 } 412 413 // ignore export request for single user providers 414 int providersSize = providers.size(); 415 for (int index = 0; index < providersSize; index++) { 416 ParsedProvider provider = providers.get(index); 417 if ((provider.getFlags() & ActivityInfo.FLAG_SINGLE_USER) != 0) { 418 provider.setExported(false); 419 } 420 } 421 422 return this; 423 } 424 425 @Override getStorageUuid()426 public UUID getStorageUuid() { 427 return StorageManager.convert(volumeUuid); 428 } 429 430 @Deprecated 431 @Override toAppInfoToString()432 public String toAppInfoToString() { 433 return "ApplicationInfo{" 434 + Integer.toHexString(System.identityHashCode(this)) 435 + " " + getPackageName() + "}"; 436 } 437 438 @Override setCoreApp(boolean coreApp)439 public ParsedPackage setCoreApp(boolean coreApp) { 440 this.coreApp = coreApp; 441 return this; 442 } 443 444 @Override setVersionCode(int versionCode)445 public ParsedPackage setVersionCode(int versionCode) { 446 this.versionCode = versionCode; 447 return this; 448 } 449 450 @Override setVersionCodeMajor(int versionCodeMajor)451 public ParsedPackage setVersionCodeMajor(int versionCodeMajor) { 452 this.versionCodeMajor = versionCodeMajor; 453 return this; 454 } 455 456 @Override toAppInfoWithoutState()457 public ApplicationInfo toAppInfoWithoutState() { 458 ApplicationInfo appInfo = super.toAppInfoWithoutStateWithoutFlags(); 459 appInfo.flags = PackageInfoUtils.appInfoFlags(this, null); 460 appInfo.privateFlags = PackageInfoUtils.appInfoPrivateFlags(this, null); 461 appInfo.nativeLibraryDir = nativeLibraryDir; 462 appInfo.nativeLibraryRootDir = nativeLibraryRootDir; 463 appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa; 464 appInfo.primaryCpuAbi = primaryCpuAbi; 465 appInfo.secondaryCpuAbi = secondaryCpuAbi; 466 appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir; 467 appInfo.seInfo = seInfo; 468 appInfo.seInfoUser = seInfoUser; 469 appInfo.uid = uid; 470 return appInfo; 471 } 472 473 @Override describeContents()474 public int describeContents() { 475 return 0; 476 } 477 478 @Override writeToParcel(Parcel dest, int flags)479 public void writeToParcel(Parcel dest, int flags) { 480 super.writeToParcel(dest, flags); 481 sForInternedString.parcel(this.manifestPackageName, dest, flags); 482 dest.writeBoolean(this.stub); 483 dest.writeString(this.nativeLibraryDir); 484 dest.writeString(this.nativeLibraryRootDir); 485 dest.writeBoolean(this.nativeLibraryRootRequiresIsa); 486 sForInternedString.parcel(this.primaryCpuAbi, dest, flags); 487 sForInternedString.parcel(this.secondaryCpuAbi, dest, flags); 488 dest.writeString(this.secondaryNativeLibraryDir); 489 dest.writeString(this.seInfo); 490 dest.writeString(this.seInfoUser); 491 dest.writeInt(this.uid); 492 dest.writeBoolean(this.coreApp); 493 dest.writeBoolean(this.system); 494 dest.writeBoolean(this.factoryTest); 495 dest.writeBoolean(this.systemExt); 496 dest.writeBoolean(this.privileged); 497 dest.writeBoolean(this.oem); 498 dest.writeBoolean(this.vendor); 499 dest.writeBoolean(this.product); 500 dest.writeBoolean(this.odm); 501 dest.writeBoolean(this.signedWithPlatformKey); 502 } 503 PackageImpl(Parcel in)504 public PackageImpl(Parcel in) { 505 super(in); 506 this.manifestPackageName = sForInternedString.unparcel(in); 507 this.stub = in.readBoolean(); 508 this.nativeLibraryDir = in.readString(); 509 this.nativeLibraryRootDir = in.readString(); 510 this.nativeLibraryRootRequiresIsa = in.readBoolean(); 511 this.primaryCpuAbi = sForInternedString.unparcel(in); 512 this.secondaryCpuAbi = sForInternedString.unparcel(in); 513 this.secondaryNativeLibraryDir = in.readString(); 514 this.seInfo = in.readString(); 515 this.seInfoUser = in.readString(); 516 this.uid = in.readInt(); 517 this.coreApp = in.readBoolean(); 518 this.system = in.readBoolean(); 519 this.factoryTest = in.readBoolean(); 520 this.systemExt = in.readBoolean(); 521 this.privileged = in.readBoolean(); 522 this.oem = in.readBoolean(); 523 this.vendor = in.readBoolean(); 524 this.product = in.readBoolean(); 525 this.odm = in.readBoolean(); 526 this.signedWithPlatformKey = in.readBoolean(); 527 } 528 529 public static final Creator<PackageImpl> CREATOR = new Creator<PackageImpl>() { 530 @Override 531 public PackageImpl createFromParcel(Parcel source) { 532 return new PackageImpl(source); 533 } 534 535 @Override 536 public PackageImpl[] newArray(int size) { 537 return new PackageImpl[size]; 538 } 539 }; 540 541 @NonNull 542 @Override getManifestPackageName()543 public String getManifestPackageName() { 544 return manifestPackageName; 545 } 546 547 @DataClass.Generated.Member isStub()548 public boolean isStub() { 549 return stub; 550 } 551 552 @Nullable 553 @Override getNativeLibraryDir()554 public String getNativeLibraryDir() { 555 return nativeLibraryDir; 556 } 557 558 @Nullable 559 @Override getNativeLibraryRootDir()560 public String getNativeLibraryRootDir() { 561 return nativeLibraryRootDir; 562 } 563 564 @Override isNativeLibraryRootRequiresIsa()565 public boolean isNativeLibraryRootRequiresIsa() { 566 return nativeLibraryRootRequiresIsa; 567 } 568 569 @Nullable 570 @Override getPrimaryCpuAbi()571 public String getPrimaryCpuAbi() { 572 return primaryCpuAbi; 573 } 574 575 @Nullable 576 @Override getSecondaryCpuAbi()577 public String getSecondaryCpuAbi() { 578 return secondaryCpuAbi; 579 } 580 581 @Nullable 582 @Override getSecondaryNativeLibraryDir()583 public String getSecondaryNativeLibraryDir() { 584 return secondaryNativeLibraryDir; 585 } 586 587 @Nullable 588 @Override getSeInfo()589 public String getSeInfo() { 590 return seInfo; 591 } 592 593 @Nullable 594 @Override getSeInfoUser()595 public String getSeInfoUser() { 596 return seInfoUser; 597 } 598 599 @Override isCoreApp()600 public boolean isCoreApp() { 601 return coreApp; 602 } 603 604 @Override isSystem()605 public boolean isSystem() { 606 return system; 607 } 608 609 @Override isFactoryTest()610 public boolean isFactoryTest() { 611 return factoryTest; 612 } 613 614 @Override isSystemExt()615 public boolean isSystemExt() { 616 return systemExt; 617 } 618 619 @Override isPrivileged()620 public boolean isPrivileged() { 621 return privileged; 622 } 623 624 @Override isOem()625 public boolean isOem() { 626 return oem; 627 } 628 629 @Override isVendor()630 public boolean isVendor() { 631 return vendor; 632 } 633 634 @Override isProduct()635 public boolean isProduct() { 636 return product; 637 } 638 639 @Override isOdm()640 public boolean isOdm() { 641 return odm; 642 } 643 644 @Override isSignedWithPlatformKey()645 public boolean isSignedWithPlatformKey() { 646 return signedWithPlatformKey; 647 } 648 649 /** 650 * This is an appId, the uid if the userId is == USER_SYSTEM 651 */ 652 @Override getUid()653 public int getUid() { 654 return uid; 655 } 656 657 @DataClass.Generated.Member setStub(boolean value)658 public PackageImpl setStub(boolean value) { 659 stub = value; 660 return this; 661 } 662 663 @Override setNativeLibraryRootRequiresIsa(boolean value)664 public PackageImpl setNativeLibraryRootRequiresIsa(boolean value) { 665 nativeLibraryRootRequiresIsa = value; 666 return this; 667 } 668 669 @Override setSystem(boolean value)670 public PackageImpl setSystem(boolean value) { 671 system = value; 672 return this; 673 } 674 675 @Override setFactoryTest(boolean value)676 public PackageImpl setFactoryTest(boolean value) { 677 factoryTest = value; 678 return this; 679 } 680 681 @Override setSystemExt(boolean value)682 public PackageImpl setSystemExt(boolean value) { 683 systemExt = value; 684 return this; 685 } 686 687 @Override setPrivileged(boolean value)688 public PackageImpl setPrivileged(boolean value) { 689 privileged = value; 690 return this; 691 } 692 693 @Override setOem(boolean value)694 public PackageImpl setOem(boolean value) { 695 oem = value; 696 return this; 697 } 698 699 @Override setVendor(boolean value)700 public PackageImpl setVendor(boolean value) { 701 vendor = value; 702 return this; 703 } 704 705 @Override setProduct(boolean value)706 public PackageImpl setProduct(boolean value) { 707 product = value; 708 return this; 709 } 710 711 @Override setOdm(boolean value)712 public PackageImpl setOdm(boolean value) { 713 odm = value; 714 return this; 715 } 716 717 @Override setSignedWithPlatformKey(boolean value)718 public PackageImpl setSignedWithPlatformKey(boolean value) { 719 signedWithPlatformKey = value; 720 return this; 721 } 722 723 /** 724 * This is an appId, the uid if the userId is == USER_SYSTEM 725 */ 726 @Override setUid(int value)727 public PackageImpl setUid(int value) { 728 uid = value; 729 return this; 730 } 731 732 @DataClass.Generated( 733 time = 1580517688900L, 734 codegenVersion = "1.0.14", 735 sourceFile = "frameworks/base/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java", 736 inputSignatures = "private final @android.annotation.NonNull @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String manifestPackageName\nprivate boolean stub\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String nativeLibraryDir\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String nativeLibraryRootDir\nprivate boolean nativeLibraryRootRequiresIsa\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String primaryCpuAbi\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String secondaryCpuAbi\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String secondaryNativeLibraryDir\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String seInfo\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String seInfoUser\nprivate boolean system\nprivate boolean factoryTest\nprivate boolean systemExt\nprivate boolean privileged\nprivate boolean oem\nprivate boolean vendor\nprivate boolean product\nprivate boolean odm\nprivate boolean signedWithPlatformKey\nprivate int uid\npublic static final com.android.server.pm.parsing.pkg.Creator<com.android.server.pm.parsing.pkg.PackageImpl> CREATOR\npublic static com.android.server.pm.parsing.pkg.PackageImpl forParsing(java.lang.String,java.lang.String,java.lang.String,android.content.res.TypedArray,boolean)\npublic static com.android.server.pm.parsing.pkg.AndroidPackage buildFakeForDeletion(java.lang.String,java.lang.String)\npublic static @com.android.internal.annotations.VisibleForTesting android.content.pm.parsing.ParsingPackage forTesting(java.lang.String)\npublic static @com.android.internal.annotations.VisibleForTesting android.content.pm.parsing.ParsingPackage forTesting(java.lang.String,java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage hideAsParsed()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.AndroidPackage hideAsFinal()\npublic @java.lang.Override long getLongVersionCode()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl removePermission(int)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl addUsesOptionalLibrary(int,java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl addUsesLibrary(int,java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl removeUsesLibrary(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl removeUsesOptionalLibrary(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSigningDetails(android.content.pm.PackageParser.SigningDetails)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setRestrictUpdateHash(byte)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setRealPackage(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setPersistent(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setDefaultToDeviceProtectedStorage(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setDirectBootAware(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl clearProtectedBroadcasts()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl clearOriginalPackages()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl clearAdoptPermissions()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setCodePath(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setPackageName(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setAllComponentsDirectBootAware(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setBaseCodePath(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setNativeLibraryDir(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setNativeLibraryRootDir(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setPrimaryCpuAbi(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSecondaryCpuAbi(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSecondaryNativeLibraryDir(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSeInfo(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSeInfoUser(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSplitCodePaths(java.lang.String[])\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl capPermissionPriorities()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl markNotActivitiesAsNotExportedIfSingleUser()\npublic @java.lang.Override java.util.UUID getStorageUuid()\npublic @java.lang.Deprecated @java.lang.Override java.lang.String toAppInfoToString()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage setCoreApp(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage setVersionCode(int)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage setVersionCodeMajor(int)\npublic @java.lang.Override android.content.pm.ApplicationInfo toAppInfoWithoutState()\npublic @java.lang.Override int describeContents()\npublic @java.lang.Override void writeToParcel(android.os.Parcel,int)\nclass PackageImpl extends android.content.pm.parsing.ParsingPackageImpl implements [com.android.server.pm.parsing.pkg.ParsedPackage, com.android.server.pm.parsing.pkg.AndroidPackage]\n@com.android.internal.util.DataClass(genConstructor=false, genParcelable=false, genAidl=false, genBuilder=false, genHiddenConstructor=false, genCopyConstructor=false)") 737 @Deprecated __metadata()738 private void __metadata() {} 739 740 741 //@formatter:on 742 // End of generated code 743 744 } 745