Запустил отображение лога:
adb logcat -c
adb logcat | grep -i "PackageInstaller\|install"
Затем, не закрывая лог, кликнул по APK на планшете в Google Files. Отобразился лог установки:
11-04 14:41:00.139 1227 1293 E PackageInstallerSession: com.google.android.apps.nbu.files drops manifest attribute android:installLocation in base.apk for ru.dolina.config
11-04 14:41:00.141 1227 1293 D BroadcastQueue: Add broadcast <BroadcastRecord{5e61b55 u0 com.google.android.apps.nbu.files.appmanager.INTENT_ACTION_INSTALLATION_STATE_CHANGE}> into [parallel | background], pending size 0
11-04 14:41:00.143 1227 1259 D BroadcastQueue: Done with parallel broadcast [background] [BroadcastRecord{5e61b55 u0 com.google.android.apps.nbu.files.appmanager.INTENT_ACTION_INSTALLATION_STATE_CHANGE}]
11-04 14:41:00.146 1227 3005 I ActivityTaskManager: START u0 {act=android.content.pm.action.CONFIRM_INSTALL pkg=com.google.android.packageinstaller cmp=com.google.android.packageinstaller/com.android.packageinstaller.InstallStart (has extras)} from uid 10099, pid 14771
11-04 14:41:00.161 1227 3005 I ActivityTaskManager: ->startActivity for ActivityRecord{748e6f8 u0 com.google.android.packageinstaller/com.android.packageinstaller.InstallStart} t264 d0} result:START_SUCCESS
11-04 14:41:00.260 1227 3005 D WindowManager: setFocusedApp mFocusedApp = ActivityRecord{748e6f8 u0 com.google.android.packageinstaller/com.android.packageinstaller.InstallStart} t264 d0}displayId = 0Callers = com.android.server.wm.ActivityTaskManagerService.setResumedActivityUncheckLocked:4587 com.android.server.wm.TaskFragment.onActivityStateChanged:761 com.android.server.wm.ActivityRecord.setState:5510 com.android.server.wm.Task.minimalResumeActivityLocked:4800
11-04 14:41:00.286 1227 3005 I ActivityTaskManager: START u0 {act=android.content.pm.action.CONFIRM_INSTALL flg=0x2000001 pkg=com.google.android.packageinstaller cmp=com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity (has extras)} from uid 10055, pid 18157
11-04 14:41:00.295 1227 3005 I ActivityTaskManager: ->startActivity for ActivityRecord{703a27 u0 com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity} t264 d0} result:START_SUCCESS
11-04 14:41:00.320 1227 3030 D WindowManager: setFocusedApp mFocusedApp = ActivityRecord{703a27 u0 com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity} t264 d0}displayId = 0Callers = com.android.server.wm.ActivityTaskManagerService.setResumedActivityUncheckLocked:4587 com.android.server.wm.TaskFragment.onActivityStateChanged:761 com.android.server.wm.ActivityRecord.setState:5510 com.android.server.wm.Task.minimalResumeActivityLocked:4800
11-04 14:41:00.354 629 629 D vendor.unisoc.hardware.power-service: Enter getSceneIdByName: sceneName:com.google.android.packageinstaller
11-04 14:41:00.376 1227 3030 V WindowState: toString mSurfaceNameCache= mLastTitle=null title=com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity
11-04 14:41:00.376 1227 3030 D CoreBackPreview: Window{7d4363b u0 com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@9dbd2b1, mPriority=0}
11-04 14:41:00.389 1227 3017 I WindowManager: Input focus has changed to Window{7d4363b u0 com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity}-[Surface(name=*Title#3851)/@0x2b0d396] from 359f57 com.google.android.apps.nbu.files/com.google.android.apps.nbu.files.advancedbrowsing.browser.AdvancedBrowsingActivity mDisplayId 0 updateInputWindows true, callers=com.android.server.wm.DisplayContent.updateFocusedWindowLocked:3736 com.android.server.wm.RootWindowContainer.updateFocusedWindowLocked:493 com.android.server.wm.WindowManagerService.updateFocusedWindowLocked:6179 com.android.server.wm.WindowManagerService.relayoutWindow:2571 com.android.server.wm.Session.relayout:266
11-04 14:41:00.390 18157 18157 D VRI[PackageInstallerActivity]: performTraversals relayoutWindow: maybeSyncSeqId=-1 ,mSyncSeqId=0 ,relayoutResult=3
11-04 14:41:00.394 610 5831 I mali_gralloc: allocate: id=26200000c52, hal_format=RGBA8888, mali_format=RGBA8888, afbc=SPLIT, usage=GPU_RW|HWC|BACKBUF, size=845x345(1213440), stride=848, name=VRI[PackageInstallerActivity]#2(BLAST Consumer)2
11-04 14:41:00.396 610 820 I mali_gralloc: allocate: id=26200000c53, hal_format=RGBA8888, mali_format=RGBA8888, afbc=SPLIT, usage=GPU_RW|HWC|BACKBUF, size=845x345(1213440), stride=848, name=VRI[PackageInstallerActivity]#2(BLAST Consumer)2
11-04 14:41:00.398 610 820 I mali_gralloc: allocate: id=26200000c54, hal_format=RGBA8888, mali_format=RGBA8888, afbc=SPLIT, usage=GPU_RW|HWC|BACKBUF, size=845x345(1213440), stride=848, name=VRI[PackageInstallerActivity]#2(BLAST Consumer)2
11-04 14:41:00.408 1227 3030 D WindowManager: finishDrawing: syncSeqId=0, postDrawTransaction=android.view.SurfaceControl$Transaction@eece370, mSyncState=0, mDrawState=1, hasSyncHandlers=false, mClientWasDrawingForSync=false, win=Window{7d4363b u0 com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity}-[Surface(name=*Title#3851)/@0x2b0d396]
11-04 14:41:00.419 1227 1249 I ActivityTaskManager: Displayed com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity: +268ms
11-04 14:41:00.425 641 641 I Layer : fillInputInfo layer:com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity#3851, visible=1 (hasInputInfo:1, isHidden:0, alpha:1.000000, mActiveBuffer:2), parent:7d4363b com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity#3850, parenthidden:0
11-04 14:41:01.980 1227 1253 D WindowManager: Focus not requested, because it has no surface or is not focusable, request window=Window{7d4363b u0 com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity}-[Surface(name=*Title#3851)/@0x2b0d396], mCurrentFocusWindow= 7d4363b com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity
11-04 14:41:01.994 1227 3038 I WindowManager: Input focus has changed to Window{359f57 u0 com.google.android.apps.nbu.files/com.google.android.apps.nbu.files.advancedbrowsing.browser.AdvancedBrowsingActivity}-[Surface(name=*Title#3840)/@0xa5fdddc] from 7d4363b com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity mDisplayId 0 updateInputWindows true, callers=com.android.server.wm.DisplayContent.updateFocusedWindowLocked:3736 com.android.server.wm.RootWindowContainer.updateFocusedWindowLocked:493 com.android.server.wm.WindowManagerService.updateFocusedWindowLocked:6179 com.android.server.wm.ActivityTaskManagerService.setResumedActivityUncheckLocked:4589 com.android.server.wm.TaskFragment.onActivityStateChanged:761
11-04 14:41:01.995 1227 1283 I PackageManager: startCopy UserHandle{0}: InstallParams{145d807 file=/data/app/vmdl374310090.tmp}
11-04 14:41:02.005 1227 1283 E PackageManager: ERROR: could not load root hash from incremental install
11-04 14:41:02.072 7186 7186 I Finsky : [2] VerifyApps: Install-time verification requested for package ru.dolina.config, PackageManager id = 63, Verifier id = 56c96bcc-eb6c-4530-88a9-92252e0c3762
11-04 14:41:02.164 1227 3030 D CoreBackPreview: Window{7d4363b u0 com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity}-[Surface(name=*Title#3851)/@0x2b0d396]: Setting back callback null
11-04 14:41:02.176 1227 3017 W InputManager-JNI: Input channel object '7d4363b com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity (client)' was disposed without first being removed with the input manager!
11-04 14:41:02.245 15484 15509 I AppInstallMetadataManag: No metadata found for session 374310090
11-04 14:41:02.255 7186 11641 I Finsky : [297] VerifyApps: [ADV] Received getInstallerInfo request. VerificationId: 63
11-04 14:41:02.256 7186 11641 I Finsky : [297] VerifyApps: [ADV] Returning installer info for 63: com.google.android.apps.nbu.files
11-04 14:41:02.304 641 641 I Layer : fillInputInfo layer:com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity#3851, visible=0 (hasInputInfo:1, isHidden:1, alpha:0.418945, mActiveBuffer:2), parent:7d4363b com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity#3850, parenthidden:1
11-04 14:41:02.388 7186 18375 I Finsky : [491] VerifyApps AdvancedProtection: Verify AP install started
11-04 14:41:02.389 7186 18375 I Finsky : [491] VerifyApps AdvancedProtection: Allowing install because there are no Advanced Protection users
11-04 14:41:02.396 7186 18375 I Finsky : [491] Skipping logging for attempted installation. The source is a system package.
11-04 14:41:02.406 1227 1293 D BroadcastQueue: Add broadcast <BroadcastRecord{d3d4973 u0 com.google.android.apps.nbu.files.appmanager.INTENT_ACTION_INSTALLATION_STATE_CHANGE}> into [parallel | background], pending size 0
11-04 14:41:02.407 1227 1259 D BroadcastQueue: Done with parallel broadcast [background] [BroadcastRecord{d3d4973 u0 com.google.android.apps.nbu.files.appmanager.INTENT_ACTION_INSTALLATION_STATE_CHANGE}]
11-04 14:41:02.408 7186 7186 I Finsky : [2] VerifyApps: Install-time verification complete: id=63, package_name=ru.dolina.config
Проблема оказалась не в APK как таковом, а в том, как именно файловый менеджер (Google Files) передаёт его системе. Настоящая причина: ошибка в Google Files.
В логе есть две важные строки:
1. E PackageInstallerSession: com.google.android.apps.nbu.files drops manifest attribute android:installLocation in base.apk for ru.dolina.config
2. E PackageManager: ERROR: could not load root hash from incremental install
Первая строка — самая важная. Она означает, что приложение Google Files (`com.google.android.apps.nbu.files`) при передаче APK установщику Android удалило из манифеста атрибут `android:installLocation`. Это нештатное поведение системы. Установщик Android, получив «испорченный» таким образом манифест, не может корректно завершить установку и выдаёт общую ошибку «Приложение не установлено».
ADB устанавливает APK напрямую, не пропуская его через фильтр Google Files, поэтому там всё проходит успешно.
Что делать? Самое простое решение — перестать использовать Google Files для установки.
1. Установите другой файловый менеджер. Например, «Files» от самого производителя планшета (если он есть), Total Commander или любой другой проводник из Play Маркета.
2. Откройте APK через него. Скорее всего, установка пройдёт нормально, потому что другой файловый менеджер не будет вмешиваться в манифест.