12

不明なソースからの apk ファイルをインストールすると、Android は文句を言い、その apk ファイルをインストールするかどうかを確認します。このファイルは、既知のソースのリストにチェックする必要があります。

既知のソースのリストが Android AOSP のどこにあるか知りたいです。

編集:質問がわかりにくい場合は申し訳ありませんが、明確にしてください。USB から APK をインストールするか、Android に電子メールを送信すると、不明なソースからアプリをインストールしていることを示すプロンプトが表示されます。この時点で、その事実を否定することも受け入れることもできます。アプリが未知のソースからインストールされているかどうかを判断するために、AOSP に含まれている既知のソースのリストがあると想定しています。Google Playストアからインストールされていないすべてのアプリであるとコメントが指摘しているように、私は間違っているかもしれません.

このチェックがどこで行われるかを確認したいと思います。リストがない場合は AOSP のどこでこのチェックが行われ、リストがある場合は既知のソースのリストがどこにありますか。

4

2 に答える 2

26

そのため、未知のソースのチェックがどのように行われるかを確認するために、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 つのことをチェックします。

  1. アプリがシステム アプリであること。アプリがシステム アプリの場合は気にせず、パッケージ マネージャーにアプリをインストールするように指示します。これは、Samsung が Samsung マーケット ストアを Samsung デバイスのシステム アプリとして配置した場合、自動的に信頼できるソースになることを意味します。実際、ここではステップ 2 をスキップします。

  2. そのシステムフラグが設定されていない場合。そのフラグが設定されておらず、システム アプリではない場合、信頼できるソースではありません。そうは言っても、システム アプリはパッケージ インストーラーをスキップして、直接PackageManagerServiceにある隠し関数 installPackage を呼び出すこともできます。PackageInstallerActivity のインストール機能を無効にしても、apk を問題なくインストールできるため、これは GooglePlayStore の機能のようです。

要約すると、既知のソースはシステムアプリであり、Google Play からダウンロードしたアプリケーションだけではありません。Google Play は PackageInstaller を使用しないため、INSTALL_NON_MARKET_APP フラグを完全に回避します。システム アプリではないアプリを作成する場合、APK をインストールする唯一の方法は PackageInstaller を使用することです。アプリはシステム アプリではないため、不明なソースが無効になっているかどうかを確認します。

于 2013-09-09T17:10:47.743 に答える