Android 命令行工具-apkanalyzer

https://blog.csdn.net/iEearth/article/details/84589858

文章目录

apkanalyzer,从名字就可以看出这是一个分析apk的工具,最简单的使用方法是在AndroidStudio中点击Build,然后选择Analyze APK...,本文介绍如何在命令行使用apkanalyzer。

apkanalyzer在Android SDK中,位置为android_sdk/tools/bin/apkanalyzer
apkanalyzer的语法如下:

apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
  • 1
  • global-options:可选项,- -human-readable,可缩写为-h,表示以可读性好的格式打印文件大小。
  • subject:必选项,包括apk、files、manifest、dex、resources。
  • verb:必选项,根据subject的不同而不同。
  • options:可选项,根据subject和verb的不同而不同。
  • apk-file:必选项,表示需要分析的apk。
  • apk-file2:仅在比较两个apk时才需要。

下面详细说明apkanalyzer的用法。

1 打印App ID、版本信息

apkanalyzer apk summary apk-file

$ ./apkanalyzer apk summary Animal.apk 
a.b.animal	27	8.1.0
  • 1
  • 2
  • 3
  • 4

2 打印apk的文件大小

apkanalyzer apk file-size apk-file

$ ./apkanalyzer apk file-size Animal.apk 
376139
  • 1
  • 2
  • 3
  • 4

3 打印apk的download大小

apkanalyzer apk download-size apk-file

$ ./apkanalyzer apk download-size Animal.apk 
369340
  • 1
  • 2
  • 3
  • 4

4 打印apk用到的feature

apkanalyzer apk features [options] apk-file
options包括:--not-required

$ ./apkanalyzer apk features Animal.apk 
android.hardware.faketouch implied: default feature for all apps
  • 1
  • 2
  • 3
  • 4
  • 5

5 比较两个apk的大小

apkanalyzer apk compare [options] apk-file apk-file2
options包括:--different-only、--files-only、--patch-size

$ ./apkanalyzer apk compare Animal.apk Animal2.apk 
376139	301359	-74780	/
8804	8828	24	/classes.dex
6192	6192	0	/META-INF/
2191	2191	0	/META-INF/MANIFEST.MF
1722	1722	0	/META-INF/CERT.RSA
2279	2279	0	/META-INF/CERT.SF
2764	2764	0	/AndroidManifest.xml
4112	4112	0	/resources.arsc
367539	292731	-74808	/res/
1104	1104	0	/res/mipmap-anydpi-v26/
552	552	0	/res/mipmap-anydpi-v26/ic_launcher_round.xml
552	552	0	/res/mipmap-anydpi-v26/ic_launcher.xml
1208	1208	0	/res/layout/
1208	1208	0	/res/layout/layout_main.xml
3416	3416	0	/res/drawable-v24/
760	760	0	/res/drawable-v24/ic_launcher_foreground_1.xml
2656	2656	0	/res/drawable-v24/ic_launcher_foreground.xml
25133	25133	0	/res/mipmap-xxxhdpi-v4/
16187	16187	0	/res/mipmap-xxxhdpi-v4/ic_launcher_round.png
8946	8946	0	/res/mipmap-xxxhdpi-v4/ic_launcher.png
18161	18161	0	/res/mipmap-xxhdpi-v4/
11607	11607	0	/res/mipmap-xxhdpi-v4/ic_launcher_round.png
6554	6554	0	/res/mipmap-xxhdpi-v4/ic_launcher.png
12680	12680	0	/res/mipmap-xhdpi-v4/
8004	8004	0	/res/mipmap-xhdpi-v4/ic_launcher_round.png
4676	4676	0	/res/mipmap-xhdpi-v4/ic_launcher.png
5816	5816	0	/res/mipmap-mdpi-v4/
3487	3487	0	/res/mipmap-mdpi-v4/ic_launcher_round.png
2329	2329	0	/res/mipmap-mdpi-v4/ic_launcher.png
9165	9165	0	/res/mipmap-hdpi-v4/
5843	5843	0	/res/mipmap-hdpi-v4/ic_launcher_round.png
3322	3322	0	/res/mipmap-hdpi-v4/ic_launcher.png
290856	216048	-74808	/res/drawable/
6280	6280	0	/res/drawable/ic_launcher_background.xml
284576	209768	-74808	/res/drawable/animal.jpg
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

