学习也要借鉴,最近在学习Android,想看一下市面上大的Android应用是怎么个构架的,所以学习了下Android反编译的相关知识,网上有很多种做法,下面的是我在几种方案中觉得效果最好的方案介绍一下:

(事先声明本文仅供学习之用,若存在任何侵权马上删除)

首先Android的apk包也是可以解压的,把它改成后缀RAR的就能直接用RAR解压了,得到的文件如下图:


关于Android的反编译apk文件_第1张图片

其中res为资源文件夹,而下面的AndroidManifest.xml和classes.dex则是我们这次反编译的重点。

AndroidManifest.xml也被编译过了。。。哎。。这编译连XML文件都没放过,而classes.dex就是Android的Jar包的复刻版了,现在要分两步走:

一、xml方面

市面上也有好多反编译方法,经我实践用AXMLPrinter2.jar(http://android4me.googlecode.com/files/AXMLPrinter2.jar)反编译出来的XML文件最清晰。

命令:java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt


关于Android的反编译apk文件_第2张图片

代码片段如下:

<manifestxmlns:android="http://schemas.android.com/apk/res/android"android:versionCode="22"android:versionName="2.0.2"package="com.sina.weibo"><applicationandroid:label="@7F090012"android:icon="@7F020059"android:name="WeiboApplication"><activityandroid:label="@7F090012"android:name=".MainTabActivity"android:launchMode="2"android:configChanges="0x000000A0"android:windowSoftInputMode="0x00000020"><intent-filter><actionandroid:name="android.intent.action.MAIN"></action><categoryandroid:name="android.intent.category.LAUNCHER"></category></intent-filter><intent-filter><actionandroid:name="android.intent.action.VIEW"></action><categoryandroid:name="android.intent.category.DEFAULT"></category><categoryandroid:name="android.intent.category.BROWSABLE"></category><dataandroid:scheme="sinaweibo"android:host="blog"></data></intent-filter> ...

还是蛮清楚的吧!

下面是要反编译Jar包了。

二、dex反编译

由于dex文件是jar包的复刻版,所以可以导出jar包,导出工具是dex2jar(http://dex2jar.googlecode.com/files/dex2jar-0.0.7.7-SNAPSHOT.zip)

像上面差不多的在cmd里键入

命令:dex2jar.bat classes.dex


关于Android的反编译apk文件_第3张图片

可以看到在文件夹里出现了一个classes.dex.dex2jar.jar这个jar包

接下来就可以看jar包的工具直接打开了,这里推荐一款jd-GUI的查看软件(http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip)。

下面是效果:

package com.sina.weibo;import android.text.Editable;import android.text.TextWatcher;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import dalvik.annotation.EnclosingMethod;@EnclosingMethodclass CommentBlog$1  implements TextWatcher{  public void afterTextChanged(Editable paramEditable)  {  }  public void beforeTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3)  {  }  public void onTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3)  {    int i = this.this$0.mEtBlog.getText().toString().length();    String str1;    if (i <= 140)    {      i = 140 - i;      str1 = this.this$0.getString(2131296400);      this.this$0.mTvInputNumText.setTextColor(-16777216);      if (!this.this$0.mBtSend.isEnabled())        this.this$0.mBtSend.setEnabled(1);    }    while (true)    {      TextView localTextView = this.this$0.mTvInputNumText;      String str2 = String.valueOf(str1);      String str3 = str2 + i;      localTextView.setText(str3);      return;      i += -140;      str1 = this.this$0.getString(2131296401);      this.this$0.mTvInputNumText.setTextColor(-65536);      if (!this.this$0.mBtSend.isEnabled())        continue;      this.this$0.mBtSend.setEnabled(0);    }  }}

效果还不错吧,可以好好看一阵子了。

最后导入到Eclipse中,就可以像项目一样看了(这里的很多错误时因为反编译的时候将所有的Boolean都以0和1表示了,而java源文件里是不允许这样的


关于Android的反编译apk文件_第4张图片

仅供学习哈~~

更多相关文章

  1. Android 解决图片大量下载:软引用必须懂4点
  2. Android实现LED灯显示效果
  3. android selector设置button点击效果(详细)以及常见问题
  4. Android 内嵌WebView之选择文件上传及扩展
  5. 还在羡慕微信/微博的图片处理?-android酷炫图片处理(下)
  6. android运行时ART加载OAT文件解析
  7. 如何检测android上的多媒体文件属于音频、视频还是图片?

随机推荐

  1. Android(安卓)3.0 honeycomb TextView on
  2. openCv CameraBridgeViewBase 竖屏显示对
  3. 关于SQLite数据库的那些事儿
  4. 命令行执行Android程序
  5. 在 Android(安卓)Studio 中配置源码路径
  6. Android之RecyclerView简单使用(三)
  7. 在eclipse环境中开发android原生应用
  8. 【Android开发那点破事】解决Andriod使用
  9. Android(安卓)DecorView浅析
  10. android/ophone中本机号码的获取