有几个问题,但没有适合我的解决方案。我认为这很容易使用。
我刚拿到一个满是can't find referenced class
这是我的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
答案 0 :(得分:10)
添加到您的配置:
-libraryjars org.apache.jar // name of your jars.
-libraryjars org.w3c.jar
如果没有帮助,请添加:
-dontwarn org.apache.** tag
或者只是忽略警告(非常不推荐,因为它可能导致您的应用程序在运行时因未满足的依赖项而崩溃):
-ignorewarnings
此文档将为您提供帮助:http://proguard.sourceforge.net/manual/troubleshooting.html
答案 1 :(得分:6)
如果您遇到如下错误:
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.**
此文件名以build Gradle
编写buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-android.txt'
}
}
或者,如果您要添加许多文件,例如使用the following repo 并添加所有文件:
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
答案 2 :(得分:1)
从我记忆中来看,这意味着你以错误的方式引用了Jar文件。
此外,如果您的用户名(ME)包含空格C:/Users/ME/android-sdks/tools/proguard/proguard-android.txt:proguard-project.txt
,Proguard将以“有趣”方式中断。将android-sdk移至C:\android-sdk
并避免让自己头疼。
答案 3 :(得分:0)
如果您正在使用库项目,那么应该将-libraryjars添加到您的库proguard config
答案 4 :(得分:0)
在我看来,Android Studio在发布版本上执行ProGuard时冻结了。我杀了它重新启动后,我开始看到&#34;无法找到引用的类&#34;警告。
解决方案:我关闭了Android Studio,从我的项目文件夹中删除了.gradle文件夹,然后删除了gradle全局缓存(%USER_HOME%.gradle / caches)。重新打开项目后,重建了缓存一切都开始恢复了。