そのため、未知のソースのチェックがどのように行われるかを確認するために、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 は、APK ファイルの ACTION_VIEW インテントを処理する方法を理解する AOSP に含まれるパッケージです。PackageInstaller は、アプリのインストールを許可する前に 2 つのことをチェックします。
アプリがシステム アプリであること。アプリがシステム アプリの場合は気にせず、パッケージ マネージャーにアプリをインストールするように指示します。これは、Samsung が Samsung マーケット ストアを Samsung デバイスのシステム アプリとして配置した場合、自動的に信頼できるソースになることを意味します。実際、ここではステップ 2 をスキップします。
そのシステムフラグが設定されていない場合。そのフラグが設定されておらず、システム アプリではない場合、信頼できるソースではありません。そうは言っても、システム アプリはパッケージ インストーラーをスキップして、直接PackageManagerServiceにある隠し関数 installPackage を呼び出すこともできます。PackageInstallerActivity のインストール機能を無効にしても、apk を問題なくインストールできるため、これは GooglePlayStore の機能のようです。
要約すると、既知のソースはシステムアプリであり、Google Play からダウンロードしたアプリケーションだけではありません。Google Play は PackageInstaller を使用しないため、INSTALL_NON_MARKET_APP フラグを完全に回避します。システム アプリではないアプリを作成する場合、APK をインストールする唯一の方法は PackageInstaller を使用することです。アプリはシステム アプリではないため、不明なソースが無効になっているかどうかを確認します。