6 打印apk中的文件列表

apkanalyzer files list apk-file

$ ./apkanalyzer files list Animal.apk 
/
/META-INF/
/META-INF/MANIFEST.MF
/META-INF/CERT.RSA
/META-INF/CERT.SF
/classes.dex
/AndroidManifest.xml
/resources.arsc
/res/
/res/mipmap-anydpi-v26/
/res/mipmap-anydpi-v26/ic_launcher_round.xml
/res/mipmap-anydpi-v26/ic_launcher.xml
/res/layout/
/res/layout/layout_main.xml
/res/drawable-v24/
/res/drawable-v24/ic_launcher_foreground_1.xml
/res/drawable-v24/ic_launcher_foreground.xml
/res/mipmap-xxxhdpi-v4/
/res/mipmap-xxxhdpi-v4/ic_launcher_round.png
/res/mipmap-xxxhdpi-v4/ic_launcher.png
/res/mipmap-xxhdpi-v4/
/res/mipmap-xxhdpi-v4/ic_launcher_round.png
/res/mipmap-xxhdpi-v4/ic_launcher.png
/res/mipmap-xhdpi-v4/
/res/mipmap-xhdpi-v4/ic_launcher_round.png
/res/mipmap-xhdpi-v4/ic_launcher.png
/res/mipmap-mdpi-v4/
/res/mipmap-mdpi-v4/ic_launcher_round.png
/res/mipmap-mdpi-v4/ic_launcher.png
/res/mipmap-hdpi-v4/
/res/mipmap-hdpi-v4/ic_launcher_round.png
/res/mipmap-hdpi-v4/ic_launcher.png
/res/drawable/
/res/drawable/ic_launcher_background.xml
/res/drawable/animal.jpg
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

7 打印apk中某个文件的内容(二进制内容会原样显示)

apkanalyzer files cat --file path apk-file

$ ./apkanalyzer files cat --file /AndroidManifest.xml Animal.apk 
�
�'�6Pn������,:L����"6Nv����l�8Pd�����
                                                                       sharedUserId
                                                                                   versionCode
minSdkVersiontargetSdkVersionname                                                           versionName
                                   allowBackuphardwareAcceleratediconlabel	roundIcon
                                                                                         supportsRtlthemeandroid*http://schemas.android.com/apk/res/androidpackageplatformBuildVersionCodeplatformBuildVersionNammanifest
a.b.animalandroid.uid.system8.1.02uses-sdkuses-permission'android.permission.MODIFY_THEME_OVERLAY*android.permission.CHANGE_OVERLAY_PACKAGES(android.permission.INTERACT_ACROSS_USERS-android.permission.INTERACT_ACROSS_USERS_FULL
                                              application
intent-filteractionandroid.intent.action.MAIcategoryandroid.intent.category.DEFAULT�<
                                                                                        
������������������������L����������������������8����������������8��������������������������������8	��������	���������
                                             ��������
                                                       ���	��������������������
                                                                                            �������
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

8 打印AndroidManifest.xml(文本格式)

apkanalyzer manifest print apk-file

$ ./apkanalyzer manifest print Animal.apk 
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:sharedUserId="android.uid.system"
    android:versionCode="27"
    android:versionName="8.1.0"
    package="a.b.animal"
    platformBuildVersionCode="27"
    platformBuildVersionName="8.1.0">

    <uses-sdk
        android:minSdkVersion="27"
        android:targetSdkVersion="27" />

    <uses-permission
        android:name="android.permission.MODIFY_THEME_OVERLAY" />

    <uses-permission
        android:name="android.permission.CHANGE_OVERLAY_PACKAGES" />

    <uses-permission
        android:name="android.permission.INTERACT_ACROSS_USERS" />

    <uses-permission
        android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />

    <application
        android:theme="@ref/0x7f070000"
        android:label="@ref/0x7f060000"
        android:icon="@ref/0x7f030000"
        android:name=".AnimalApp"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:supportsRtl="true"
        android:roundIcon="@ref/0x7f030001">

        <activity
            android:name=".MainActivity">

            <intent-filter>

                <action
                    android:name="android.intent.action.MAIN" />

                <category
                    android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

