zoukankan      html  css  js  c++  java
  • Android 4.0 ProGuard 代码混淆 以及 proguard returned with error code 1.See console异常的解决方法

    最近呢说要上线,就去找了下上线的方法。。。
    之前做过代码混淆,用的是progarud.cfg,但是呢自己反编译了之后还是无效,然后就丢着先不管了,因为实在不知道什么情况。
    今天来上线的时候结果总是报错,总是报proguard returned with error code 1.See console错误,到网上查了下情况,分为三种:
    情况1:
    Proguard returned with error code 1. See console
    Error: C:/Documents (系统找不到指定文件)
    这个是因为有空格引起的,proguard进行发编译的时候是不允许有空格的。所以要注意工程所放位置是否有空格。
    如果换了正确路径还不好用的话,直接删除proguard就好了
    注意:SDK和程序路径最好不要有空格符

    情况2:
    Proguard returned with error code 1. See console
    异常:
    java.lang.ArrayIndexOutOfBoundsException
    解决办法:将proguard.cfg中的"-dontpreverify"改成“-dontoptimize”
    把项目中生成的proguard文件夹(此时文件夹是空的)删掉,然后再重新运行项目,就OK 了。

    情况3:
    [2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] Proguard returned with error code 1. See console
    [2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] java.io.IOException: Can't read proguard.ClassPathEntry@106082
    [2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] at proguard.InputReader.readInput(InputReader.java:230)
    [2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] at proguard.InputReader.readInput(InputReader.java:200)
    [2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] at proguard.InputReader.readInput(InputReader.java:178)
    [2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] at proguard.InputReader.execute(InputReader.java:100)
    [2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] at proguard.ProGuard.readInput(ProGuard.java:195)
    [2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] at proguard.ProGuard.execute(ProGuard.java:78)
    [2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] at proguard.ProGuard.main(ProGuard.java:499)

    抛出这样的异常的原因是第三方jar的引用路径不对,没有找到这个需要忽略混淆的jar包。

    仔细想了一下,我的是直接保存的,保存路径里确实没出现空格,最符合我的应该就是第三种情况了,(因为自己这报出的错和上面的不大一样,所以只好分析下了)。混淆,难道是我之前那里不对?
    想到自己写的程序是可以运用到4.0的,因为2.3的和4.0的总归不一样了,就想是不是这里出现什么差错了,所以直接尝试找4.0的是怎么混淆:
    其实Android 4.0要用ProGuard比2.3更简单:在Eclipse中打开工程目录下的project.properties文件,该文件中有以下两行:

    To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):

    proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

    根据这段说明,只要将proguard.config前面的#去掉,就可以利用ProGuard来混淆代码了!当然,默认的设置是不带优化功能的,可以用以下设置来加上代码优化功能:
    proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
    然后只要经过数字签名之类的编译后,代码就是混淆的了。
    注意:如果用Eclipse里的Run或Build Project/Build All来生成Apk,是不会混淆代码的

    完成这个混淆的部分后,再次弄数字签名那些,就不再报那错误了,总算是生成了。。。

    谢谢kris提供的http://www.cnblogs.com/ghj1976/archive/2011/07/18/2109381.html,比我自己找的签名方法详细多了。。。

    声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息

    原文作者: 樱蝴蝶

    原文地址: http://my.eoe.cn/yinghudie/archive/2652.html

     

    问题一:

    [2013-06-28 11:12:10 - ] Proguard returned with error code 1. See console

    [2013-06-28 11:12:10 - ] Note: there were 1 duplicate class definitions.

    [2013-06-28 11:12:10 - ] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator

    ....

    问题一解决方法:

    这个问题是由于代码混淆引起的,找不到引用包。

    只需在你的proguard.cfg中添加如下两行即可。

    -ignorewarnings
    -libraryjars libs/android-support-v4.jar


    你可以根据你的项目提示,添加需要的jar。


    备注:

    如果添加上面两行后依然打包不成功,那么你需要修改位于

    android-sdk-windows oolsproguardin的目录下的: proguard.bat 文件,


    用记事本打开,修改如下:


    call %java_exe% -jar "%PROGUARD_HOME%"libproguard.jar %*
    改为:
    call %java_exe% -jar "%PROGUARD_HOME%"libproguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9
    即可!


    此方法是把当前版本SDK改成和之前SDK版本中含有的proguard.bat文件一致!

  • 相关阅读:
    youcompleteme-Vim补全插件安装
    depthimage_to_laserscan代码解读
    如何创建离线化 mapbox sprite精灵图
    mapbox/node-fontnik工具使用介绍
    跟我学习dubbo-使用Maven构建Dubbo服务的可执行jar包(4)
    跟我学习dubbo-Dubbo管理控制台的安装(3)
    跟我学习dubbo-ZooKeeper注册中心安装(2)
    跟我学习dubbo-简介(1)
    跟我学习dubbo-构建Dubbo服务消费者Web应用的war包并在Tomcat中部署(6)
    跟我学习dubbo-在Linux操作系统上手工部署Dubbo服务(5)
  • 原文地址:https://www.cnblogs.com/wubingshenyin/p/3453362.html
Copyright © 2011-2022 走看看