Marshmallow не загружается, но не запускается

Правки и логи ниже.

Что случилось:

Несколько дней назад он оставил мой телефон (чипсет Mediatek) заряжаться на ночь. Чего я не заметил, так это того, что зарядное устройство было ослаблено, а заряд был на отметке 2%. На следующее утро я проснулся и обнаружил, что батарея моего телефона полностью разряжена.

Когда я пытался запустить его (после зарядки), это занимало слишком много времени, и телефон нагревался. Однако загрузка не завершилась, и телефон не перезагрузился (например, загрузочная петля).

Что я сделал:

Зашел в рекавери, сделал бэкапы и очистил /dataраздел и телефон запустился. Однако мне нужны данные приложения (больше, чем данные телефона), и простое форматирование раздела, похоже, не приблизило меня к моей цели, и поэтому я восстановил резервные копии.

Затем я очистил данные нескольких программ, которые могли вызвать проблему:

rm -rf com.android.captiveportallogin com.android.carrierconfig com.android.cellbroadcastreceiver com.android.certinstaller com.android.defcontainer com.android.development com.android.documentsui com.android.externalstorage com.android.frameworks.telresources com.android.keychain com.android.managedprovisioning com.android.mms.service com.android.noisefield com.android.pacprocessor com.android.printspooler com.android.proxyhandler com.android.server.telecom com.android.statementservice com.android.stk com.android.vpndialogs com.android.webview com.gametion.ludo com.google.android.configupdater com.grarak.kerneladiutor com.jrummy.app.managerfree com.lexa.fakegps com.makeinfo.androididchanger com.one24.deviceid com.ores.hash com.phoneinfo.changer com.resurrection.otacom.sanctuaire.netswisstool com.unique.mobilefaker com.zimperium.zanti cyanogenmod.platform de.robv.android.xposed.installer it.evilsocket.dsploit net.fidanov.landroid org.cyanogenmod.livelockscreen.service org.cyanogenmod.providers.datausage
rm -rf org.cyanogenmod.snap org.cyanogenmod.theme.chooser org.cyanogenmod.themes.provider org.cyanogenmod.wallpapers.photophase org.cyanogenmod.weather.provider org.omnirom.omniswitch tursky.jan.settings
rm -rf com.android.settings com.android.systemui

Не помогло...

Итак, я получил доступ logcatи извлек некоторые, возможно, сочные биты (в случайном порядке):

page record for 0xb6e4301c was not found
AndroidRuntime:        at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:1873)
ServiceManager: service 'batterystats' died
01-01 07:33:29.583  8300  8300 D AndroidRuntime: Shutting down VM
01-01 07:33:29.584  8300  8300 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
01-01 07:37:16.064 15437 15437 E AndroidRuntime: Error reporting crash
01-01 07:37:16.064 15437 15437 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'void android.app.IActivityManager.handleApplicationCrash(android.os.IBinder, android.app.ApplicationErrorReport$CrashInfo)' on a null object reference
01-01 07:37:16.064 15437 15437 I Process : Sending signal. PID: 15437 SIG: 9
01-01 07:37:16.088   189   189 I ServiceManager: service 'batterystats' died
01-01 07:37:16.088   189   189 I ServiceManager: service 'appops' died
01-01 07:37:16.088   189   189 I ServiceManager: service 'power' died
01-01 07:37:16.088   189   189 I ServiceManager: service 'display' died
01-01 07:37:16.093   217   217 E installd: eof
01-01 07:37:16.093   217   217 E installd: failed to read size
01-01 07:37:16.093   217   217 I installd: closing connection
01-01 07:37:16.404 12127 12127 I Zygote  : Process 12239 exited cleanly (13)
01-01 07:37:16.405 12127 12127 E Zygote  : Exit zygote because system server (15437) has terminated
01-01 07:37:16.446   189   189 I ServiceManager: service 'user.xposed.app' died
01-01 07:37:16.453   189   189 I ServiceManager: service 'media.audio_flinger' died
01-01 07:37:16.453   189   189 I ServiceManager: service 'media.player' died
01-01 07:37:16.453   189   189 I ServiceManager: service 'media.resource_manager' died
01-01 07:37:35.780 17500 17500 E cutils-trace: Error opening trace file: No such file or directory (2)
01-01 07:32:20.048  3896  3896 E AndroidRuntime: Error reporting WTF
01-01 07:32:20.048  3896  3896 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.app.IActivityManager.handleApplicationWtf(android.os.IBinder, java.lang.String, boolean, android.app.ApplicationErrorReport$CrashInfo)' on a null object reference
01-01 07:32:20.048  3896  3896 E AndroidRuntime:        at com.android.internal.os.RuntimeInit.wtf(RuntimeInit.java:353)
01-01 07:32:20.048  3896  3896 E AndroidRuntime:        at android.util.Log$1.onTerribleFailure(Log.java:104)
01-01 07:32:20.048  3896  3896 E AndroidRuntime:        at android.util.Log.wtf(Log.java:297)
01-01 07:32:20.048  3896  3896 E AndroidRuntime:        at android.util.Slog.wtf(Slog.java:82)
01-01 07:32:41.126  5786  5786 E AndroidRuntime: android.util.Log$TerribleFailure: No start tag found in package manager settings
01-01 07:32:41.161  5786  5786 W PackageManager: Library not found: /system/framework/org.apache.http.legacy.jar
01-01 07:32:41.247  5786  5786 E System  : ******************************************
01-01 07:32:41.249  5786  5786 E System  : ************ Failure starting system services
01-01 07:32:41.249  5786  5786 E System  : java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.android.server.pm.Settings$VersionInfo.fingerprint' on a null object reference

