Android開発

AndroidManifest確認 · 宣言と所属先をまとめて読む

テキストXMLを貼り付けると350ミリ秒後に解析します。自動をオフにするとボタンまたはCtrl/Cmd+Enterで実行できます。

AndroidManifest確認

Manifest XML入力

解析結果

テキスト形式のAndroidManifest.xmlを貼り付けるか、サンプルを読み込んでください。

XMLはこのブラウザータブ内で処理され、アップロードされません。

オプション

このXML内の宣言だけを確認します。既存のテキスト、空白、リソース参照を保持し、ビルド設定や実行時の動作は評価しません。

テキスト形式のAndroidManifest.xmlを貼り付けるか、サンプルを読み込んでください。

ビルド後に増えた権限や、インストールを妨げるコンポーネントを調べるときは、長いファイルから関係する宣言を拾う必要があります。AndroidManifest確認では、権限とコンポーネントを分類し、intent-filterを所属先と一緒に読み取れます。各項目には元の行番号が残ります。

ソースファイルを調べたいときはそのXMLを、配布物を確かめたいときはマージ結果やデコード済みのXMLを使ってください。AndroidManifest.xmlを表示するだけでは分かりにくい構造を整理しますが、渡されていないGradle設定やリソースの値までは補いません。

AndroidManifest確認で見通しをよくする

フィルターの所属先を見失わない

AndroidManifest確認は、権限の要求と定義を別の種類として扱います。同じActivityに二つのintent-filterがあれば、action、category、dataもそれぞれ別に残ります。ランチャー用とウェブリンク用の条件を、一つの一覧へ混ぜずに点検できるマニフェストビューアーです。

マニフェストの木から権限、コンポーネント、インテントフィルターのカードへ線がつながっています。

条件が分かる指摘を読む

exportedの未指定を判定するには対象SDKが必要です。数値が条件を満たす場合と不明な場合を区別し、元の行へ戻れるようにします。debuggableが明示的にtrueならリリース設定の確認を促しますが、指摘がないことを安全性の証明にはしません。

インテントフィルターを持つコンポーネントの隣に、exported宣言の不足を示す位置マーカーがあります。

保存前に確認したい三つのこと

01

調べたい段階のXMLを選ぶ

ソースのuses-sdkはGradleに上書きされることがあり、ライブラリ由来の権限はマージ後に加わります。配布物の確認には完成したマニフェストを用意してください。@string/app_nameなどが残っている項目は、別のリソースを参照しないと値を確定できません。

02

自動更新と手動実行を使い分ける

入力やインデントを変えると350ミリ秒後に更新します。自動を切るとCtrl/Cmd+Enterで実行できます。古い結果のコピーと保存は更新完了まで無効です。表示だけを概要からXMLやJSONへ切り替えても解析内容は変わりません。

03

画面の件数と保存件数を区別する

概要でコピーすると完全なJSONレポートが得られ、最初の50件だけには制限されません。XML表示では整形XMLをコピーします。サンプルやクリアは置換プレビューと文字数を確認して適用し、一度の取り消しで直前の入力と結果へ戻せます。

構造と宣言を追跡するための項目

アプリとSDKの原文値

manifest、uses-sdk、applicationの属性をまとめて表示します。未指定の項目やリソース参照はそのまま残します。.MainActivityのような相対名をpackageから展開しないため、ビルドのnamespaceを見ずに実際のクラス名を推測することはありません。

種類を残した権限とコンポーネント

uses-permission、uses-permission-sdk-23、permissionを分け、maxSdkVersionやprotectionLevelなどの属性を保持します。applicationの直下にあるactivity、activity-alias、service、receiver、providerを抽出し、重複した宣言も消しません。

行番号付きの限定的な規則

applicationの数、名前のない権限やコンポーネント、SDKの大小関係、actionのないフィルター、android名前空間の誤りを確認します。対象SDKが31以上の数値なら、フィルターを持つActivity、別名、サービス、レシーバーのexported未指定を検出します。

