我很想知道Android AOSP上已知来源列表的位置.
编辑:
如果我的问题令人困惑,我会道歉,但请允许我澄清一下.当您从USB或电子邮件安装APK时,Android会提示您说您正在安装来自未知来源的应用程序.此时,您可以拒绝或接受这一事实并继续前进.为了确定是否正在从未知来源安装应用程序,我假设有一个AOSP附带的已知来源列表.我可能错了,正如一条评论指出,它只是所有未从谷歌游戏商店安装的应用程序.
我想知道这项检查的去向.在AOSP中,如果没有列表,则进行此检查,或者如果有列表,则在此已知来源列表的位置.
解决方法
首先,对于背景,未知来源检查和消息是由INSTALL_NON_MARKET_APP生成的.这个标志出现在少数几个地方,但主要的地方是在PackageInstallerActivity.事实上,这是AOSP中唯一出现并使用的地方达到一定程度.我们来看看这里:
String callerPackage = getCallingPackage(); if (callerPackage != null && intent.getBooleanExtra( Intent.EXTRA_NOT_UNKNOWN_SOURCE,false)) { try { mSourceInfo = mPm.getApplicationInfo(callerPackage,0); if (mSourceInfo != null) { if ((mSourceInfo.flags&ApplicationInfo.FLAG_SYSTEM) != 0) { // System apps don't need to be approved. initiateInstall(); return; } } } catch (NameNotFoundException e) { } } if (!isInstallingUnknownAppsAllowed()) { //ask user to enable setting first showDialogInner(DLG_UNKNOWN_APPS); return; } initiateInstall();
所以PackageInstaller是AOSP附带的一个包,它知道如何处理APK文件的ACTION_VIEW意图. PackageInstaller在允许安装应用程序之前检查两件事.
>该应用程序是一个系统应用程序.如果某个应用是系统应用,它无关紧要,它会告诉包管理员安装您的应用.这意味着如果三星将其三星市场商店作为系统应用程序放在三星设备上,那么它将自动成为值得信赖的来源.事实上,它将跳过第2步.
>如果未设置该系统标志.如果未设置该标志,因此您不是系统应用程序,则因此您不是受信任的来源.话虽这么说,系统应用程序也可以跳过软件包安装程序,然后直接调用隐藏函数installPackage,它可以在PackageManagerService中找到.这似乎是GooglePlayStore的作用,就像我在PackageInstallerActivity上禁用安装功能一样,我仍然可以安装apks就好了.
总结一下:已知的来源是SYSTEM APPS,而不仅仅是从google play下载的应用程序. Google Play完全绕过了INSTALL_NON_MARKET_APP标志,因为它不使用PackageInstaller.如果您创建的应用程序不是系统应用程序,则安装APK的唯一方法是使用PackageInstaller.由于您的应用不是系统应用,因此会检查是否已禁用未知来源.