9 打印App ID

apkanalyzer manifest application-id apk-file

$ ./apkanalyzer manifest application-id Animal.apk 
a.b.animal
  • 1
  • 2
  • 3
  • 4

10 打印版本名

apkanalyzer manifest version-name apk-file

$ ./apkanalyzer manifest version-name Animal.apk 
8.1.0
  • 1
  • 2
  • 3
  • 4

11 打印版本号

apkanalyzer manifest version-code apk-file

$ ./apkanalyzer manifest version-code Animal.apk 
27
  • 1
  • 2
  • 3
  • 4

12 打印最低的SDK版本

apkanalyzer manifest min-sdk apk-file

$ ./apkanalyzer manifest min-sdk Animal.apk 
27
  • 1
  • 2
  • 3
  • 4

13 打印目标SDK版本

apkanalyzer manifest target-sdk apk-file

$ ./apkanalyzer manifest target-sdk Animal.apk 
27
  • 1
  • 2
  • 3
  • 4

14 打印用到的权限列表

apkanalyzer manifest permissions apk-file

$ ./apkanalyzer manifest permissions Animal.apk 
android.permission.CHANGE_OVERLAY_PACKAGES
android.permission.MODIFY_THEME_OVERLAY
android.permission.INTERACT_ACROSS_USERS_FULL
android.permission.INTERACT_ACROSS_USERS
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

15 打印是否debug模式

apkanalyzer manifest debuggable apk-file

$ ./apkanalyzer manifest debuggable Animal.apk 
false
  • 1
  • 2
  • 3
  • 4

16 打印apk中的dex文件列表

apkanalyzer dex list apk-file

$ ./apkanalyzer dex list Animal.apk 
classes.dex
  • 1
  • 2
  • 3
  • 4

17 打印dex文件中引用的方法个数(默认打印所有的dex文件)

apkanalyzer dex references [--files path] [--files path2] apk-file

$ ./apkanalyzer dex references Animal.apk 
classes.dex	64
  • 1
  • 2
  • 3
  • 4

18 打印dex文件中的类信息

apkanalyzer dex packages [option1 option2 ...] apk-file
options包括:--defined-only、--files、--proguard-folder file、--proguard-mappings file、--proguard-seeds file、--proguard-usages file、--show-removed

