android studio 代码混淆

为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤:

  • studio 代码混淆配置
    在你的工程项目下新建proguard-rules.txt一个文件,文件的具体内容如下:
-optimizationpasses 5  # 指定代码的压缩级别

-dontusemixedcaseclassnames  # 是否使用大小写混合

-dontpreverify    # 混淆时是否做预校验

-verbose  # 混淆时是否记录日志

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  # 混淆时所采用的算法

-keep public class * extends android.app.Activity   # 保持某些类不被混淆,因为有些类经过混淆会导致程序编译不通过,通常是一些android自带的类,或者使一些jar包中的.

-keep public class * extends android.app.Application

-keep public class * extends android.app.Service

-keep public class * extends android.content.BroadcastReceiver

-keep public class * extends android.content.ContentProvider

-keep public class com.android.vending.licensing.ILicensingService

-keep class com.jiusg.mainscreenshow.service.** {*;}

-dontwarn com.jiusg.mainscreenshow.service.** # 去掉在混淆编译时产生的某些警告,可能导致混淆不通过

然后在build.gradle文件中加入一下代码引用刚新建的这个文件

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

其中minifyEnabled true 是控制是否混淆的开关

最后直接打包你的apk就是混淆后的结果了,apk大小也会减少些。

  • 如何查看自己的混淆结果

成功混淆后如何查看自己代码是否混淆成功了呢?

1.用压缩软件打开你的apk,取出classes.dex文件,你所有编译了的class类都在这个文件中。

2.还原.jar文件,这一步需要用到一个工具 dex2jar ,可以点此下载,也可以自行百度

3.把下载下来的解压,然后把classes.dex文件放到 dex2jar的解压目录里,如下图
这里写图片描述
然后,cmd 命令行 ,目录切换到 dex2jar的目录下,运行如下命令

dex2jar.bat classes.dex

等他Done后,你会在dex2jar的目录里发现classes_dex2jar.jar这个文件,直接用压缩软件打开,你就可以看见混淆的结果了。

  • 代码混淆后,抓取崩溃信息问题

代码混淆后,抓取程序崩溃信息发送给服务器的问题:
请看如下图,是我按照上述方法混淆,程序崩溃后,服务器收到的信息:
这里写图片描述
其中这句 at com.jiusg.mainscreenshow.ui.Setting.onCreate(Unknown Source),让你根本不知道是具体的那行代码出了问题。
这时,你可以在上述的proguard-rules.txt文件中加入以下代码

-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

在编译,运行app崩溃后,服务器抓取到的结果,如下图
这里写图片描述
这时,之前的Unknown Source被替换成了SourceFile:64,也就是说第64行代码有问题。

阅读更多
文章标签: android android studio
个人分类: Android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