zoukankan      html  css  js  c++  java
  • Base64编码使用commons-codec-1.11.jar,在Android中出现编译通过,运行崩溃的问题。

    前言:

    1 在对接加密解密的时候,相同文本Base64编码后,安卓端与java服务端出现不一样的密文。

    安卓端导入的包是:android.util.Base64

    java服务端导入的包是:org.apache.commons.codec.binary.Base64

    2 果断使用服务端一样的jar包 commons-codec-1.11.jar,编译通过运行却崩溃了,出现错误:java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.<init>

    what?一脸懵逼,两脸懵逼,三脸懵逼???

    好吧,经过一顿操作猛如虎的折腾度娘之后,找到原因是:

    android 系统 framework 层也使用了org.apache.commons.codec 库,运行时调用的是 framework 层的库,根本没调我们添加到 lib 里的 jar 包。 错误应该是 framework 使用的库对应的 Base64 没有对应的静态方法。
     
    既如此,那如果我把我添加的jar里面的包名给修改了,在引用修改后的包名,这样就不会冲突了。
     
     
    如何修改jar包里面的包名?
     
    1.下载jarjar.jar工具

    链接:https://pan.baidu.com/s/1VXOII_HKUPGjYioPuMY2jA
    提取码:ceiv

    2.把jarjar.jar和要修改的jar包(比如:commons-codec-1.11.jar)放在同一目录下
     
    3.新建rule.txt文件(同步骤2放同一目录下):
      rule.txt有三種指令,分別如下:

        1. rule用來取代Package的名称。

                   rule pattern result 

           2.zap用來移除符合名称的Package。

               zap pattern

           3.keep只会保留符合的Package的名称,其他的則會刪除。如果和zap一起使用,將會在zap执行完之后才執行。

                     keep pattern

              备注: pattern为要比对的字串,可以使用「*」和「**」來表示任意的Package名称。「*」可以代表一层的Package,「**」可以代表多层的Package。

              result为要取代成的字串,可以使用「@1」、「@2」这类的符号表示要使用第几个pattern的「*」或「**」所代表的字串。

              如果要将Jar包內的「org.apache.commons.codec」名称全都替換成「changed.org.apache.commons.codec」,可以编写以下的rules.txt:

         rule pattern result
         zap pattern
         rule org.apache.commons.codec.** changed.org.apache.commons.codec.@1

    4.打开cmd,输入以下命令,即可得到一个修改过包名的jar包:

     java -jar jarjar.jar process ./rule.txt commons-codec-1.11.jar ./changed-commons-codec-1.11.jar

       备注:commons-codec-1.11.jar 是想要修改包名的jar包,changed-commons-codec-1.11.jar是修改包名后的jar包

  • 相关阅读:
    glog Windows Visual Studio 2013 编译项目
    Git Tag管理发行版本
    Ubuntu 16.04环境中读取XBOX 360手柄信息
    GCC 中 的pie和fpie选项
    CMakeLists.txt 常用指令说用
    chrome无法访问github.com
    删除前n天的数据
    shell(9)秒转换为时分秒
    Drools规则引擎实践直白总结
    空闲时间研究一个小功能:winform桌面程序如何实现动态更换桌面图标
  • 原文地址:https://www.cnblogs.com/jingmo0319/p/13463534.html
Copyright © 2011-2022 走看看