0 = disabled
1 = enabled and use FINGERPRINT from json for vending (Play Store)
<string> = enabled and use <string> as FINGERPRINT for vending (Play Store)
spoofVendingFingerprint = 0 / 1
When 0, no impact on Vending
When 1, same FINGERPRINT from custom.pif.json is injected into Vending
Unless spoofVendingSdk is enabled also, in which case FINGERPRINT is not injected since it's not used
-p or --preview has been removed since the Platform Preview program has been replaced by Android Canary
-t # or --top # chooses the top level version depth to crawl down the Android version list for when there are multiple active Betas in multiple Android versions, e.g. with 16 as latest the default value of 1 would get its listed QPRs and -t 2 would force it to get the second listed (15)
Clarify the section about Google Wallet requirements. In particular, that spoofVendingSdk is only to test that <A13 PI passes DEVICE and that the option does not need to be enabled in order to use Wallet after this.
-m or --match will attempt to match the print to your current device if run on a Pixel, and will otherwise fall back to random
- make matching the Action button default since there was some evidence that matching your actual Pixel device may be important for accessing the Pixel exclusive features for your device
- many are experimenting and using it already across forks anyway
- proper documentation to come for next stable release with known issues and potential use cases
- most Java classes were being kept fully unoptimized anyway, which should be generally avoided
- AGP 8.9.0-alpha07 is the last where spoofSignature works with R8 enabled, alpha08 and all later AGP results in:
msg: java.lang.StackOverflowError: stack size 8188KB
stacktrace: java.lang.StackOverflowError: stack size 8188KB
at es.chiteroman.playintegrityfix.CustomPackageInfoCreator.createFromParcel(Unknown Source:2)
[TRUNCATED 3288424 CHARS]
at es.chiteroman.playintegrityfix.CustomPackageInfoCreator.createFromParcel(Unknown Source:2)
at android.os.Parcel.readTypedObject(Parcel.java:4025)
at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:4470)
at android.content.pm.PackageManager.getPackageInfoAsUserUncached(PackageManager.java:10969)
at android.content.pm.PackageManager.-$$Nest$smgetPackageInfoAsUserUncached(Unknown Source:0)
at android.content.pm.PackageManager$2.recompute(PackageManager.java:10982)
at android.content.pm.PackageManager$2.recompute(PackageManager.java:10979)
at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:999)
at android.content.pm.PackageManager.getPackageInfoAsUserCached(PackageManager.java:10996)
at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:1215)
at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1448)
at android.app.LoadedApk.makeApplicationInner(LoadedApk.java:1405)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7029)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2262)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8282)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:554)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
- uninstall.sh is generated at first install so it must be kept to ensure it has the original states/values for the persist props
- run then remove uninstall.sh if it exists when switching to Scripts-Only Mode