[Android] Android 學習筆記:檢視 APK 中的 AndroidManifest.xml

[Android] Android 學習筆記:檢視 APK 中的 AndroidManifest.xml

偶爾會想要看看別人的 APK 中有哪些 intent 可以使用,

這時候直接檢視 APK 中的 AndroidManifest.xml 就可以很快速的知道~

 

1. 使用 aapt 指令

網路上有人提供了方法,只要用 aapt 這個指令就可以:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
aapt dump xmltree <apk_filename> AndroidManifest.xml
aapt dump xmltree <apk_filename> AndroidManifest.xml
aapt dump xmltree <apk_filename> AndroidManifest.xml

 

下面是一個執行的範例:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ aapt dump xmltree test.apk AndroidManifest.xml
N: android=http://schemas.android.com/apk/res/android
E: manifest (line=2)
A: android:versionCode(0x0101021b)=(type 0x10)0x16
A: android:versionName(0x0101021c)="1.2.5" (Raw: "1.2.5")
A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1e
A: android:compileSdkVersionCodename(0x01010573)="11" (Raw: "11")
......
E: activity (line=91)
A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
E: intent-filter (line=96)
E: action (line=97)
A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
E: category (line=99)
A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
E: intent-filter (line=101)
E: action (line=102)
A: android:name(0x01010003)="android.intent.action.VIEW" (Raw: "android.intent.action.VIEW")
E: category (line=104)
A: android:name(0x01010003)="android.intent.category.DEFAULT" (Raw: "android.intent.category.DEFAULT")
E: category (line=105)
A: android:name(0x01010003)="android.intent.category.BROWSABLE" (Raw: "android.intent.category.BROWSABLE")
......
$ aapt dump xmltree test.apk AndroidManifest.xml N: android=http://schemas.android.com/apk/res/android E: manifest (line=2) A: android:versionCode(0x0101021b)=(type 0x10)0x16 A: android:versionName(0x0101021c)="1.2.5" (Raw: "1.2.5") A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1e A: android:compileSdkVersionCodename(0x01010573)="11" (Raw: "11") ...... E: activity (line=91) A: android:screenOrientation(0x0101001e)=(type 0x10)0x1 E: intent-filter (line=96) E: action (line=97) A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN") E: category (line=99) A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER") E: intent-filter (line=101) E: action (line=102) A: android:name(0x01010003)="android.intent.action.VIEW" (Raw: "android.intent.action.VIEW") E: category (line=104) A: android:name(0x01010003)="android.intent.category.DEFAULT" (Raw: "android.intent.category.DEFAULT") E: category (line=105) A: android:name(0x01010003)="android.intent.category.BROWSABLE" (Raw: "android.intent.category.BROWSABLE") ......
$ aapt dump xmltree test.apk AndroidManifest.xml

N: android=http://schemas.android.com/apk/res/android
  E: manifest (line=2)
    A: android:versionCode(0x0101021b)=(type 0x10)0x16
    A: android:versionName(0x0101021c)="1.2.5" (Raw: "1.2.5")
    A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1e
    A: android:compileSdkVersionCodename(0x01010573)="11" (Raw: "11")
......
      E: activity (line=91)
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
        E: intent-filter (line=96)
          E: action (line=97)
            A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
          E: category (line=99)
            A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
        E: intent-filter (line=101)
          E: action (line=102)
            A: android:name(0x01010003)="android.intent.action.VIEW" (Raw: "android.intent.action.VIEW")
          E: category (line=104)
            A: android:name(0x01010003)="android.intent.category.DEFAULT" (Raw: "android.intent.category.DEFAULT")
          E: category (line=105)
            A: android:name(0x01010003)="android.intent.category.BROWSABLE" (Raw: "android.intent.category.BROWSABLE")
......

 

 2. 使用 APK Analyzer

Android SDK 現在內建了 apkanalyzer 這個工具,

可以用來檢視 AndroidManifest.xml:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
apkanalyzer manifest print <apk_filename>
apkanalyzer manifest print <apk_filename>
apkanalyzer manifest print <apk_filename>

 

這是我在 Mac 上執行 apkanalyzer 的一個範例:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ ~/Library/Android/sdk/tools/bin/apkanalyzer manifest print test.apk
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="22"
android:versionName="1.2.5"
android:compileSdkVersion="30"
platformBuildVersionName="11">
<application>
<activity
android:screenOrientation="1">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action
android:name="android.intent.action.VIEW" />
<category
android:name="android.intent.category.DEFAULT" />
<category
android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="hylib.tyml" />
</intent-filter>
</activity>
......
$ ~/Library/Android/sdk/tools/bin/apkanalyzer manifest print test.apk <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="22" android:versionName="1.2.5" android:compileSdkVersion="30" platformBuildVersionName="11"> <application> <activity android:screenOrientation="1"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="hylib.tyml" /> </intent-filter> </activity> ......
$ ~/Library/Android/sdk/tools/bin/apkanalyzer manifest print test.apk

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="22"
    android:versionName="1.2.5"
    android:compileSdkVersion="30"
    platformBuildVersionName="11">

    <application>
        <activity
            android:screenOrientation="1">

            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />
                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>
                <action
                    android:name="android.intent.action.VIEW" />
                <category
                    android:name="android.intent.category.DEFAULT" />
                <category
                    android:name="android.intent.category.BROWSABLE" />
                <data
                    android:scheme="hylib.tyml" />
            </intent-filter>
        </activity>
......

 

用 aapt 指令執行的話,可以看到整理過的資料,

但並不是原始的 AndroidManifest.xml 內容。

如果你習慣看 XML 的話,可以用 apkanalyzer 那個方法囉~

 

參考資料:

Analyze your build with APK Analyzer  |  Android Developers

android – How to view AndroidManifest.xml from APK file? – Stack Overflow

(本頁面已被瀏覽過 845 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料