zoukankan      html  css  js  c++  java
  • Proguard 4.x error java.lang.ArrayIndexOutOfBoundsException

    这几天被Proguard 搞郁闷了

    一混淆就报  java.lang.ArrayIndexOutOfBoundsException, 折腾了很多办法,网上搜的一堆也都没用

    最后发现是-optimizations 不对引起的,

    android默认是:-optimizations  !code/simplification/arithmetic,!field/*,!class/merging/* 

    增加了一项!method/removal/* (不移除任何方法)就好了

    但还是会碰到可能只在xml里用到的类, 在代码文件里根本没用过的,  Proguard 因为不会检查android的xml引用, 在优化的时候会把这样的类直接干掉, 解决的办法是在随便一个地方增加对该类的一个调用即可。(Proguard 的这个优化策略本身没有问题,不需要去掉)

    proguard的网址:

    http://proguard.sourceforge.net 

    各种优化选项的说明: 

    http://proguard.sourceforge.net/index.html#/manual/usage.html#optimizationoptions 

    因为sdk tools reversion12 的问题,降到reversion11后就没有问题了,更好的解决方法也有人给出了:

    找到[Android SDK Installation Directory]\tools\proguard\bin\proguard.bat文件,用编辑器打开(我用的是Editplus),将这句话:

    call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*

    改为

    call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

    就ok了。

    参数:

    -include {filename}    从给定的文件中读取配置参数

    -basedirectory {directoryname}    指定基础目录为以后相对的档案名称

    -injars {class_path}    指定要处理的应用程序jar,war,ear和目录

    -outjars {class_path}    指定处理完后要输出的jar,war,ear和目录的名称

    -libraryjars {classpath}    指定要处理的应用程序jar,war,ear和目录所需要的程序库文件

    -dontskipnonpubliclibraryclasses    指定不去忽略非公共的库类。

    -dontskipnonpubliclibraryclassmembers    指定不去忽略包可见的库类的成员。


    保留选项
    -keep {Modifier} {class_specification}    保护指定的类文件和类的成员

    -keepclassmembers {modifier} {class_specification}    保护指定类的成员,如果此类受到保护他们会保护的更好

    -keepclasseswithmembers {class_specification}    保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。

    -keepnames {class_specification}    保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)

    -keepclassmembernames {class_specification}    保护指定的类的成员的名称(如果他们不会压缩步骤中删除)

    -keepclasseswithmembernames {class_specification}    保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)

    -printseeds {filename}    列出类和类的成员-keep选项的清单,标准输出到给定的文件

    压缩
    -dontshrink    不压缩输入的类文件

    -printusage {filename}

    -whyareyoukeeping {class_specification}    

    优化
    -dontoptimize    不优化输入的类文件

    -assumenosideeffects {class_specification}    优化时假设指定的方法,没有任何副作用

    -allowaccessmodification    优化时允许访问并修改有修饰符的类和类的成员

    混淆
    -dontobfuscate    不混淆输入的类文件

    -printmapping {filename}

    -applymapping {filename}    重用映射增加混淆

    -obfuscationdictionary {filename}    使用给定文件中的关键字作为要混淆方法的名称

    -overloadaggressively    混淆时应用侵入式重载

    -useuniqueclassmembernames    确定统一的混淆类的成员名称来增加混淆

    -flattenpackagehierarchy {package_name}    重新包装所有重命名的包并放在给定的单一包中

    -repackageclass {package_name}    重新包装所有重命名的类文件中放在给定的单一包中

    -dontusemixedcaseclassnames    混淆时不会产生形形色色的类名

    -keepattributes {attribute_name,}    保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses.

    -renamesourcefileattribute {string}    设置源文件中给定的字符串常量
     

  • 相关阅读:
    VB.NET中vbcr 是回车、vbcrlf 是回车和换行的结合、vblf 是换行
    COM组件简介
    【转】ACE编程小结
    socket基础实例(一个服务端对应一个客户端情形)
    服务器中判断客户端socket断开连接的方法
    阻塞、非阻塞的概念和select函数的阻塞功能
    socket基础函数(2)
    线程初级基础(一)
    给程序员的五点建议--如何成为编程高手并以此创业
    Linux下常用软件
  • 原文地址:https://www.cnblogs.com/jacktu/p/2179221.html
Copyright © 2011-2022 走看看