Proguard: не удается найти указанный класс
Есть несколько вопросов вокруг, но нет решения, которое работает для меня. Я думал, что это должно быть легко в использовании. Я просто получаю консоль, полную 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>;
}
и проект.свойства
#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
5 ответов
Добавьте к вашей конфигурации:
-libraryjars org.apache.jar // name of your jars.
-libraryjars org.w3c.jar
Если это не поможет добавить:
-dontwarn org.apache.** tag
или просто игнорируйте предупреждения (крайне не рекомендуется, поскольку это может привести к сбою приложения во время выполнения из-за неудовлетворенных зависимостей):
-ignorewarnings
Этот документ поможет вам: http://proguard.sourceforge.net/manual/troubleshooting.html
Если у вас есть ошибка, такая как:
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.**
Это имя файла написано в сборке Gradle
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
Из того, что я помню, это означает, что вы ссылались на файлы Jar неправильно.
Также, если ваше имя пользователя (ME) содержит пробелы C:/Users/ME/android-sdks/tools/proguard/proguard-android.txt:proguard-project.txt
Proguard сломается "смешными" способами. Переместить Android-SDK в C:\android-sdk
и избавь себя от головной боли.
В моем случае Android Studio зависла при выполнении ProGuard при выпуске сборки. Я убил это. И после перезапуска я начал видеть предупреждения "не могу найти класс, на который ссылаются".
Решение: я закрыл Android Studio, удалил папку.gradle из папки моего проекта, затем удалил глобальный кеш gradle (%USER_HOME%.gradle/caches). После повторного открытия проекта кэши были перестроены, и все снова заработало.
Если вы используете библиотечные проекты, то вам следует добавить -libraryjars в конфигурацию вашей библиотеки proguard