Тогда у меня появилась идея, и я сделал rm -rf /data/dataи mkdir /data/data. Не помогло, но показало, что проблема была не в данных приложения, а в чем-то еще в разделе данных.

Вскоре я заметил повторяющуюся закономерность в logcat, указывающую на то, что мой телефон застрял в цикле (не в цикле загрузки), а не в блокирующем вызове процесса или потока.

Зацикливание logcat:

01-01 07:32:53.191  6368  6368 E System  : ******************************************
01-01 07:32:53.191  6368  6368 E System  : ************ Failure starting system services
01-01 07:32:53.191  6368  6368 E System  : java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.android.server.pm.Settings$VersionInfo.fingerprint' on a null object reference
01-01 07:32:53.191  6368  6368 E System  :      at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:2170)
01-01 07:32:53.191  6368  6368 E System  :      at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:1873)
01-01 07:32:53.191  6368  6368 E System  :      at com.android.server.SystemServer.startBootstrapServices(SystemServer.java:387)
01-01 07:32:53.191  6368  6368 E System  :      at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
01-01 07:32:53.191  6368  6368 E System  :      at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:334)
01-01 07:32:53.191  6368  6368 E System  :      at com.android.server.SystemServer.startBootstrapServices(<Xposed>)
01-01 07:32:53.191  6368  6368 E System  :      at com.android.server.SystemServer.run(SystemServer.java:289)
01-01 07:32:53.191  6368  6368 E System  :      at com.android.server.SystemServer.main(SystemServer.java:176)
01-01 07:32:53.191  6368  6368 E System  :      at java.lang.reflect.Method.invoke(Native Method)
01-01 07:32:53.191  6368  6368 E System  :      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-01 07:32:53.191  6368  6368 E System  :      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-01 07:32:53.191  6368  6368 E System  :      at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
01-01 07:32:53.192  6368  6368 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
01-01 07:32:53.192  6368  6368 E AndroidRuntime: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.android.server.pm.Settings$VersionInfo.fingerprint' on a null object reference
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:2170)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:1873)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at com.android.server.SystemServer.startBootstrapServices(SystemServer.java:387)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:334)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at com.android.server.SystemServer.startBootstrapServices(<Xposed>)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at com.android.server.SystemServer.run(SystemServer.java:289)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at com.android.server.SystemServer.main(SystemServer.java:176)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-01 07:32:53.192  6368  6368 E AndroidRuntime:        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
01-01 07:32:53.193  6368  6368 E AndroidRuntime: Error reporting crash
01-01 07:32:53.193  6368  6368 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'void android.app.IActivityManager.handleApplicationCrash(android.os.IBinder, android.app.ApplicationErrorReport$CrashInfo)' on a null object reference
01-01 07:32:53.193  6368  6368 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:95)
01-01 07:32:53.193  6368  6368 E AndroidRuntime:        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
01-01 07:32:53.193  6368  6368 E AndroidRuntime:        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
01-01 07:32:53.411  6438  6438 F libc    : page record for 0xb6d8301c was not found (block_size=16)
01-01 07:32:57.925  6682  6682 F libc    : page record for 0xb6e5b01c was not found (block_size=16)
01-01 07:33:03.304  6930  6930 F libc    : page record for 0xb6de901c was not found (block_size=16)
01-01 07:33:05.758  7050  7050 I InstallerConnection: connecting...
01-01 07:33:05.772  7050  7050 I InstallerConnection: disconnecting...
01-01 07:33:05.790  7050  7050 I SystemServer: Entered the Android system server!
01-01 07:33:05.896  7050  7050 I SystemServiceManager: Starting com.android.server.pm.Installer
01-01 07:33:05.897  7050  7050 I Installer: Waiting for installd to be ready.
01-01 07:33:05.897  7050  7050 I InstallerConnection: connecting...
01-01 07:33:05.897  7050  7050 I SystemServiceManager: Starting com.android.server.am.ActivityManagerService$Lifecycle
01-01 07:33:05.908  7050  7050 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:05.908  7050  7050 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:05.908  7050  7050 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:05.908  7050  7050 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:05.908  7050  7050 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:05.908  7050  7050 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:06.027  7050  7050 I ActivityManager: Memory class: 96
01-01 07:33:06.101  7050  7050 D BatteryStatsImpl: Reading daily items from /data/system/batterystats-daily.xml
01-01 07:33:06.254  7050  7050 W ProcessCpuTracker: Skipping unknown process pid 7075
01-01 07:33:06.265  7050  7050 I IntentFirewall: Read new rules (A:0 B:0 S:0)
01-01 07:33:06.279  7050  7050 D AppOps  : AppOpsService published
01-01 07:33:06.279  7050  7050 I SystemServiceManager: Starting com.android.server.power.PowerManagerService
01-01 07:33:06.287  7050  7050 I SystemServiceManager: Starting com.android.server.lights.LightsService
01-01 07:33:06.290  7050  7050 I SystemServiceManager: Starting com.android.server.display.DisplayManagerService
01-01 07:33:06.293  7050  7050 I SystemServiceManager: Starting phase 100
01-01 07:33:06.301  7050  7094 I DisplayManagerService: Display device added: DisplayDeviceInfo{"Built-in Screen": uniqueId="local:0", 720 x 1280, modeId 1, defaultModeId 1, supportedModes [{id=1, width=720, height=1280, fps=55.9}], colorTransformId 1, defaultColorTransformId 1, supportedColorTransforms [{id=1, colorTransform=0}], density 320, 294.967 x 295.563 dpi, appVsyncOff 0, presDeadline 18889087, touch INTERNAL, rotation 0, type BUILT_IN, state UNKNOWN, FLAG_DEFAULT_DISPLAY, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS}
01-01 07:33:06.304  7050  7050 I SystemServer: Package Manager
01-01 07:33:06.309  7050  7094 I DisplayManagerService: Display device changed state: "Built-in Screen", ON
01-01 07:33:08.137  7201  7201 F libc    : page record for 0xb6e5701c was not found (block_size=16)
01-01 07:33:13.103  7467  7467 F libc    : page record for 0xb6de801c was not found (block_size=16)
01-01 07:33:17.544  7700  7700 I InstallerConnection: connecting...
01-01 07:33:17.552  7700  7700 I InstallerConnection: disconnecting...
01-01 07:33:17.579  7700  7700 I SystemServer: Entered the Android system server!
01-01 07:33:17.750  7700  7700 I SystemServiceManager: Starting com.android.server.pm.Installer
01-01 07:33:17.750  7700  7700 I Installer: Waiting for installd to be ready.
01-01 07:33:17.750  7700  7700 I InstallerConnection: connecting...
01-01 07:33:17.751  7700  7700 I SystemServiceManager: Starting com.android.server.am.ActivityManagerService$Lifecycle
01-01 07:33:17.760  7700  7700 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:17.760  7700  7700 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:17.760  7700  7700 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:17.760  7700  7700 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:17.760  7700  7700 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:17.760  7700  7700 I XXXXXX  : choosing minFree values for 32 Bit
01-01 07:33:17.836  7700  7700 I ActivityManager: Memory class: 96
01-01 07:33:17.914  7700  7700 D BatteryStatsImpl: Reading daily items from /data/system/batterystats-daily.xml
01-01 07:33:18.187  7700  7700 W ProcessCpuTracker: Skipping unknown process pid 7732
01-01 07:33:18.196  7700  7700 I IntentFirewall: Read new rules (A:0 B:0 S:0)
01-01 07:33:18.333  7700  7700 D AppOps  : AppOpsService published
01-01 07:33:18.334  7700  7700 I SystemServiceManager: Starting com.android.server.power.PowerManagerService
01-01 07:33:18.353  7700  7700 I SystemServiceManager: Starting com.android.server.lights.LightsService
01-01 07:33:18.356  7700  7700 I SystemServiceManager: Starting com.android.server.display.DisplayManagerService
01-01 07:33:18.370  7700  7761 I DisplayManagerService: Display device added: DisplayDeviceInfo{"Built-in Screen": uniqueId="local:0", 720 x 1280, modeId 1, defaultModeId 1, supportedModes [{id=1, width=720, height=1280, fps=55.9}], colorTransformId 1, defaultColorTransformId 1, supportedColorTransforms [{id=1, colorTransform=0}], density 320, 294.967 x 295.563 dpi, appVsyncOff 0, presDeadline 18889087, touch INTERNAL, rotation 0, type BUILT_IN, state UNKNOWN, FLAG_DEFAULT_DISPLAY, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS}
01-01 07:33:18.373  7700  7700 I SystemServiceManager: Starting phase 100
01-01 07:33:18.374  7700  7761 I DisplayManagerService: Display device changed state: "Built-in Screen", ON
01-01 07:33:18.375  7700  7700 I SystemServer: Package Manager
01-01 07:33:18.496  7700  7700 D SELinuxMMAC: Using policy file /system/etc/security/mac_permissions.xml
01-01 07:33:18.504  7700  7700 W PackageManager: No start tag found in package manager settings
01-01 07:33:18.507  7700  7700 E PackageManager: No start tag found in package manager settings
01-01 07:33:18.509  7700  7700 E AndroidRuntime: Error reporting WTF
01-01 07:33:18.509  7700  7700 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.app.IActivityManager.handleApplicationWtf(android.os.IBinder, java.lang.String, boolean, android.app.ApplicationErrorReport$CrashInfo)' on a null object reference
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.internal.os.RuntimeInit.wtf(RuntimeInit.java:353)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at android.util.Log$1.onTerribleFailure(Log.java:104)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at android.util.Log.wtf(Log.java:297)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at android.util.Slog.wtf(Slog.java:82)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.pm.Settings.readLPw(Settings.java:2829)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:2030)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:1873)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.SystemServer.startBootstrapServices(SystemServer.java:387)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:334)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.SystemServer.startBootstrapServices(<Xposed>)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.SystemServer.run(SystemServer.java:289)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.SystemServer.main(SystemServer.java:176)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
01-01 07:33:18.509  7700  7700 E AndroidRuntime: Original WTF:
01-01 07:33:18.509  7700  7700 E AndroidRuntime: android.util.Log$TerribleFailure: No start tag found in package manager settings
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at android.util.Log.wtf(Log.java:291)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at android.util.Slog.wtf(Slog.java:82)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.pm.Settings.readLPw(Settings.java:2829)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:2030)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:1873)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.SystemServer.startBootstrapServices(SystemServer.java:387)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:334)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.SystemServer.startBootstrapServices(<Xposed>)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.SystemServer.run(SystemServer.java:289)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.server.SystemServer.main(SystemServer.java:176)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-01 07:33:18.509  7700  7700 E AndroidRuntime:        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
01-01 07:33:18.527  7700  7700 W PackageManager: Library not found: /system/framework/org.apache.http.legacy.jar
01-01 07:33:18.580  7700  7700 E System  : ******************************************
01-01 07:33:18.581  7700  7700 E System  : ************ Failure starting system services

