文章目录
- 1 打印App ID、版本信息
- 2 打印apk的文件大小
- 3 打印apk的download大小
- 4 打印apk用到的feature
- 5 比较两个apk的大小
- 6 打印apk中的文件列表
- 7 打印apk中某个文件的内容(二进制内容会原样显示)
- 8 打印AndroidManifest.xml(文本格式)
- 9 打印App ID
- 10 打印版本名
- 11 打印版本号
- 12 打印最低的SDK版本
- 13 打印目标SDK版本
- 14 打印用到的权限列表
- 15 打印是否debug模式
- 16 打印apk中的dex文件列表
- 17 打印dex文件中引用的方法个数(默认打印所有的dex文件)
- 18 打印dex文件中的类信息
- 19 打印类的字节码或者方法的反编译格式
- 20 打印资源表中的包
- 21 打印某个资源类型的配置
- 22 打印某个资源的值
- 23 打印某种资源类型的所有名字
- 24 打印二进制xml文件(纯文本格式输出)
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]
- 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
2 打印apk的文件大小
apkanalyzer apk file-size apk-file
$ ./apkanalyzer apk file-size Animal.apk
376139
3 打印apk的download大小
apkanalyzer apk download-size apk-file
$ ./apkanalyzer apk download-size Animal.apk
369340
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
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
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
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 �������� ���������
��������
��� ��������������������
�������
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>
9 打印App ID
apkanalyzer manifest application-id apk-file
$ ./apkanalyzer manifest application-id Animal.apk
a.b.animal
10 打印版本名
apkanalyzer manifest version-name apk-file
$ ./apkanalyzer manifest version-name Animal.apk
8.1.0
11 打印版本号
apkanalyzer manifest version-code apk-file
$ ./apkanalyzer manifest version-code Animal.apk
27
12 打印最低的SDK版本
apkanalyzer manifest min-sdk apk-file
$ ./apkanalyzer manifest min-sdk Animal.apk
27
13 打印目标SDK版本
apkanalyzer manifest target-sdk apk-file
$ ./apkanalyzer manifest target-sdk Animal.apk
27
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
15 打印是否debug模式
apkanalyzer manifest debuggable apk-file
$ ./apkanalyzer manifest debuggable Animal.apk
false
16 打印apk中的dex文件列表
apkanalyzer dex list apk-file
$ ./apkanalyzer dex list Animal.apk
classes.dex
17 打印dex文件中引用的方法个数(默认打印所有的dex文件)
apkanalyzer dex references [--files path] [--files path2] apk-file
$ ./apkanalyzer dex references Animal.apk
classes.dex 64
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()
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
20 打印资源表中的包
apkanalyzer resources packages apk-file
$ ./apkanalyzer resources packages Animal.apk
a.b.animal
21 打印某个资源类型的配置
apkanalyzer resources configs --type type [--package package] apk-file
$ ./apkanalyzer resources configs --type string Animal.apk
default
en-rXA
ar-rXB
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
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
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>
参考:https://developer.android.com/studio/command-line/apkanalyzer