无法重新安装在 Android Studio 3.2 上生成的签名 APK
Cannot reinstall a signed APK generated on Android Studio 3.2
我已成功构建签名 APK 并将其安装到我的设备上。然后,我卸载应用程序(设置 -> 应用程序管理器 -> MyApp -> 卸载)并尝试重新安装。我第二次尝试安装它时,我得到 "App not installed" 和以下堆栈跟踪:
12-03 14:37:12.785 834-859/? E/Parcel: Class not found when unmarshalling: com.android.packageinstaller.InstallFlowAnalytics
java.lang.ClassNotFoundException: com.android.packageinstaller.InstallFlowAnalytics
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at android.os.Parcel.readParcelableCreator(Parcel.java:2404)
at android.os.Parcel.readParcelable(Parcel.java:2358)
at android.os.Parcel.readValue(Parcel.java:2264)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2614)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.BaseBundle.getString(BaseBundle.java:920)
at android.content.Intent.getStringExtra(Intent.java:6183)
at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:2695)
at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:2157)
at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:6333)
at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:6111)
at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:170)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3983)
at android.os.Binder.execTransact(Binder.java:453)
Caused by: java.lang.ClassNotFoundException: com.android.packageinstaller.InstallFlowAnalytics
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at android.os.Parcel.readParcelableCreator(Parcel.java:2404)
at android.os.Parcel.readParcelable(Parcel.java:2358)
at android.os.Parcel.readValue(Parcel.java:2264)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2614)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.BaseBundle.getString(BaseBundle.java:920)
at android.content.Intent.getStringExtra(Intent.java:6183)
at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:2695)
at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:2157)
at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:6333)
at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:6111)
at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:170)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3983)
at android.os.Binder.execTransact(Binder.java:453)
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
如果我增加 versionCode
并重复该过程,我再次能够在第一次安装该应用程序,但卸载它并再次安装它不起作用。
我已经在 3 种不同的设备上尝试过了。我尝试仅使用 "V1 (Jar signature)" 进行签名,还尝试对 V1 和 V2 进行签名。
我该如何解决这个问题?
更新 0:我第一次尝试安装时(这是我唯一一次能够安装)它显示一个带有选项 "INSTALL ANYWAY" 的弹出窗口 "Blocked by Play Protect",这是我的选项使用.
刚发现问题。罪魁祸首是 Play Protect。如果我禁用它,那么我可以重新安装该应用程序。否则失败。
我真的认为这是 Play Protect 上的一个错误,因为在我第一次安装该应用程序时,它会询问我是否要阻止或安装该应用程序,并且在下次尝试安装该应用程序时 (相同的版本代码)它只会阻止安装。
我已成功构建签名 APK 并将其安装到我的设备上。然后,我卸载应用程序(设置 -> 应用程序管理器 -> MyApp -> 卸载)并尝试重新安装。我第二次尝试安装它时,我得到 "App not installed" 和以下堆栈跟踪:
12-03 14:37:12.785 834-859/? E/Parcel: Class not found when unmarshalling: com.android.packageinstaller.InstallFlowAnalytics
java.lang.ClassNotFoundException: com.android.packageinstaller.InstallFlowAnalytics
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at android.os.Parcel.readParcelableCreator(Parcel.java:2404)
at android.os.Parcel.readParcelable(Parcel.java:2358)
at android.os.Parcel.readValue(Parcel.java:2264)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2614)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.BaseBundle.getString(BaseBundle.java:920)
at android.content.Intent.getStringExtra(Intent.java:6183)
at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:2695)
at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:2157)
at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:6333)
at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:6111)
at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:170)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3983)
at android.os.Binder.execTransact(Binder.java:453)
Caused by: java.lang.ClassNotFoundException: com.android.packageinstaller.InstallFlowAnalytics
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at android.os.Parcel.readParcelableCreator(Parcel.java:2404)
at android.os.Parcel.readParcelable(Parcel.java:2358)
at android.os.Parcel.readValue(Parcel.java:2264)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2614)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.BaseBundle.getString(BaseBundle.java:920)
at android.content.Intent.getStringExtra(Intent.java:6183)
at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:2695)
at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:2157)
at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:6333)
at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:6111)
at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:170)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3983)
at android.os.Binder.execTransact(Binder.java:453)
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
如果我增加 versionCode
并重复该过程,我再次能够在第一次安装该应用程序,但卸载它并再次安装它不起作用。
我已经在 3 种不同的设备上尝试过了。我尝试仅使用 "V1 (Jar signature)" 进行签名,还尝试对 V1 和 V2 进行签名。
我该如何解决这个问题?
更新 0:我第一次尝试安装时(这是我唯一一次能够安装)它显示一个带有选项 "INSTALL ANYWAY" 的弹出窗口 "Blocked by Play Protect",这是我的选项使用.
刚发现问题。罪魁祸首是 Play Protect。如果我禁用它,那么我可以重新安装该应用程序。否则失败。
我真的认为这是 Play Protect 上的一个错误,因为在我第一次安装该应用程序时,它会询问我是否要阻止或安装该应用程序,并且在下次尝试安装该应用程序时 (相同的版本代码)它只会阻止安装。