Обратите внимание, что первая и последние 2 строки совпадают, что указывает на петлю.

Редактировать:
/data/system # rm -rf * помогает запустить телефон, так что проблема есть. Но запуск команды приводит к частичной потере данных приложения (поэтому я восстановил резервные копии неисправного /dataраздела).

Оба ссылаются на Xposed — попробуйте временно отключить его, нажав кнопки регулировки громкости при первой загрузке. Кроме того, попробуйте просто снова прошить исходное ПЗУ поверх существующей установки - звучит глупо, но на самом деле сработало для меня в аналогичной ситуации.
Готово, не помогает...
И я попробую ROM вещь сегодня вечером.

Ответы (2)

Я только что сам столкнулся с этой проблемой на своем Nexus 5 под управлением Android 6, и после нескольких дней работы с ней я смог решить ее, не стирая все свои данные, поэтому я хотел поделиться тем, что я сделал, на случай, если кто-нибудь еще когда-нибудь столкнется похожая проблема, и стоит задача отладки проблемы вместо очистки телефона.

У всех моих проблем была одна и та же основная причина: пустые XML-файлы. Я поэкспериментировал с отключением fsync в своем ядре, чтобы проверить разницу в производительности, и это, вероятно, привело к некоторой потере данных.

Наблюдение: /data/system/packages.xml, /data/system/packages.listи /data/system/job/jobs.xmlбыли пусты.

