zoukankan      html  css  js  c++  java
  • Proguard中optimize设置不当引发SimException

    今天来说一下Proguard中关于optimize的问题。先上一张异常图片

    最近项目重构,重新调整了各个组件之间的依赖关系。过程中,在项目Proguard这块卡住了,最开始还好,Proguard只是提示警告,项目构建失败。于是我根据提示的警告信息,把先关的一些依赖所了混淆的一些配置处理。重新触发构建,日志不再有警告,但此时却出现了一个error!

    如上图所示,这是我项目中完整的错误日志。下面是我proguard-project.txt文档中所配置的optimize相关内容。

    # 指定混淆时采用的算法,后面的参数是一个过滤器
    -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
    # 代码混淆压缩比,在0~7之间,默认为5,一般不需要更改
    -optimizationpasses 5
    

    如果你也出现了图片中所描述的异常,如果你的proguard-project.txt文件中的配置也跟我上面所列举的一致。那么,请你继续往下看,或许我能帮到你。

    我再网上扒拉的内容,大多都是说要加上-dontoptimize就好了。但是-dontoptimize的含义是“不优化输入的类文件”,这样一来,所谓的-optimizations-optimizationpasses就没有意义了 。这种做法,我这边表示不认同。最终在stackoverflow上找到了我想要的解决方案。

    没错!在-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*的基础上添加!code/allocation/variable,我在自己的项目中加上了这个内容之后,项目终于构建成功!


    以上是我这次所遇到的问题。下面,我想把Proguard相关的其他内容也补充到这篇博客中,希望能够方便大家去回顾这些内容。

      1. Proguard工作原理

    Proguard由shrink、optimize、obfuscate和preverify四个步骤组成,其中每个步骤都是可选的。如图所示。

    这里,引入Entry Point的概念。Entry Point是在Proguard过程中不会被处理的类或方法,反之,非Entry Point的类和方法会被重命名。

      1. 基本混淆指令

    常用的混淆指令有

    # 代码混淆压缩比,在0~7之间,默认为5,一般不需要更改
    -optimizationpasses 5
    # 混淆时不适用大小写混合,混淆后的类名为小写
    -dontusemixedcaseclassnames
    # 指定不去忽略非公共的库的类
    -dontskipnonpubliclibraryclasses
    # 指定不去忽略非公共的库的类的成员
    -dontskipnonpubliclibraryclassmembers
    # 不做预校验,preverify是proguard的4个步骤之一,android不需要做预校验,去除这一步可以加快混淆速度
    -dontpreverify
    # 有了verbose这句话,混淆后就会生成映射文件
    -verbose
    # 指定混淆时采用的算法,后面的参数是一个过滤器
    -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
    # 保护代码中的Annotation不被混淆
    -keepattributes *Annotation*
    # 保护代码中的泛型被混淆
    -keepattributes Signature
    # 抛出异常时保留代码行号
    -keepattributes SourceFile,LineNumberTable
    

  • 相关阅读:
    【新提醒】N820 N821 android 4.2 V1.1版
    Silk Icons —— 再来 700 个免费小图标
    解决基于BAE python+bottle开发上的一系列问题
    gae 已死,别整什么反向代理了,用sae吧,还有在线编辑工具
    MDCC为移动开发者服务:一看、一聊、一聚
    Testin_百度百科
    我们的开源项目-暨开源力量公开课年度庆典活动
    Kivy: Crossplatform Framework for NUI
    进京通行证_百度百科
    史丹·温斯坦称傲牛熊市的秘密_百度百科
  • 原文地址:https://www.cnblogs.com/shelly-li/p/5685890.html
Copyright © 2011-2022 走看看