`

Android中如果你也使用commons-codec-1.6并且出现了问题

阅读更多

http://my.oschina.net/zhibuji/blog/115463?p=1

----------------------------------------------------------

经过测试,确实如此。重新打包换包名后,可以正常使用。


----------------------------------------------------------
首先说我的开发环境:
eclipse + android-sdk_r21.1-windows。

项目中需要使用commons-codec-1.6.jar来做加密。就使用了里面一个方法:

?
1
DigestUtils.shaHex(codes)
然后。。然后我就被坑了一下午,一下午 

(提示:
如果你对我纠结的过程没兴趣,可以自行绕道最后解决办法,直接看解决方法。
如果你觉得你想知道原因,你可以直接原因去看原因,然后自己去找解决方法。
如果看博客的你对我解释的原因另有高见,请留言。
如果你觉得先自己再打个jar麻烦,可以直接邮件或者QQ问我要,留言也可以。)

先说说使用步骤:在ADT17之后,新建项目之后,自动会有一个libs文件夹,只要将jar包拷贝到这个文件夹下,不需要build path了。如果是低于ADT17那么需要自己新建一个lib然后右键build path→add to build path.
我就乖乖的从http://archive.apache.org/dist/commons/codec/binaries/这里下载我需要的版本。然后解压,拷贝出commons-codec-1.6.jar到libs下面。在程序中立马就可以使用了。我在我的工程中使用了上面的那个方法,接下来,让我纠结的问题就出现了,在运行的时候,就开始报错,找不到那个方法。(不是找不到类)。
报错如下:

03-23 15:06:09.158: DEBUG/dalvikvm(132): GC_EXPLICIT freed <1K, 50% free 2706K/5379K, external 0K/0K, paused 77ms
03-23 15:06:09.218: INFO/dalvikvm(18491): Could not find method org.apache.commons.codec.binary.Hex.encodeHexString, referenced from method org.apache.commons.codec.digest.DigestUtils.md5Hex
03-23 15:06:09.218: WARN/dalvikvm(18491): VFY: unable to resolve static method 3722: Lorg/apache/commons/codec/binary/Hex;.encodeHexString ([B)Ljava/lang/String;
03-23 15:06:09.218: DEBUG/dalvikvm(18491): VFY: replacing opcode 0x71 at 0x0004
03-23 15:06:09.218: DEBUG/dalvikvm(132): GC_EXPLICIT freed <1K, 50% free 2706K/5379K, external 0K/0K, paused 65ms
03-23 15:06:09.238: DEBUG/dalvikvm(18491): VFY: dead code 0x0007-0008 in Lorg/apache/commons/codec/digest/DigestUtils;.md5Hex (Ljava/io/InputStream;)Ljava/lang/String;
我觉得可能是导入包,导入的不正确。突然就不相信自己的经验了,各种百度,各种Google。然后各种试验,clear工程,将包删除重新导入,删除手机中的应用.....到最后我都重启eclipse,就差重启电脑了。网上说的所有方法都试过了,但是我的问题还是依然存在。折腾到这个地步,觉得应该是导入包的方法问题,可能是包本身存在问题。我是从官网下的,难道我下载错了?英语不好,也没烂到下载个jar包也下载错误的底部啊。还是去CSDN下载了一个,花费我一个积分(心疼~),然后导入,依然错误。更郁闷了,但是这时,我坚定我的英语能力下载个jar包是没问题的(总能自我娱乐下子,哈哈)。然后我。。。没有办法了,找人各种讨论,终于有了
最后的解决办法:


用eclipse把源代码下载下来,重新打包,修改原来的包名,(把包名任意加一个字母或者减一个字母,代码不用动,一点也不用动哈),然后将源代码打包成jar。最后将新装的旧酒,放到工程的libs下面。无须build path(ADT 17以后)。启动工程,你发现了没,不报错了。而且加密结果正确。
这是我改包名之前和改之后导入路径不同:

import org.apache.commons.codec.digest.DigestUtils;//之前版本
import org.apaches.commons.codec.digest.DigestUtils;//之后版本,多了一个s

原因:几个人讨论结果是:Google Android内部也有一个包名一样的工程,而且类名也相同,关键一点是没有该方法!于是导致包名冲突,大家都知道java的调用机制,我就不多说了,然后系统就在自己的里面找到了同样名字的这个类,然后去调用系统自己该类下面我们用的那个方法。然而系统根本就没有那个方法,于是呼...我们的这个可用的方法就歇菜了。根本就没被调用到。

(2013.05.18面试有些失利)本人要潜心研究技术,慢慢沉淀,所以QQ一般不会上,邮箱可能存在回复延迟,所以给个连接,遇到问题的可以直接到这里下载。

生命不息编码不止,某公司,我会再来的!(2013.05.20)
分享到:
评论

相关推荐

    commons-codec 1.6版本

    要使用"commons-codec 1.6"进行MD5加密,首先需要将`commons-codec-1.6.jar`文件添加到项目的类路径中。对于Java项目,这通常意味着将其拷贝到`libs`目录下,然后在构建路径中包含此jar文件。这样,项目就可以访问到...

    commons-codec-1.6.jar

    commons-codec-1.6.jar

    jar包 commons-codec-1.6.jar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累... 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。

    commons-codec-1.6工具类

    通过`commons-codec-1.6`这个压缩包,你可以获得Apache Commons Codec 1.6的所有源代码、文档和类库,以便在自己的项目中集成和使用。这个库是开源的,遵循Apache软件许可证,这意味着你可以自由地使用、修改和分发...

    commons-codec-android-1.15

    在Android平台上,由于原生的Java库可能不完全支持或者性能不佳,因此有了"commons-codec-android-1.15"这个定制版本,它是专门为Android优化的,确保在Android系统上能够稳定且高效地运行Apache Commons Codec的...

    android加解密, commons-codec包名的修改,处理编译通过,运行崩溃的问题

    通过commons-codec包名的修改.Android内置了一个Codec库,当使用外部引入的新版本的codec.jar,执行其中方法的时候,会优先加载系统自带的codec库中相应的方法,编译通过运行报错的情况.包名前缀加了android,里面打包了...

    commons-codec-1.6-bin.tar.gz

    在“commons-codec-1.6-bin.tar.gz”这个压缩包中,包含了Apache Commons Codec 1.6版本的编译后的JAR文件,通常命名为“commons-codec-1.6.jar”,以及可能的文档、源代码和其他资源文件。使用这个库,开发者可以...

    commons-codec-1.6.jar.rar

    本文将深入探讨`commons-codec-1.6.jar`这一版本的功能、使用方法及其在实际开发中的应用。 一、Base64编码与解码 Base64是一种用于在网络上传输8位字节序列的编码方式,常用于电子邮件和其他需要将二进制数据转化...

    commons-codec-1.9-API文档-中文版.zip

    赠送jar包:commons-codec-1.9.jar; 赠送原API文档:commons-codec-1.9-javadoc.jar; 赠送源代码:commons-codec-1.9-sources.jar; 赠送Maven依赖信息文件:commons-codec-1.9.pom; 包含翻译后的API文档:...

    android可用commons-codec-1.9

    android可用的commons-codec-1.9

    commons-codec-1.6-src.zip

    其中,`commons-codec-1.6-src.zip`是一个包含Apache Commons Codec库1.6版本的源代码压缩包。这个库广泛应用于Java开发中,为开发者提供了丰富的编码和解码功能,如Base64编码、URL编码、发音编码(如Soundex)等。...

    commons-codec.jar

    在开发网页爬虫时,`commons-codec`可以方便地处理网页内容中可能出现的各种编码问题,如URL编码、Base64编码的图片或者密码,以及在解析HTML时可能遇到的十六进制转义序列。同时,对于爬取到的数据,比如电话号码...

    commons-codec-1.15-API文档-中文版.zip

    赠送jar包:commons-codec-1.15.jar; 赠送原API文档:commons-codec-1.15-javadoc.jar; 赠送源代码:commons-codec-1.15-sources.jar; 赠送Maven依赖信息文件:commons-codec-1.15.pom; 包含翻译后的API文档:...

    commons-codec-1.15-API文档-中英对照版.zip

    赠送jar包:commons-codec-1.15.jar; 赠送原API文档:commons-codec-1.15-javadoc.jar; 赠送源代码:commons-codec-1.15-sources.jar; 赠送Maven依赖信息文件:commons-codec-1.15.pom; 包含翻译后的API文档:...

    commons-codec 多个版本 1.5/1.9/1.10/1.11/1.13/1.14

    commons-codec是Apache开源组织提供的用于摘要运算、编码解码的包。常见的编码解码工具Base64、MD5、Hex、SHA1、DES等。里面包含多个版本架包,commons-codec 多个版本 1.5/1.9/1.10/1.11/1.13/1.14

    commons-codec-1.15.jar

    apache提供了一个加密包commons-codec,里面提供了常用的编解码方法。这里提供了commons-codec-1.15.jar文件,供大家使用。

    commons-codec-1.9.jar文件(java导入库文件)

    commons-codec-1.9.jar文件,java工程导入库文件

    commons-codec-1.11.jar

    commons-codec-1.11.jar

    commons-codec-1.10.jar

    在实际开发中,"commons-codec-1.10.jar"可以帮助开发者避免重复造轮子,减少错误,提高代码的可读性和可维护性。使用这个库,开发者可以专注于业务逻辑,而不用关心底层的编码解码细节。此外,由于Apache Commons ...

    commons-dbutils-1.6

    这个项目在1.6版本中包含了两个主要的jar文件:`commons-dbutils-1.6.jar`和`commons-dbutils-1.6-sources.jar`。 `commons-dbutils-1.6.jar`是运行时库,它提供了大量的静态方法来处理数据库操作。这个库的核心...

Global site tag (gtag.js) - Google Analytics