10

パッケージ署名を相互にチェックして、互換性がないかどうかを判断しています(異なるキーストアに対してコンパイルされています)。ほとんどの場合、単一のエントリを含むコレクションであることに気付きPackageInfo.signaturesました。これは私にとって理にかなっています。デバッグ キーストアまたは製品キーストアのいずれかを使用してアプリをビルドし、それによってパッケージの署名が決定されます (この時点での apk 署名プロセスの単純な理解です)。この情報を (フラグを渡すことによってPackageManager.GET_SIGNATURES) 特に要求しない場合、これが null になることはわかっていますが、複数ある場合についてはよくわかりません。

いくつかのデバッグ コードを作成し、それを個人の Android フォンで実行しました。私の電話にインストールされた 300 以上のパッケージのうち、私のサービス プロバイダー (com.verizon.* 名前空間) からのものと思われるいくつかのパッケージを除いて、すべてが 1 つの署名を持っていました。

私のユース ケース (パッケージ管理) では、アプリ パッケージが単一の署名を持つことを考慮しても問題ないと思いますが、エッジ ケースのバグを引き起こす可能性のあるものを見逃していないことを確認したいと考えています。

4

1 に答える 1

16

あなたの目的のために、Android アプリケーションが単一の署名を持っていると仮定することは完全に受け入れられるようです。Android APKは複数の署名を使用してコンパイルできますが、推奨されておらず、広範囲にテストされていません。(なぜ Verizon がそうしているのか? 誰にもわからない.)

Android 開発の頼りになる女性であるDianne Hackbornからこのアーカイブを見つけました。

Q : jar 署名者が 1 つの jar ファイルで複数の署名をサポートしていることは知っています。APK ファイルに 2 つの有効な署名がある場合、この APK は両方の署名者が提供する署名レベルのアクセス許可にアクセスできるということですか?

A : 理論的には、複数の署名で何かが行われますが、誰もこれを使用したことがないため、機能しない可能性があります。これには、おそらく同じ所有者からのものである可能性が高いため、2 つの署名を同じものにエイリアスするという副作用もあります (うまくいく場合)。

Dianneからの別のビット(「they」ではなく「it」の使用と、「certificates」の代わりに「certificate」の使用に注意してください):

Q : PackageInfo.signatures: 何を返しますか?

A : .apk の署名に使用された証明書です。

でも。Android ソース Git: Test for Checking Package Signatures (Bug 4596332)で複数の署名へのテスト参照を見つけたことは注目に値します。さらに、AndroidBackupManagerServiceコード(およびその他の Android ソース コード) は、複数の署名を確実にチェックします。

したがって、これが私の結論です。特定のパッケージのセキュリティとコンパイルが重要な状況でコーディングしていない限り、複数の署名について心配する必要はありません。(ただし、必要に応じて複数の署名に対応しても問題はないようです。)

少なくともある程度満足できることを願っています。

于 2012-11-29T04:35:26.240 に答える