赞
踩
我们经常需要和别人做好的apk进行对比,有时候就需要反编译查看其中的一些内容。
一般我们反编译代码,都是使用的ApkTool进行,但是有时候,apkTool无法实现反编译。所以,就发现了新版本的Android Studio中,增加了一个Analyze Aok 功能,此功能就在Run菜单中。通过它,可以快速的查看编译后的java代码和资源,便于快速分析apk。
这里,我们分析一下Google SetupWizard中的一个界面,就是恢复出厂设置后,第一个界面:语言选择界面,我们通过反编译,来了解一下语言选择界面是如何实现的。其实我最关注的是,语言列表中的内容是如何获取的。
实际上,这个apk可以听过apktool进行反编译,所以这里我也会对这两个进行比较,这样更容易理解java的原始代码(或者说在Android Studio中看到的样子)。
我们可以在Android源代码的 vendor/google/apps/SetupWizard/SetupWizard_arm64.apk 位置,找到这个apk。或者直接从手机中获取。
下图,是加载后的截图。
说明:
如果想要找到这个界面,我们需要看看这个应用支持哪些界面。因为我差不多知道这个界面是Welcom,欢迎界面,所以我会朝着这个方向找。
最笨的办法是找到这个界面相关的词条,根据ID,再找到相关的代码或者布局。
也可以通过log查看当前正在执行的界面,不过刚开机,一般adb没有打开。这时候只能拿一个userdebug的版本来操作了。
当然,我就按照简单的方法来了,一般都能找到。
<activity android:label="@ref/0x7f100156" android:name="com.google.android.setupwizard.user.WelcomeActivity" android:enabled="false" android:exported="false" android:configChanges="0x2027" android:immersive="true" android:directBootAware="true"> <intent-filter> <action android:name="com.android.setupwizard.WELCOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
找到的类就是com.google.android.setupwizard.user.WelcomeActivity
点击classes.dex, 下边就会显示所有的类信息,然后根据目录,找到对应的类
在文件上右键选择Show Bytecode,就可以看到完整的代码,当然,也看不懂。
在其中,我们尝试找到对应的界面吧,然后和正常apktool反编译的内容比较(也就是和正常代码比较,看看这个代码究竟是怎么看的)
因为我们关心的是语言列表如何生成的,那么我们首先要找到语言列表对应的布局,再看看它是怎么被设置数值的。
在这部分中,查看SetContentView可以知道加载的布局是哪一个奥。
.method protected final onCreate(Landroid/os/Bundle;)V .registers 8 .line 105 invoke-super { p0, p1}, Lagx;->onCreate(Landroid/os/Bundle;)V .line 106 const/4 v0, 0x0 invoke-virtual { p0, v0}, Lagx;->a(Z)V .line 107 invoke-static { p0}, Lahr;->a(Landroid/content/Context;)Lahr; move-result-object v1 iput-object v1, p0, Lcom/google/android/setupwizard/user/WelcomeActivity;->C:Lahr; new-instance v1, Landroid/os/Handler; .line 108 invoke-static { }, Landroid/os/Looper;->getMainLooper()Landroid/os/Looper; move-result-object v2 invoke-direct { v1, v2}, Landroid/os/Handler;-><init>(Landroid/os/Looper;)V iput-object v1, p0, Lcom/google/android/setupwizard/user/WelcomeActivity;->z:Landroid/os/Handler; const/4 v1, 0x1 if-nez p1, :cond_45 .line 109 sget-object v2, Lahe;->b:[I invoke-virtual { p0, v2}, Lcom/google/android/setupwizard/user/WelcomeActivity;->obtainStyledAttributes([I)Landroid/content/res/TypedArray; move-result-object v2 .line 110 invoke-virtual { v2, v0, v0}, Landroid/content/res/TypedArray;->getResourceId(II)I move-result v3 .line 111 invoke-virtual { v2, v1, v0}, Landroid/content/res/TypedArray;->getResourceId(II)I move-result v4 .line 112 invoke-virtual { v2}, Landroid/content/res/TypedArray;->recycle()V if-nez v3, :cond_2f goto :goto_45 .line 132 :cond_2f if-eqz v4, :cond_45 const/4 v2, 0x3 .line 115 invoke-static { p0, v2}, Lbdo;->a(Landroid/app/Activity;I)V .line 116 invoke-virtual { p0, v3}, Lcom/google/android/setupwizard/user/WelcomeActivity;->setContentView(I)V iget-object v2, p0, Lcom/google/android/setupwizard/user/WelcomeActivity;->z:Landroid/os/Handler; new-instance v3, Lbax; .line 117 invoke-direct { v3, p0, v4}, Lbax;-><init>(Lcom
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。