关于ProGuard混淆工具的使用.docx_第1页
关于ProGuard混淆工具的使用.docx_第2页
关于ProGuard混淆工具的使用.docx_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于ProGuard混淆工具的使用目标:jar包B包含提供给开发者的接口,jar包C包含内部实现,B调用C中的方法。要求B中接口类被保留,B中其他方法以及C中全部内容被混淆。需保证混淆后的jar包可以被Android工程正确导入并且功能实现正确。现阶段尚不考虑使用proguard的压缩和优化功能。因为工程结构复杂,上述两个功能有可能导致混淆后的jar包不可用。实验步骤准备:创建一个工程ProjectC。其中的一个类ClassC包含一个方法返回一个由构造函数获取的字符串,将ProjectC打包。创建一个工程ProjectB,并且引入ProjectC.jar作为库。ProjectB中的类ClassB包含一个方法,该方法通过实例化ClassC并调用该实例的方法返回一个字符串。最后建立一个Android工程,将打包后的ProjectB作为库导入。在该工程的MainActivity中调用ProjectB中的方法获得字符串,并将字符串显示在屏幕上。步骤1:将Android工程所生成apk混淆(IntelliJ下):1. 将ProjectB.jar 和ProjectC.jar放置在libs文件夹下并且正确引用。2. 注释掉perties文件中的“proguard.config=$sdk.dir/tools/proguard/proguard-android.txt:proguard-project.txt”一行。3. 生成带签名的apk并且勾选:Run ProGuard一项。结果:发现将apk反编译后,工程中所有的类和方法已被混淆。安装apk后功能显示正常。步骤2:使用proguard默认配置将ProjectB混淆,并使用-libraryjars将ProjectC配置成为混淆后ProjectB_after.jar的库。结果:发现Android工程只能使用ProjectB中被混淆后的类名及方法。并且ProjectC并未被混淆。步骤3:在ProjectB中加入接口类InterfaceB,并创建类InterfaceForDev。在proguard配置文件中加入-keepclasseswithmembernames class interfaceB3.InterfaceForDev public java.lang.String getMsg();保留这个类和它包含的方法 getMsg();结果:除了InterfaceForDev和它包含的方法getMsg()没有被混淆外ProjectB中其他类均成功混淆。Android工程可以调用InterfaceForDev. getMsg()方法并显示正确。PeojcetC依然未混淆。步骤4:将ProjectC作为输入文件而非库与ProjectB一同混淆。结果:ProjectC被混淆,Android工程可以调用InterfaceForDev. getMsg()方法并显示正确。且Android工程不再需要单独导入ProjectC,初步达到预期目标。用反编译软件打开混淆后的jar文件:总结如果有多个jar文件需要混淆,则需要使用多行-injars 命令把这些jar文件设置为输入(此处应注意同名package的问题)。这些jar文件之间的调用关系proguard会自行处理,只需用-keep保留所需的接口即可。如果被-libraryjars命令定义为库的jar包将不会被混淆。Keep 方法的使用保留项保留不被删除或重命名保留不被重命名类和成员-keep-keepnames类成员-keepclassmembers-keepclassmembernames类和成员(如果成员被调用)-keepclasseswithmembers-keepclasseswithmembernames附ProGuard现存问题:l 为了达到最佳的效果,ProGuard的优化算法(optimization)假设被处理的代码不会有意地抛出NullPointerExceptions,ArrayIndexOutOfBoundsExceptions,OutOfMemoryErrors 或者StackOverflowErrors。比如,一个没有效果的方法调用myObject.myMethod()有可能被优化算法移除。它将忽略由于myObject=null而导致的NullPointerExceptions。被优化了的代码可能会减少抛出异常的次数。如果要避免这种情况发生,你需要用 -donotoptimize关闭优化选项。l 同样的情况也会发生在busy-waiting loop上。l 如果输入的jar包与library库包含同名类,混淆(obfu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论