I heard “INSTALL_FAILED_INSUFFICIENT_STORAGE: Scanning Failed” error message a couple of times. https://github.com/appium/appium/issues/13957 is probably the same message in the appium repository.
The logcat was:
PackageManager: Package <package id> could not be assigned a valid UID
PackageManager: Scanning Failed.
PackageManager: com.android.server.pm.PackageManagerException: Package <package id> could not be assigned a valid UID
PackageManager: at com.android.server.pm.Settings.registerAppIdLPw(Settings.java:832)
PackageManager: at com.android.server.pm.PackageManagerService.optimisticallyRegisterAppId(PackageManagerService.java:11124)
PackageManager: at com.android.server.pm.PackageManagerService.installPackagesLI(PackageManagerService.java:17185)
PackageManager: at com.android.server.pm.PackageManagerService.installPackagesTracedLI(PackageManagerService.java:16502)
PackageManager: at com.android.server.pm.PackageManagerService.lambda$processInstallRequestsAsync$14$PackageManagerService(PackageManagerService.java:14747)
PackageManager: at com.android.server.pm.-$$Lambda$PackageManagerService$6_Yp7BSB4TgtrWSoFlODKgHIvZY.run(Unknown Source:6)
PackageManager: at android.os.Handler.handleCallback(Handler.java:883)
PackageManager: at android.os.Handler.dispatchMessage(Handler.java:100)
PackageManager: at android.os.Looper.loop(Looper.java:359)
PackageManager: at android.os.HandlerThread.run(HandlerThread.java:67)
PackageManager: at com.android.server.ServiceThread.run(ServiceThread.java:44)
PackageInstallerSession: Ignoring abandon after commit relinquished control
The invalid error message was probably the below (from https://cs.android.com/android/platform/superproject/+/master:frameworks/base/services/core/java/com/android/server/pm/Settings.java;l=4096-4097?q=pm%2FSettings.java )
/** Returns a new AppID or -1 if we could not find an available AppID to assign */
private int acquireAndRegisterNewAppIdLPw(SettingBase obj) {
// Let's be stupidly inefficient for now...
final int size = mAppIds.size();
for (int i = mFirstAvailableUid; i < size; i++) {
if (mAppIds.get(i) == null) {
mAppIds.set(i, obj);
return Process.FIRST_APPLICATION_UID + i;
}
}
// None left?
if (size > (Process.LAST_APPLICATION_UID - Process.FIRST_APPLICATION_UID)) {
return -1;
}
mAppIds.add(obj);
return Process.FIRST_APPLICATION_UID + size;
}
So, when Android already has probably over Process.LAST_APPLICATION_UID - Process.FIRST_APPLICATION_UID, it definitely handles the app id as -1. It causes the invalid app id. I haven’t deeply dug the implementation well, but at least when private final WatchedArrayList<SettingBase> mAppIds; has over the range apps, the issue occurs.
https://issuetracker.google.com/issues/170867658 is probably the same issue.
So far, reboot the device once, or factory reset could be the fix.