$ ./apkanalyzer dex packages Animal.apk 
P d 28	64	5214	<TOTAL>
P d 28	31	4448	a
P d 28	31	4448	a.b
P d 28	31	4448	a.b.animal
C d 9	12	1136	a.b.animal.MainActivity
M d 1	1	58	a.b.animal.MainActivity int -get0(a.b.animal.MainActivity)
M d 1	1	58	a.b.animal.MainActivity android.content.om.IOverlayManager -get1(a.b.animal.MainActivity)
M d 1	1	55	a.b.animal.MainActivity <init>()
M d 1	1	453	a.b.animal.MainActivity void onCreate(android.os.Bundle)
M d 1	1	74	a.b.animal.MainActivity void onDestroy()
M d 1	1	73	a.b.animal.MainActivity void onPause()
M d 1	1	73	a.b.animal.MainActivity void onResume()
M d 1	1	73	a.b.animal.MainActivity void onStart()
M d 1	1	74	a.b.animal.MainActivity void onStop()
M r 0	1	26	a.b.animal.MainActivity android.view.View findViewById(int)
M r 0	1	20	a.b.animal.MainActivity android.content.res.Resources getResources()
M r 0	1	26	a.b.animal.MainActivity void setContentView(int)
F d 0	0	12	a.b.animal.MainActivity java.lang.String TAG
F d 0	0	10	a.b.animal.MainActivity int mCurrentUserId
F d 0	0	10	a.b.animal.MainActivity android.content.om.IOverlayManager mOverlayManager
C d 4	4	369	a.b.animal.AnimalApp
M d 1	1	75	a.b.animal.AnimalApp <init>()
M d 1	1	109	a.b.animal.AnimalApp void onConfigurationChanged(android.content.res.Configuration)
M d 1	1	66	a.b.animal.AnimalApp void onCreate()
M d 1	1	66	a.b.animal.AnimalApp void onTerminate()
F d 0	0	12	a.b.animal.AnimalApp java.lang.String TAG
C d 2	2	620	a.b.animal.MainActivity$1
M d 1	1	73	a.b.animal.MainActivity$1 <init>(a.b.animal.MainActivity)
M d 1	1	462	a.b.animal.MainActivity$1 void onClick(android.view.View)
F d 0	0	11	a.b.animal.MainActivity$1 a.b.animal.MainActivity this$0
C d 2	2	479	a.b.animal.MainActivity$2
M d 1	1	75	a.b.animal.MainActivity$2 <init>(a.b.animal.MainActivity)
M d 1	1	319	a.b.animal.MainActivity$2 void onClick(android.view.View)
F d 0	0	11	a.b.animal.MainActivity$2 a.b.animal.MainActivity this$0
C d 2	2	479	a.b.animal.MainActivity$3
M d 1	1	75	a.b.animal.MainActivity$3 <init>(a.b.animal.MainActivity)
M d 1	1	319	a.b.animal.MainActivity$3 void onClick(android.view.View)
F d 0	0	11	a.b.animal.MainActivity$3 a.b.animal.MainActivity this$0
C d 1	1	123	a.b.animal.R$attr
M d 1	1	55	a.b.animal.R$attr <init>()
C d 1	1	139	a.b.animal.R$color
M d 1	1	55	a.b.animal.R$color <init>()
F d 0	0	15	a.b.animal.R$color int color_default
C d 1	1	184	a.b.animal.R$drawable
M d 1	1	55	a.b.animal.R$drawable <init>()
F d 0	0	15	a.b.animal.R$drawable int animal
F d 0	0	15	a.b.animal.R$drawable int ic_launcher_background
F d 0	0	15	a.b.animal.R$drawable int ic_launcher_foreground
F d 0	0	15	a.b.animal.R$drawable int ic_launcher_foreground_1
C d 1	1	184	a.b.animal.R$id
M d 1	1	55	a.b.animal.R$id <init>()
F d 0	0	15	a.b.animal.R$id int image_animal
F d 0	0	15	a.b.animal.R$id int theme_default
F d 0	0	15	a.b.animal.R$id int theme_dog
F d 0	0	15	a.b.animal.R$id int theme_monkey
C d 1	1	139	a.b.animal.R$layout
M d 1	1	55	a.b.animal.R$layout <init>()
F d 0	0	15	a.b.animal.R$layout int layout_main
C d 1	1	154	a.b.animal.R$mipmap
M d 1	1	55	a.b.animal.R$mipmap <init>()
F d 0	0	15	a.b.animal.R$mipmap int ic_launcher
F d 0	0	15	a.b.animal.R$mipmap int ic_launcher_round
C d 1	1	184	a.b.animal.R$string
M d 1	1	55	a.b.animal.R$string <init>()
F d 0	0	15	a.b.animal.R$string int app_name
F d 0	0	15	a.b.animal.R$string int theme_default
F d 0	0	15	a.b.animal.R$string int theme_dog
F d 0	0	15	a.b.animal.R$string int theme_monkey
C d 1	1	139	a.b.animal.R$style
M d 1	1	55	a.b.animal.R$style <init>()
F d 0	0	15	a.b.animal.R$style int AppTheme
C d 1	1	119	a.b.animal.R
M d 1	1	55	a.b.animal.R <init>()
P r 0	18	430	android
P r 0	9	186	android.app
C r 0	7	146	android.app.Activity
M r 0	1	20	android.app.Activity <init>()
M r 0	1	26	android.app.Activity void onCreate(android.os.Bundle)
M r 0	1	20	android.app.Activity void onDestroy()
M r 0	1	20	android.app.Activity void onPause()
M r 0	1	20	android.app.Activity void onResume()
M r 0	1	20	android.app.Activity void onStart()
M r 0	1	20	android.app.Activity void onStop()
C r 0	1	20	android.app.ActivityManager
M r 0	1	20	android.app.ActivityManager int getCurrentUser()
C r 0	1	20	android.app.Application
M r 0	1	20	android.app.Application <init>()
P r 0	4	108	android.content
P r 0	3	82	android.content.om
C r 0	2	56	android.content.om.IOverlayManager
M r 0	1	26	android.content.om.IOverlayManager java.util.Map getAllOverlays(int)
M r 0	1	30	android.content.om.IOverlayManager boolean setEnabledExclusive(java.lang.String,boolean,int)
C r 0	1	26	android.content.om.IOverlayManager$Stub
M r 0	1	26	android.content.om.IOverlayManager$Stub android.content.om.IOverlayManager asInterface(android.os.IBinder)
P r 0	1	26	android.content.res
C r 0	1	26	android.content.res.Resources
M r 0	1	26	android.content.res.Resources int getColor(int)
P r 0	2	58	android.util
C r 0	2	58	android.util.Log
M r 0	1	28	android.util.Log int d(java.lang.String,java.lang.String)
M r 0	1	30	android.util.Log int w(java.lang.String,java.lang.String,java.lang.Throwable)
P r 0	2	52	android.widget
C r 0	2	52	android.widget.Button
M r 0	1	26	android.widget.Button void setBackgroundColor(int)
M r 0	1	26	android.widget.Button void setOnClickListener(android.view.View$OnClickListener)
P r 0	1	26	android.os
C r 0	1	26	android.os.ServiceManager
M r 0	1	26	android.os.ServiceManager android.os.IBinder getService(java.lang.String)
P r 0	15	336	java
P r 0	8	184	java.lang
C r 0	6	144	java.lang.StringBuilder
M r 0	1	20	java.lang.StringBuilder <init>()
M r 0	1	26	java.lang.StringBuilder java.lang.StringBuilder append(int)
M r 0	1	26	java.lang.StringBuilder java.lang.StringBuilder append(java.lang.Object)
M r 0	1	26	java.lang.StringBuilder java.lang.StringBuilder append(java.lang.String)
M r 0	1	26	java.lang.StringBuilder java.lang.StringBuilder append(boolean)
M r 0	1	20	java.lang.StringBuilder java.lang.String toString()
C r 0	1	20	java.lang.Object
M r 0	1	20	java.lang.Object <init>()
C r 0	1	20	java.lang.Iterable
M r 0	1	20	java.lang.Iterable java.util.Iterator iterator()
P r 0	7	152	java.util
C r 0	3	66	java.util.Map
M r 0	1	26	java.util.Map java.lang.Object get(java.lang.Object)
M r 0	1	20	java.util.Map boolean isEmpty()
M r 0	1	20	java.util.Map java.util.Set keySet()
C r 0	2	40	java.util.Iterator
M r 0	1	20	java.util.Iterator boolean hasNext()
M r 0	1	20	java.util.Iterator java.lang.Object next()
C r 0	2	46	java.util.List
M r 0	1	26	java.util.List java.lang.Object get(int)
M r 0	1	20	java.util.List int size()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136

