您当前的位置: 首页 >  android

xiangzhihong8

暂无认证

  • 2浏览

    0关注

    1324博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

android混淆和反编译

xiangzhihong8 发布时间:2015-09-16 10:48:46 ,浏览量:2

混淆

Android Studio:  只需在build.gradle(Module:app)中的buildTypes中增加release的编译选项即可,如下:

 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这个proguard-android.txt是sdk中groguard默认的文件,具体地址在:/opt/sdk/tools/proguard/proguard-android.txt  而proguard-rules.pro是AS中专用的proguard配置文件,其实只是后缀名不同,与Eclipse中的proguard-project.txt是一样的,配置规则相同,后面会详细提到。  老版本开启混淆的命令是runProguard,现在统一用minifyEnabled命令了,将其设为true就好了。  编译的时候可以使用命令:

./gradlew assembleRelease
  • 1

或者用上一篇生成签名apk的办法都可。

Eclipse:  在project.properties文件中开启proguard配置(放开注释),如下:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
  • 1

同样,生成签名时代码就会被混淆。

混淆语法  请参考${sdk.dir}/tools/proguard/proguard-android.txt文件,需要注意的是文件中虽然有了不混淆Parcelable的语句,如下:

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
  • 1
  • 2
  • 3
  • 4

但是还是要自己把继承自Parcelable的类写进来避免混淆,否则会出现BadParcelableException异常。

-keep class com.linc.datatype.XXInfo {*;}
  • 1

为微信分享而引入的jar包,我们不需要对其进行混淆,也需要在proguard-android.txt中注明,如下:

-keep class com.tencent.** { *; }
-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}
  • 1
  • 2
  • 3

为了验证是否混淆成功,可以使用下面的反编译工具验证。

反编译

主要用到三个工具:  dex2jar:将dex文件转为jar文件  jd-gui:反编译jar文件  AXMLPrinter2.jar:反编译xml文件

使用方法参见《反编译apk文件,得到其源代码的方法》

对于Ubuntu64位,运行jd-gui或许会报错:  尝试解决如下:

$ sudo apt-get install libgtk2.0-0:i386 libnss3:i386 libcurl3-gnutls:i386 libidn11:i386 libpango1.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 librtmp0:i386 libxft2:i386
  • 1
  • 2

又报错:

$ /opt/sdk/tools/jd-gui: error while loading shared libraries: libXxf86vm.so.1: cannot open shared object file: No such file or directory
  • 1

解决办法如下:

$ sudo apt-get install libgtk2.0-0:i386 libxxf86vm1:i386 libsm6:i386 lib32stdc++6

  • 1
  • 2
  • 3

参考: 

关注
打赏
1482932726
查看更多评论
立即登录/注册

微信扫码登录

0.0420s