Google カメラとレコーダーのアップデートをサイドロードできない理由は次のとおりです

click fraud protection

Google カメラ アプリまたはレコーダー アプリのアップデートをサイドロードするときに「検証に失敗しました」というエラーが表示された場合は、これを読んで理由を調べてください。

Google が 10 月に Pixel 5 を発売したとき、私たちはその新しいアプリを手に入れることに興奮していました。 (電話自体 かなりクールですも。)Pixel 5 の発売に伴い、新しいバージョンの Googleカメラ そして Googleレコーダー コミュニティと共有したアプリ。 ただし、古い Pixel デバイスの多くのユーザーがアップデートをサイドロードしようとすると、エラー (上に表示) が発生しました。 奇妙なことに、誰もがアップデートのインストールに問題を抱えていたわけではありません。 問題なくインストールできた人もいましたが、新しいバージョンをインストールするために出荷時設定にリセットしなければならなかった人もいます。 この問題は一見ランダムな性質を持っているため、多くの人がバグのせいだと考えています。 この問題はバグに起因するものではなく、Google が Android 11 の新しい API を使用してサイドローディング更新をブロックしたことが原因であると、私たちは今確信しています。

Android 11 を実行している Pixel デバイスに Google カメラ 8.0 以降または Google Recorder 2.0 以降をサイドロードしようとすると、検証が成功しなかったことを示すエラー メッセージが表示されます。 シェル コマンドを使用して APK をサイドロードしようとしても、インストールが失敗する具体的な理由はわかりません。 インストール時に返されるリターン コードは「」です。INSTALL_FAILED_VERIFICATION_FAILURE」というメッセージが表示されますが、残念ながら、検証が成功しない理由はわかりません。 logcat を調べることで、検証が失敗した理由を正確に知ることができます。

AppIntegrityManagerServiceImpl: Integritycheckofcom.google.android.GoogleCameraresult: DENYdueto[Rule: (PACKAGE_NAME EQ com.google.android.GoogleCamera) AND (VERSION_CODE GTE 32045130) AND (APP_CERTIFICATE EQ F0FD6C5B410F25CB25C3B53346C8972FAE30F8EE7411DF910480AD6B2D60DB83) AND NOT (INSTALLER_NAME EQ com.android.vending), DENY]

このメッセージによると、「INSTALLER_NAME」が Google Play ストアのパッケージ名である「com.android.vending」と一致しないため、Google カメラのインストールの整合性チェックが失敗しました。 (私は APKMirror インストーラー アプリを使用して Google カメラ 8.0 をインストールしようとしていましたが、それだけの価値があります。) このメッセージは「」によってシステム ログに追加されました。AppIntegrityManagerServiceImpl」、これは Android の新しい「アプリの整合性」機能の一部です。 AOSP のコードによると、App Integrity は、パッケージ マネージャーの既存の APK 署名検証に加えて、追加のチェック層を提供するように設計されています。 App Integrity API は、次のセットを使用しているようです。 ルール インストールを許可するか拒否するかを決定します。 ルールはシステム アプリ (Google Play Services であると考えられます) によって提供され、 ファイルに保存されている.

さらに、アプリの整合性 も呼びます という別のクラス ソーススタンプ検証者 「ソーススタンプ」がマニフェストのメタデータに埋め込まれている場合。 たとえば、Google カメラ アプリのマニフェストからの「ソース スタンプ」と考えられるものは次のとおりです。

<meta-dataandroid: name="com.android.stamp.source"android: value="https://play.google.com/store"/>

私たちが知る限り、ソーススタンプはパッケージインストーラーの署名を検証するために使用されます。 したがって、たとえば、次のような場合でも、AppIntegrity をだましてインストールを許可することはできません。 Playストアになりすました インストーラーとして。

これ以外では、Google が AppIntegrity と関連 API をどのように使用して、Google カメラ アプリと Google レコーダー アプリのサイドローディング更新をブロックしているかを正確に知ることはできませんでした。 Google Play Services APK を簡単に調べると、これらの API が使用されていることがわかりますが、コードが難読化されすぎてすべてを理解することができません。 整合性ルールが保存されているディレクトリ (/data/system/integrity_rules) も見つかりましたが、シリアル化されたデータしか含まれていないため、ほとんど役に立ちませんでした。 また、整合性検証を無効にする方法も見つかりませんでした (単純に行うほど簡単ではないようです) 設定を変更する)ただし、一部の人にとって出荷時設定へのリセットが機能する理由は、Google Play 開発者サービスがルールセットを初期化してインストールをブロックする機会が得られないためであると考えられます。 ただし、logcat メッセージと Android 11 でのこれらの新しい API の導入は、これがすべて仕様によるものであり、バグではないことを強く示唆しています。

Google はこれらの API の使用について公式にコメントしておらず (また、コメントすることも期待していません)、コメントを求めても返答はありませんでした。 ただし、サイドロード更新がブロックされる理由はいくつか考えられます。 まず、ユーザーが自分のデバイスに間違ったバージョンのアプリをインストールするのを防ぐことができます。 Google は、特定のバージョンのアプリを特定の Pixel デバイスに配信します。 たとえば、Device Personalization Services アプリのいくつかのバージョンがオンラインで見つかります。 これらはすべて Pixel デバイスにインストール可能ですが、ある時点では次のことが可能でした。 ライブキャプション機能が失われる Pixel 4 では、古い Pixel デバイス用に構築されたバージョンをダウンロードしてください。 もう 1 つの理由は、Google が SourceStampVerifier クラスで説明しているように、「不正配布に関するアプリの追跡可能性を向上させる」ことである可能性があります。

これまでのところ、App Bundle 形式を使用する Google のアプリはほんのわずかです (Google カメラや Google レコーダーなど)。 Play ストア以外のインストールをブロックしますが、同社がこの動作を他のアプリにも拡張するかどうかはわかりません すべてが AAB 形式に切り替わると、. また、アプリ バンドルへの切り替えにアプリの整合性の実装が必要かどうかも検討しましたが、Google はすでに 解決策があります 必要な分割がすべて含まれていないアプリをユーザーがインストールしようとしたときに処理します。 いずれにせよ、Google が自社アプリのすべてのサイドローディングをブロックするつもりはないと思われますが、これらのツールは確かにブロックすることを許可します。

この記事の作成にご協力いただいた開発者の vvb2060、avirasp、および Quinny899 に感謝します。使用ライセンスを提供してくださった PNF Software に感謝します JEB デコンパイラ、Android アプリケーション用のプロフェッショナル グレードのリバース エンジニアリング ツールです。