我有一个“设备所有者”安卓应用程序,它使用PackageInstaller (参见代码,例如,here)静默安装APK。
这段代码在所有安卓7+设备上都能完美运行,除了小米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
安装程序(设备所有者)的程序包ID为com.hmdm.launcher。正在安装的应用程序包ID为com.hmdm.sendphoto。
我尝试添加“安装未知应用程序”权限,但没有帮助。
看起来应用程序必须向MIUI OS请求一些特殊的(未记录的)权限?
设备所有者权限由QR code based enrollment授予应用程序。
发布于 2020-02-16 18:50:11
同样,在MIUI 10.3中,一些应用程序被拒绝安装/更新。例如,我不能以通常的方式安装Threema更新(并且只得到一个愚蠢的错误‘未安装’)。logcat
显示com.android.server.pm.PackageManagerServiceInjector
调用的com.miui.global.packageinstaller.action.verifypackage
失败:
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/
,然后以根用户身份调用
pm install -r file.apk
https://stackoverflow.com/questions/59756381
复制相似问题