zoukankan      html  css  js  c++  java
  • Android加载第三方jar混淆出错的问题

    如果工程引入了android-support-v4的jar类库,那么在工程打包混淆时,就会出现报错提示。例如提示你:You may need to specify additional library jars (using '-libraryjars')。

    这里先给出解决方案,稍后我们再来解释如何处理类似情况:

    在proguard.cfg里的后面,添加如下内容:
    [java]
    -libraryjars /android-support-v4.jar 
    -dontwarn android.support.v4.** 
    -keep class android.support.v4.** { *; } 
    -keep public class * extends android.support.v4.** 
    -keep public class * extends android.app.Fragment 

    然后你再打包看看,应该可以正常生成apk安装包了。

    打包出错:
         情况一:
     "类1 can't find referenced class 类2" 字面上的意思就是类1找不到类2的引用;它会建议你:"You may need to specify additional library jars (using '-libraryjars').";
    需要使用-libraryjars加上项目中使用到的第三方库就OK了。
    例如:-libraryjars /android-support-v4.jar
    注意:这里引用方式是当前工程的根目录(也可以配置其他目录),也就是说,你要把第三方jar放到当前目录下,否则就会警告说找不到jar文件!

    情况二:
    例如: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator,碰到这样的情况,可以使用-dontwarn com.xx.yy.**,不对错误提出警告。
    注意:使用这个方式的话,要确保自己没有用到这个库里面的类!否则就会抛ClassNotFoundException!

    情况三:
    在工程中确实用到了该类,采用上面方式还是不行。这个时候就要再增加一项:-keep class com.xx.yy.** { *;},让当前类不混淆。

    小结:
    对于引用第三方包的情况,可以采用下面方式避免打包出错:
    -libraryjars /aaa.jar
    -dontwarn com.xx.yy.**
    -keep class com.xx.yy.** { *;}

    我们可以使用
    -dontwarn com.xx.bbb.**
    -keep class com.xx.bbb.** { *;}

    参数来保持第三方库中的类而不乱,-dontwarn和-keep 结合使用,意思是保持com.xx.bbb.**这个包里面的所有类和所有方法而不混淆,接着还叫ProGuard不要警告找不到com.xx.bbb.**这个包里面的类的相关引用。

    http://www.2cto.com/kf/201206/136678.html

    http://blog.csdn.net/u_xtian/article/details/7495023

  • 相关阅读:
    C++ 沉思录——Chap6:句柄2
    C++ 沉思录——Chap5:代理类
    C++ 沉思录——Chap4:设计类的核查表
    Linux 网卡驱动相关——01
    FCoE的提出
    想成为嵌入式程序员应知道的0x10个基本问题
    C++ 沉思录——Chap6:句柄
    C++ 沉思录——Chap8:一个面向对象程序范例
    数据库调优积累系列(1):索引
    QTP使用问题集锦
  • 原文地址:https://www.cnblogs.com/qsl568/p/2882397.html
Copyright © 2011-2022 走看看