【问题标题】:Running ProGuard having AQuery library运行具有 AQuery 库的 ProGuard
【发布时间】:2014-03-12 17:21:41
【问题描述】:

我正在尝试配置 Proguard,但无法使其正常工作。

这是错误:

我尝试过类似的方法:

-keep class com.android.auth.TwitterHandle.** { *; }
-keep class oauth.** { *; }

没有运气。

无论如何,我真的不认为忽略是答案。因为这可能意味着有些东西坏了。

有什么建议吗?

谢谢!

【问题讨论】:

    标签: android obfuscation proguard aquery


    【解决方案1】:

    警告表明 AndroidQuery 库依赖于 OAuth 库。显然,您在项目中使用了前一个库,但缺少后一个库。您可以添加缺少的库,但如果您的应用程序在调试模式下没有它也可以正常工作,您可以告诉 ProGuard 忽略缺少的依赖项。在这种情况下:

    -dontwarn com.androidquery.auth.**
    

    或者,同样的效果:

    -dontwarn oauth.signpost.**
    

    参见 ProGuard 手册 > 疑难解答 > Warning: can't find referenced class

    (我是ProGuard的开发者)

    【讨论】:

      【解决方案2】:

      将这些行添加到您的 proguard 文件中。

      -dontwarn oauth.**
      -dontwarn com.android.auth.TwitterHandle.**
      
      -keep class oauth.** { *; }
      -keep class com.android.auth.TwitterHandle.** { *; }
      

      编辑:

      无论如何,我真的不认为忽略是答案。因为那个 可能意味着有些东西坏了。

      如果你想使用 Proguard 并且遇到一些错误,例如找不到类,那么你必须禁用/忽略它们的混淆。因为 Proguard 在混淆时会重命名类的名称、字段和方法。如果对这些类使用反射,这将成为一个大问题。所以你必须说 proguard 来忽略(而不是混淆)一些类来防止这个问题。

      【讨论】:

        【解决方案3】:

        请试试这个帖子https://stackoverflow.com/a/15477898/1665964

        使用此示例插入以跳过在 ProGuard 中混淆的库、jar、类和子类

        -optimizationpasses 5
        -dump class_files.txt
        -printseeds seeds.txt
        -printusage unused.txt
        -printmapping mapping.txt
        -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
        -allowaccessmodification
        -repackageclasses ''
        
        -keep public class * extends android.app.Activity
        -keep public class * extends android.app.Application
        -keep public class * extends android.app.MapActivity
        -keep public class * extends android.app.Service
        -keep public class * extends android.content.BroadcastReceiver
        -keep public class * extends android.content.ContentProvider
        
        -libraryjars  libs/commons-io-2.2.jar
        -libraryjars  libs/gson-2.2.2.jar
        -keep public class org.apache.commons.io.**
        -keep public class com.google.gson.**
        -keep public class com.google.gson.** {public private protected *;}
        
        ##---------------Begin: proguard configuration for Gson ----------
        -keepattributes Signature
        -keepattributes *Annotation*
        -keep class com.mypackage.ActivityMonitor.ClassMultiPoints.** { *; }
        -keep public class com.mypackage.ActivityMonitor$ClassMultiPoints     { public protected *; }
        -keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints { public protected *; }
        -keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints$ClassPoint { public protected *; }
        ##---------------End: proguard configuration for Gson ----------
        

        【讨论】:

          【解决方案4】:

          错误的原因一定是您可能正在使用外部 jar 文件(在 libs 文件夹中)。

          如果是这种情况,在-keep class ... 行之前添加以下行应该可以解决您的问题。

          -libraryjars libs/<jar_filename>

          【讨论】:

            【解决方案5】:

            如果您不熟悉 proguard cmd 工具,那么您可以尝试位于您的 android SDK 文件夹 tools/proguard/lib/proguardgui 的 proguard gui。

            打开 proguardgui 并加载您的配置文件。

            然后在输入/输出部分添加您的输入和输出 jar 以及添加您在项目中使用的 android lib。 *****您的主要问题是您没有添加项目中使用的库(Aquery.jar 和其他)jar,因此 proguard 找不到所需的类。***

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-07-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多