关于proguard混淆工具的使用

关于proguard混淆工具的使用

ID:8814816

大小:46.95 KB

页数:3页

时间:2018-04-08

关于proguard混淆工具的使用_第1页
关于proguard混淆工具的使用_第2页
关于proguard混淆工具的使用_第3页
资源描述:

《关于proguard混淆工具的使用》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、关于ProGuard混淆工具的使用目标:jar包B包含提供给开发者的接口,jar包C包含内部实现,B调用C中的方法。要求B中接口类被保留,B中其他方法以及C中全部内容被混淆。需保证混淆后的jar包可以被Android工程正确导入并且功能实现正确。现阶段尚不考虑使用proguard的压缩和优化功能。因为工程结构复杂,上述两个功能有可能导致混淆后的jar包不可用。实验步骤准备:创建一个工程ProjectC。其中的一个类ClassC包含一个方法返回一个由构造函数获取的字符串,将ProjectC打包。创建一个工程ProjectB,并且引入Proj

2、ectC.jar作为库。ProjectB中的类ClassB包含一个方法,该方法通过实例化ClassC并调用该实例的方法返回一个字符串。最后建立一个Android工程,将打包后的ProjectB作为库导入。在该工程的MainActivity中调用ProjectB中的方法获得字符串,并将字符串显示在屏幕上。步骤1:将Android工程所生成apk混淆(IntelliJ下):1.将ProjectB.jar和ProjectC.jar放置在libs文件夹下并且正确引用。2.注释掉project.properties文件中的“proguard.con

3、fig=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”一行。3.生成带签名的apk并且勾选:RunProGuard一项。结果:发现将apk反编译后,工程中所有的类和方法已被混淆。安装apk后功能显示正常。步骤2:使用proguard默认配置将ProjectB混淆,并使用-libraryjars将ProjectC配置成为混淆后ProjectB_after.jar的库。结果:发现Android工程只能使用ProjectB中被混淆后的类名及方法。并且Pro

4、jectC并未被混淆。步骤3:在ProjectB中加入接口类InterfaceB,并创建类InterfaceForDev。在proguard配置文件中加入-keepclasseswithmembernamesclassinterfaceB3.InterfaceForDev{publicjava.lang.StringgetMsg();}保留这个类和它包含的方法getMsg();结果:除了InterfaceForDev和它包含的方法getMsg()没有被混淆外ProjectB中其他类均成功混淆。Android工程可以调用InterfaceF

5、orDev.getMsg()方法并显示正确。PeojcetC依然未混淆。步骤4:将ProjectC作为输入文件而非库与ProjectB一同混淆。结果:ProjectC被混淆,Android工程可以调用InterfaceForDev.getMsg()方法并显示正确。且Android工程不再需要单独导入ProjectC,初步达到预期目标。用反编译软件打开混淆后的jar文件:总结如果有多个jar文件需要混淆,则需要使用多行-injars命令把这些jar文件设置为输入(此处应注意同名package的问题)。这些jar文件之间的调用关系progua

6、rd会自行处理,只需用-keep保留所需的接口即可。如果被-libraryjars命令定义为库的jar包将不会被混淆。Keep方法的使用保留项保留不被删除或重命名保留不被重命名类和成员-keep-keepnames类成员-keepclassmembers-keepclassmembernames类和成员(如果成员被调用)-keepclasseswithmembers-keepclasseswithmembernames附ProGuard现存问题:l为了达到最佳的效果,ProGuard的优化算法(optimization)假设被处理的代码不

7、会有意地抛出NullPointerExceptions ,ArrayIndexOutOfBoundsExceptions,OutOfMemoryErrors或者StackOverflowErrors。比如,一个没有效果的方法调用myObject.myMethod()有可能被优化算法移除。它将忽略由于myObject==null而导致的NullPointerExceptions。被优化了的代码可能会减少抛出异常的次数。如果要避免这种情况发生,你需要用-donotoptimize关闭优化选项。l同样的情况也会发生在busy-waitinglo

8、op上。l如果输入的jar包与library库包含同名类,混淆(obfuscated)后jar包中的类有可能会覆盖库中的类。这种状况多发生在库类jar文件被混淆过。l一些混淆后的文件名可能被w

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。