整形XMLと完全なJSON

直接のテキストを持たないコンテナには2または4スペースのインデントを追加できます。既存の空白、コメント、混在するテキストは保持されます。概要は各分類を50件ずつ追加表示し、JSONには表示範囲外も含む属性、所属先、行番号、指摘を保存します。

ファイルだけでは決められないこと

対象はテキストのマニフェスト
名前空間のないmanifestをルートとするXML 1.0文書を貼り付けます。encodingはUTF-8、UTF8、または省略に対応します。APK、バイナリAXML、AABは直接読めないため、AndroidのビルドツールでXMLへデコードしてから使ってください。
マージやリソース解決は行わない
Gradle、tools:のマージ指示、リソース表、プレースホルダーを評価しません。SDK値は今の入力に書かれた内容であり、ビルド後の値とは限りません。対象SDKの欠落や相対クラス名を推測して補完する機能もありません。
既存のインデントは残ることがある
改行やタグ間のスペースもXMLのテキストです。直接のテキスト、CDATA、空白保持指定を含む部分木はそのままなので、4スペースに変えても見た目が変わらない場合があります。入力は書き換えず、正規化XMLや署名の検証も保証しません。
安全性や実行時の権限は認定しない
権限宣言は端末で許可された証拠ではなく、exportedがtrueでも直ちに脆弱性とは言えません。allowBackupは宣言値だけを示します。実効的なバックアップ設定、App Linksの通信検証、Intent実行、Android Lintの全規則は対象外です。
処理量には上限がある
入力は500,000個のUTF-16コード単位、20,000ノード、深さ100までです。XMLとJSONの出力はそれぞれ2,000,000コード単位までで、補助文字は2単位を使うことがあります。上限を超えた場合は処理を止め、途中までのレポートを保存させません。
自動修復と外部読込はしない
構文エラーは行と列を見て入力側で修正します。DOCTYPEは拒否し、外部実体や名前空間URLを取得しません。どの権限を削除すべきか、exportedをどちらの値にすべきかはアプリの用途に依存するため、自動変更しません。

AndroidManifest確認のよくある疑問

APK内のAndroidManifest.xmlを読める形で確認するには?

APK内のファイルは通常バイナリAXMLです。Android StudioのAPK Analyzerやapkanalyzer manifest printで読みやすいXMLを取得し、その結果を貼り付けてください。ZIPへ名前を変えて展開しても、マニフェストのデコードは完了しません。

マージされたAndroidManifest.xmlの内容はどう確認できますか?

Android StudioでAndroidManifest.xmlを開き、Merged Manifestタブを選ぶとマージ後の内容と由来を確認できます。そのXMLを本ページに貼り付ければ宣言を整理できますが、このページ自体は複数のマニフェストをマージしたり、各項目の由来を復元したりしません。

Android 12でandroid:exportedの明示が求められるのはなぜですか?

Android 12以降を対象にすると、intent-filterを持つActivity、サービス、レシーバーには明示的なexportedが必要です。本ページはActivityの別名も確認します。対象が31以上の数値なら不足を報告し、対象が不明なら条件付きの説明を残します。trueかfalseかは用途に合わせて決めてください。

uses-permissionとpermissionは何が違いますか?

uses-permissionは既存の権限で制御された機能を使うための要求です。permissionはコンポーネントなどを保護する権限そのものを定義します。一覧では種類を区別しますが、どちらも端末での実際の許可状態を表すものではありません。

minSdkVersionとtargetSdkVersionは何が違いますか?

minSdkVersionはインストール可能な最小APIレベル、targetSdkVersionは対象とするプラットフォームの動作を指定します。表示は原文値のままで、Gradleが供給したり上書きしたりする値は計算しません。配布前には完成したビルドと端末で確認してください。

宣言の抽出や位置が違っていますか?

サンプルで宣言の違いを確かめる

AndroidManifest確認のサンプルで権限の要求と定義を見比べ、exportedが不足するコンポーネントへ行番号から戻ってみてください。