2012-09-25 56 views
5

有几个问题,但没有解决方案适用于我。我认为这是很容易使用的。 我只是得到一个完整的can't find referenced classProguard:找不到引用类

这个控制台是我的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>; 
} 

和project.properties

#Proguard enabled 
proguard.config=C:/Users/ME/android-sdks/tools/proguard/proguard-android.txt:proguard-project.txt 

一些带有警告的类有:

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 

回答

1

从我记得,这意味着你引用了Jar文件以错误的方式。

此外,如果您的用户名(ME)包含空格C:/Users/ME/android-sdks/tools/proguard/proguard-android.txt:proguard-project.txt Proguard会以“有趣”的方式突破。将android-sdk移动到C:\android-sdk并保存自己的头痛。

+2

我的用户名是'我':)你可以请扩展我如何引用他们错误,以及如何解决它。谢谢 – Doomsknight

9

添加到您的配置:

-libraryjars org.apache.jar // name of your jars. 
-libraryjars org.w3c.jar 

如果它不能帮助增加:

-dontwarn org.apache.** tag 

或不理会警告(非常不推荐的,因为它可能会导致您的应用程序在运行时过不满意的依赖崩溃):

-ignorewarnings 

这份文件将帮助您:http://proguard.sourceforge.net/manual/troubleshooting.html

+3

我一直在阅读。它说不使用ignorewarnings,除非你知道你在做什么。也就是说,你知道自己想要什么,并且没问题。但意味着事情可能会打破这样做。因此,id而不是正确地链接它们,而不是忽略警告 – Doomsknight

+0

如果你不想使用-ignore标签,那么只需将警告的类复制到你的src(source)文件夹中,它应该可以帮助 – Yahor10

+1

+1,但这些不是我的类。我只是要放弃对前卫。 To To太多。 – Doomsknight

0

如果使用的是库项目,比如果你有一个错误,如您应该添加-libraryjars到库中的ProGuard配置

+0

请你举个例子。 –

5

Warning: com.package...: can't find referenced class com.secondpackage....Classname 

只需添加到您的文件的ProGuard-机器人。 TXT

-keep class com.package.*{ *; } 
-dontwarn com.package.** 

这个文件名是写在构建摇篮

buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-android.txt' 
     } 
    } 
+6

为什么要保持和dontwarn? – deadfish

0

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

解决方案:我关闭了Android Studio,从我的项目文件夹中删除了.gradle文件夹,然后删除了gradle全局缓存(%USER_HOME%.gradle/caches)。重启项目后,缓存重建,所有事情都开始重新开始。

相关问题