19 打印类的字节码或者方法的反编译格式

apkanalyzer dex code --class class [--method method]

$ ./apkanalyzer dex code --class a.b.animal.MainActivity Animal.apk 
.class public La/b/animal/MainActivity;
.super Landroid/app/Activity;
.source "MainActivity.java"


# static fields
.field private static final TAG:Ljava/lang/String; = "Animal"


# instance fields
.field private mCurrentUserId:I

.field private mOverlayManager:Landroid/content/om/IOverlayManager;


# direct methods
.method static synthetic -get0(La/b/animal/MainActivity;)I
    .registers 2
    .param p0, "-this"    # La/b/animal/MainActivity;

    .prologue
    iget v0, p0, La/b/animal/MainActivity;->mCurrentUserId:I

    return v0
.end method

.method static synthetic -get1(La/b/animal/MainActivity;)Landroid/content/om/IOverlayManager;
    .registers 2
    .param p0, "-this"    # La/b/animal/MainActivity;

    .prologue
    iget-object v0, p0, La/b/animal/MainActivity;->mOverlayManager:Landroid/content/om/IOverlayManager;

    return-object v0
.end method

.method public constructor <init>()V
    .registers 1

    .prologue
    .line 19
    invoke-direct {p0}, Landroid/app/Activity;-><init>()V

    return-void