Ниже приведены шаги, которые я выполнил. Имейте в виду, что это результат экспериментов, и вы не должны слепо выполнять эти команды, не разобравшись в них. ;)

  • Сделайте резервную копию всего /dataраздела.
  • Удалите /data/systemкаталог и перезагрузитесь, чтобы восстановить его.
  • Скопируйте /data/systemкаталог куда-нибудь (в моем случае: /sdcard/system-good).
  • Восстановите резервную копию раздела /data, восстановив стертые данные приложения.
  • Удалите файл JobStore:rm /data/system/job/jobs.xml
  • Скопируйте восстановленные файлы:
    cat /sdcard/system-good/packages.list > /data/system/packages.list
    cat /sdcard/system-good/packages.xml > /data/system/packages.xml
  • Исправить UID пакета на основе журналов ошибок:
    grep "has changed from uid" /sdcard/system-good/uiderrors.txt | while read -r LINE; do sed -i "s/\(^$(echo "$LINE" | awk '{ printf "%s\\) %d/\\1 %d", $6, $13, $11 }')/" /data/system/packages.list ; done
    grep "has changed from uid" /sdcard/system-good/uiderrors.txt | while read -r LINE; do sed -i "s/\(^ <package name=\"$(echo "$LINE" | awk '{ printf "%s\" .\\+ userId=\"\\)%d\">/\\1%d\">", $6, $13, $11 }')/" /data/system/packages.xml ; done
  • На всякий случай почистил кеш и далвик.
  • Перезагрузился, и мой Android, включая все мои приложения, был восстановлен!

