Java Proguard:can';找不到引用的类

Java Proguard:can';找不到引用的类,java,android,eclipse,proguard,Java,Android,Eclipse,Proguard,这里有一些问题,但没有适合我的解决方案。我认为它应该很容易使用。 我刚刚得到一个满是的控制台,找不到引用的类 这是我的proguard-project.txt -injars bin/classes -injars libs -outjars bin/classes-processed.jar -libraryjars C:/Users/ME/android-sdks/platforms/android-10/android.jar -dontpreverify -

这里有一些问题,但没有适合我的解决方案。我认为它应该很容易使用。 我刚刚得到一个满是
的控制台,找不到引用的类

这是我的proguard-project.txt

-injars      bin/classes
-injars      libs
-outjars     bin/classes-processed.jar
-libraryjars C:/Users/ME/android-sdks/platforms/android-10/android.jar

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.content.Context {
   public void *(android.view.View);
   public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}
某些带有警告的类包括:

org.apache.avalon.framework.logger.Logger
org.apache.log4j.Category
org.apache.log4j.Priority
org.apache.log4j.Logger
...
javax.servlet.ServletContextListener
javax.servlet.ServletContextEvent
org.w3c.dom.html.HTMLAnchorElement
org.w3c.dom.html.HTMLObjectElement
org.w3c.dom.html.HTMLTableSectionElement
org.w3c.dom.html.HTMLFrameSetElement
...
org.w3c.dom.events.DocumentEvent
org.w3c.dom.traversal.NodeFilter
...
org.w3c.dom.ranges.Range
org.w3c.dom.ranges.RangeException
...
org.w3c.dom.html.HTMLDocument

据我所知,这意味着您以错误的方式引用了Jar文件

此外,如果您的用户名(ME)包含空格
C:/Users/ME/android-sdk/tools/proguard/proguard-android.txt:proguard-project.txt
proguard将以“有趣”的方式出现。将android sdk移动到
C:\android sdk
,省去您的头痛。

添加到您的配置:

-libraryjars org.apache.jar // name of your jars.
-libraryjars org.w3c.jar
如果没有帮助,请添加:

-dontwarn org.apache.** tag
或者忽略警告(高度不推荐,因为它可能会导致应用程序在运行时因不满足的依赖关系而崩溃):


此文档将帮助您:

如果您使用的是库项目,那么如果出现以下错误,您应该将-libraryjars添加到库proguard配置中:

Warning: com.package...: can't find referenced class com.secondpackage....Classname
只需将以下内容添加到文件proguard-android.txt中:

#if it is class:
-keep class com.package.*{ *; }
#or if it is interface:
-keep interface com.package.*{ *; }
#or if it is a class that extends from any other
-keep class * extends com.example.Model
#or if you know only and of className
-keep class **Starter { *; }
#or if you want to keep only fields of classes
-keepclassmembers class com.package.** {
   *;
}
另外,如果您不想看到日志中使用的所有注释:

-dontnote com.package.**
这个文件名是用buildgradle写的

buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-android.txt'
        }
    } 
或者,如果您想添加许多文件,例如使用 对于添加所有文件:

 buildTypes {
        release {
            minifyEnabled true

            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            proguardFiles fileTree(include: ['*.pro'], dir: '../libraries').asList().toArray()
        }

libraries
文件夹应位于
D:\workspace\MyProject\libraries

在我的情况下,Android Studio在发布版本时冻结。我杀了它。重启后,我开始看到“找不到引用的类”警告


解决方案:我关闭了Android Studio,从我的项目文件夹中删除了.gradle文件夹,然后删除了gradle全局缓存(%USER\u HOME%.gradle/caches)。重新打开项目后,缓存被重建,一切重新开始工作。

我的用户名是“我”:)你能详细说明我是如何错误引用它们的吗,以及如何修复它。谢谢,我想他的意思是如果你的用户名是带空格的“ME”,我已经读过了。它说除非你知道自己在做什么,否则不要使用忽略警告。阿卡,你知道它指的是什么,它很好。但这意味着这样做很可能会使事情破裂。因此,我宁愿正确链接它们而不是忽略警告如果你不想使用-ignore标记,那么只需将带有警告的类复制到你的src(source)文件夹中,它应该可以+1起到帮助作用,但这些不是我的类。我只是想放弃职业后卫。太多了。你可以在apache网站上找到这些类。我也有很多问题。在ProGuard上花了整整两天,太复杂了。为什么要保留&dontwarn?你能举个例子吗?可能是重复的
buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-android.txt'
        }
    } 
 buildTypes {
        release {
            minifyEnabled true

            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            proguardFiles fileTree(include: ['*.pro'], dir: '../libraries').asList().toArray()
        }