.end method


# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
    .registers 9
    .param p1, "savedInstanceState"    # Landroid/os/Bundle;

    .prologue
    const/high16 v6, 0x7f050000

    .line 27
    const-string/jumbo v3, "Animal"

    const-string/jumbo v4, "onCreate"

    invoke-static {v3, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 29
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

    .line 31
    const/high16 v3, 0x7f040000

    invoke-virtual {p0, v3}, La/b/animal/MainActivity;->setContentView(I)V

    .line 33
    invoke-static {}, Landroid/app/ActivityManager;->getCurrentUser()I

    move-result v3

    iput v3, p0, La/b/animal/MainActivity;->mCurrentUserId:I

    .line 34
    const-string/jumbo v3, "Animal"

    new-instance v4, Ljava/lang/StringBuilder;

    invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V

    const-string/jumbo v5, "CurrentUser "

    invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    iget v5, p0, La/b/animal/MainActivity;->mCurrentUserId:I

    invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v4

    invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v4

    invoke-static {v3, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 37
    const-string/jumbo v3, "overlay"

    invoke-static {v3}, Landroid/os/ServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder;

    move-result-object v3

    .line 36
    invoke-static {v3}, Landroid/content/om/IOverlayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/om/IOverlayManager;

    move-result-object v3

    iput-object v3, p0, La/b/animal/MainActivity;->mOverlayManager:Landroid/content/om/IOverlayManager;

    .line 38
    const-string/jumbo v3, "Animal"

    new-instance v4, Ljava/lang/StringBuilder;

    invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V

    const-string/jumbo v5, "OverlayManager "

    invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    iget-object v5, p0, La/b/animal/MainActivity;->mOverlayManager:Landroid/content/om/IOverlayManager;

    invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    move-result-object v4

    invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v4

    invoke-static {v3, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 40
    const v3, 0x7f080001

    invoke-virtual {p0, v3}, La/b/animal/MainActivity;->findViewById(I)Landroid/view/View;

    move-result-object v0

    check-cast v0, Landroid/widget/Button;

    .line 41
    .local v0, "themeDefault":Landroid/widget/Button;
    invoke-virtual {p0}, La/b/animal/MainActivity;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    invoke-virtual {v3, v6}, Landroid/content/res/Resources;->getColor(I)I

    move-result v3

    invoke-virtual {v0, v3}, Landroid/widget/Button;->setBackgroundColor(I)V

    .line 42
    new-instance v3, La/b/animal/MainActivity$1;

    invoke-direct {v3, p0}, La/b/animal/MainActivity$1;-><init>(La/b/animal/MainActivity;)V

    invoke-virtual {v0, v3}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

    .line 69
    const v3, 0x7f080002

    invoke-virtual {p0, v3}, La/b/animal/MainActivity;->findViewById(I)Landroid/view/View;

    move-result-object v1

    check-cast v1, Landroid/widget/Button;

    .line 70
    .local v1, "themeDog":Landroid/widget/Button;
    invoke-virtual {p0}, La/b/animal/MainActivity;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    invoke-virtual {v3, v6}, Landroid/content/res/Resources;->getColor(I)I

    move-result v3

    invoke-virtual {v1, v3}, Landroid/widget/Button;->setBackgroundColor(I)V

    .line 71
    new-instance v3, La/b/animal/MainActivity$2;

    invoke-direct {v3, p0}, La/b/animal/MainActivity$2;-><init>(La/b/animal/MainActivity;)V

    invoke-virtual {v1, v3}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

    .line 88
    const v3, 0x7f080003

    invoke-virtual {p0, v3}, La/b/animal/MainActivity;->findViewById(I)Landroid/view/View;

    move-result-object v2

    check-cast v2, Landroid/widget/Button;

    .line 89
    .local v2, "themeMonkey":Landroid/widget/Button;
    invoke-virtual {p0}, La/b/animal/MainActivity;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    invoke-virtual {v3, v6}, Landroid/content/res/Resources;->getColor(I)I

    move-result v3

    invoke-virtual {v2, v3}, Landroid/widget/Button;->setBackgroundColor(I)V

    .line 90
    new-instance v3, La/b/animal/MainActivity$3;

    invoke-direct {v3, p0}, La/b/animal/MainActivity$3;-><init>(La/b/animal/MainActivity;)V

    invoke-virtual {v2, v3}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

    .line 106
    return-void
.end method

.method protected onDestroy()V
    .registers 3

    .prologue
    .line 134
    const-string/jumbo v0, "Animal"

    const-string/jumbo v1, "onDestroy"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 135
    invoke-super {p0}, Landroid/app/Activity;->onDestroy()V

    .line 136
    return-void
.end method

.method protected onPause()V
    .registers 3

    .prologue
    .line 122
    const-string/jumbo v0, "Animal"

    const-string/jumbo v1, "onPause"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 123
    invoke-super {p0}, Landroid/app/Activity;->onPause()V

    .line 124
    return-void
.end method

.method protected onResume()V
    .registers 3

    .prologue
    .line 116
    const-string/jumbo v0, "Animal"

    const-string/jumbo v1, "onResume"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 117
    invoke-super {p0}, Landroid/app/Activity;->onResume()V

    .line 118
    return-void
.end method

.method protected onStart()V
    .registers 3

    .prologue
    .line 110
    const-string/jumbo v0, "Animal"

    const-string/jumbo v1, "onStart"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 111
    invoke-super {p0}, Landroid/app/Activity;->onStart()V

    .line 112
    return-void
.end method

.method protected onStop()V
    .registers 3

    .prologue
    .line 128
    const-string/jumbo v0, "Animal"

    const-string/jumbo v1, "onStop"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 129
    invoke-super {p0}, Landroid/app/Activity;->onStop()V

    .line 130
    return-void
.end method
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321

20 打印资源表中的包

apkanalyzer resources packages apk-file

$ ./apkanalyzer resources packages Animal.apk 
a.b.animal
  • 1
  • 2
  • 3
  • 4

21 打印某个资源类型的配置

apkanalyzer resources configs --type type [--package package] apk-file

$ ./apkanalyzer resources configs --type string Animal.apk 
default
en-rXA
ar-rXB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

22 打印某个资源的值

apkanalyzer resources value --config config --name name --type type [--package package] apk-file

$ ./apkanalyzer resources value --config default --name app_name --type string Animal.apk 
Animal
  • 1
  • 2
  • 3
  • 4

23 打印某种资源类型的所有名字

apkanalyzer resources names --config config --type type [--package package] apk-file

$ ./apkanalyzer resources names --config default --type string Animal.apk 
app_name
theme_default
theme_dog
theme_monkey
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

24 打印二进制xml文件(纯文本格式输出)

apkanalyzer resources xml --file path apk-file
$ ./apkanalyzer resources xml --file /AndroidManifest.xml Animal.apk 
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:sharedUserId="android.uid.system"
    android:versionCode="27"
    android:versionName="8.1.0"
    package="a.b.animal"
    platformBuildVersionCode="27"
    platformBuildVersionName="8.1.0">

    <uses-sdk
        android:minSdkVersion="27"
        android:targetSdkVersion="27" />

    <uses-permission
        android:name="android.permission.MODIFY_THEME_OVERLAY" />

    <uses-permission
        android:name="android.permission.CHANGE_OVERLAY_PACKAGES" />

    <uses-permission
        android:name="android.permission.INTERACT_ACROSS_USERS" />

    <uses-permission
        android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />

    <application
        android:theme="@ref/0x7f070000"
        android:label="@ref/0x7f060000"
        android:icon="@ref/0x7f030000"
        android:name=".AnimalApp"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:supportsRtl="true"
        android:roundIcon="@ref/0x7f030001">

        <activity
            android:name=".MainActivity">

            <intent-filter>

                <action
                    android:name="android.intent.action.MAIN" />

                <category
                    android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

参考:https://developer.android.com/studio/command-line/apkanalyzer

原文地址:https://www.cnblogs.com/onelikeone/p/13769477.html