[Android] [INSTALL_FAILED_INSUFFICIENT_STORAGE: Scanning Failed.: Package could not be assigned a valid UID] in Android

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.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.