Для меня это превратилось в побочный проект, и я узнал немного больше о внутренностях Android. :) Не все мои шаги могут иметь отношение к решению вашего сценария.

Пустое значение jobs.xmlвызвало исключение NullPointerException в JobStore: java.lang.RuntimeException: Failed to create service com.android.server.job.JobSchedulerService: service constructor threw an exception. Это уже исправлено вышестоящим , но это исправление еще не включено в Android 6. Простое удаление /data/system/job/jobs.xmlпропускает весь раздел кода с ошибкой, решая проблему.

Пустые файлы менеджера пакетов должны восстанавливаться после удаления, однако это, к сожалению, привело к еще одному циклу загрузки для меня, для которого я не смог собрать журналы для дальнейшей оценки проблемы. Поэтому я восстановил систему, удалив весь файл /data/system, затем сделал его копию и восстановил свою резервную копию /data, а затем сравнил старую и новую версию, /data/systemчтобы выяснить, что может быть причиной сбоя.

В моем случае основное отличие заключалось в том, что UID для всех моих приложений изменились в восстановленных файлах package.xmlи package.listфайлах, в результате чего диспетчер пакетов удалил все данные для этих приложений при проверке содержимого пакета во время загрузки. Я решил эту проблему, скопировав восстановленные версии и изменив их, чтобы они соответствовали старым UID, используя файл журнала, в котором записаны все несоответствующие UID. Некрасиво, и, оглядываясь назад, возможно, было бы лучше просто прочитать UID из каталогов /data/dataили посмотреть, как Android выполняет эту регенерацию в первую очередь, и настроить это, но это тоже сработало.

Спасибо за публикацию вашего решения. Нечистое завершение работы приведет к сбросу файлов /data/system/packges в пустые файлы. Если бы Android сохранял резервную копию или журнал для этих файлов, было бы здорово.

jobs.xmlВ дополнение к приведенному выше ответу вы можете выполнить резервное копирование трех файлов ( packages.xmlи packages.list) с помощью следующего сценария оболочки:

#!/system/bin/sh
dir=/data/system

watch -n60 "cat $dir/packages.list > $dir/packages.list.bak" > /dev/null &
watch -n60 "cat $dir/packages.xml > $dir/packages.xml.bak" > /dev/null &
watch -n60 "cat $dir/job/jobs.xml > $dir/jobs.xml.bak" > /dev/null &

echo "Now periodically performing backup of packages' (APKs') databases..."

watchбудет периодически, каждые 60 секунд, делать резервную копию трех файлов. Сохраните сценарий оболочки в /system/xbinкаталоге, примените к нему chmod 0755и chown root.shellи запустите вручную.

Однако обратите внимание, что не рекомендуется добавлять сценарий оболочки в init.d, так как это может привести к повреждению резервной копии трех файлов.

Запишите разрешения, владельца и группу исходных файлов, чтобы позже применить их к восстановленным резервным копиям.

ls -l data/system/job/jobs.*
-rw------- 1 system system 1401 2021-04-06 11:42 data/system/job/jobs.xml

ls -l data/system/packages.*
-rw-r----- 1 system package_info  10289 2021-04-06 11:42 data/system/packages.list
-rw-rw---- 1 system system       477016 2021-04-06 11:42 data/system/packages.xml