Android已知的来源

当您安装来自未知来源的apk文件时,Android会发出抱怨,并validation您是否要安装该apk文件。 这个文件必须被检查到一个已知源的列表。

我有兴趣知道Android AOSP上的已知来源列表。

编辑:我道歉,如果我的问题是困惑,但让我澄清。 当您从USB或电子邮件安装APK时,Android会提示您说您正在安装来自未知来源的应用程序。 在这一点上,你可以否认或接受这个事实,继续前进。 为了确定是否从未知来源安装应用程序,我假设已经包含在AOSP中的已知来源的列表。 我可能是错的,正如一个评论指出,它只是所有的应用程序不是从谷歌播放存储安装。

我想看看这个检查完成的地方。 在AOSP中,如果没有列表,则进行此项检查;如果有列表,则在已知源列表的哪个位置。

Solutions Collecting From Web of "Android已知的来源"

所以我现在查看了AOSP源代码,看看未知源代码检查是如何完成的。 它比已知的源= android游戏更复杂。

所以首先为了背景, 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在允许安装应用程序之前检查两件事情。

  1. 该应用程序是一个系统应用程序。 如果一个应用程序是一个系统应用程序,它不在乎,它告诉包pipe理器来安装你的应用程序。 这意味着,如果三星把他们的三星市场商店作为一个系统应用程序在三星设备上,那么它是自动信任的来源。 事实上,它会跳过这里的第2步。

  2. 如果该系统标志没有设置。 如果该标志没有设置,因此你不是一个系统应用程序,那么你是不是一个可信赖的来源。 也就是说,系统应用程序也可以跳过程序包安装程序,直接调用可以在PackageManagerService中find的隐藏函数installPackage。 这似乎是GooglePlayStore所做的,因为当我禁用PackageInstallerActivity上的安装function时,我仍然可以安装apks。

所以总结:已知的来源是系统应用程序不只是从谷歌播放下载的应用程序。 谷歌播放完全绕过了INSTALL_NON_MARKET_APP标志,因为它不使用PackageInstaller。 如果您创build的应用程序不是系统应用程序,则安装APK的唯一方法是使用PackageInstaller。 由于您的应用程序不是系统应用程序,它将检查是否禁用未知来源。

正如评论所指出的那样, “来源”一词的意思是“产地” (如应用程序包库), 而不是“源代码”。 这与AOSP完全无关。

通常,这意味着“从Google Play下载的应用程序”(以及之前的Android Market)。

我说“通常”,因为你可以想象定义另一个来源在自定义叉 – 没有遇到这个人“虽然(不知道如何与三星的应用程序商店)。