Тихая установка APK владельцем устройства не работает на MIUI 11

У меня есть Android-приложение «владелец устройства», которое автоматически устанавливает APK с помощью PackageInstaller (см. Код, например, здесь).

Этот код отлично работает на всех устройствах Android 7+, кроме Xiaomi Redmi 7A (с MIUI 11). Установка не удалась, вот соответствующий вывод logcat:

01-16 00:43:21.494  1488  2892 I InstallationStatistic: beginInstallSession: 417086238
01-16 00:43:21.600  1488  1658 D com.android.server.pm.PackageManagerServiceInjector: Package verify start
01-16 00:43:21.601  1488  1538 D CompatibilityInfo: mCompatibilityFlags - 0
01-16 00:43:21.601  1488  1538 D CompatibilityInfo: applicationDensity - 320
01-16 00:43:21.601  1488  1538 D CompatibilityInfo: applicationScale - 1.0
01-16 00:43:21.611 24382 24395 D  GuardProvider: start parse apk : /data/app/vmdl417086238.tmp
01-16 00:43:21.618 24382 24395 E i.guardprovide: Invalid ID 0x00000000.
01-16 00:43:21.638  4434 24418 D PackageVerifyedRecevier: verify package /data/app/vmdl417086238.tmp info:  PackageInfo{45d0d6b com.hmdm.sendphoto}
01-16 00:43:21.638  4434 24418 D PackageVerifyedRecevier: verify package /data/app/vmdl417086238.tmp finish true
01-16 00:43:21.639  1488  1658 I com.android.server.pm.PackageManagerServiceInjector: MIUILOG- Install Reject uid: 10161 pkg : com.hmdm.launcher
01-16 00:43:21.639  1488  1658 E PackageInstaller: Commit of session 417086238 failed: Permission Denied

Идентификатор пакета установщика (владельца устройства): com.hmdm.launcher. Идентификатор пакета устанавливаемого приложения - com.hmdm.sendphoto.

Я пытался добавить разрешение «Установить неизвестные приложения», но это не помогло.

Похоже, что приложение должно запрашивать у ОС MIUI какие-то особые (недокументированные) разрешения?

Права владельца устройства были предоставлены приложению посредством регистрации на основе QR-кода.


person vmayorow    schedule 15.01.2020    source источник
comment
это из-за оптимизации miui, см. здесь: in.c.mi.com/ thread-2145537-1-0.html   -  person Vahab Ghadiri    schedule 27.05.2020


Ответы (1)


Также с MIUI 10.3 некоторые приложения отказываются устанавливать / обновлять. Например, я не могу установить обновление Threema обычным способом (и получаю глупую ошибку «не установлено»). logcat показывает, что com.miui.global.packageinstaller.action.verifypackage, вызванный com.android.server.pm.PackageManagerServiceInjector, не работает:

02-16 11:29:05.809  1271  1853 D com.android.server.pm.PackageManagerServiceInjector: Package verify start
02-16 11:29:05.810  1271  1317 D CompatibilityInfo: mCompatibilityFlags - 0
02-16 11:29:05.810  1271  1317 D CompatibilityInfo: applicationDensity - 440
02-16 11:29:05.810  1271  1317 D CompatibilityInfo: applicationScale - 1.0
02-16 11:29:05.812  1271  6228 W ActivityManager: Sending non-protected broadcast com.miui.global.packageinstaller.action.verifypackage from system 3440:com.miui.securitycenter.remote/1000 pkg com.miui.securitycenter. Callers=
02-16 11:29:05.816  3440 25765 E ActivityThread: Failed to find provider info for guard
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier: parseApk
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier: java.lang.IllegalArgumentException: Unknown URI content://guard
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier:   at android.content.ContentResolver.call(Unknown Source:63)
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier:   at com.miui.permcenter.install.q.doInBackground(Unknown Source:17)
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier:   at com.miui.permcenter.install.q.doInBackground(Unknown Source:2)
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier:   at android.os.AsyncTask$2.call(Unknown Source:20)
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier:   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier:   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier:   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
02-16 11:29:05.817  3440 25765 E PackageVerifyedRecevier:   at java.lang.Thread.run(Thread.java:764)
02-16 11:29:05.817  3440 25765 D PackageVerifyedRecevier: verify package /data/app/vmdl216836998.tmp info:  null
02-16 11:29:05.818  3440 25765 D PackageVerifyedRecevier: verify package /data/app/vmdl216836998.tmp finish false
02-16 11:29:05.818  1271  1853 I com.android.server.pm.PackageManagerServiceInjector: MIUILOG- INSTALL_FAILED_VERIFICATION_FAILURE  uid: 10026 pkg : com.google.android.packageinstaller

Что сработало для меня, так это переместить файл apk в /data/local/tmp/, а затем вызвать его как root

pm install -r file.apk
person dvo    schedule 16.02.2020