Proguard: can't find referenced class

26,588

Solution 1

Add to your config:

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

If it does not help add:

-dontwarn org.apache.** tag

or just ignore warnings (highly unrecommended since it could cause your app to crash at runtime over unsatisfied dependencies):

-ignorewarnings 

This doc will help you : http://proguard.sourceforge.net/manual/troubleshooting.html

Solution 2

If you have an error such as:

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

Just add to your file 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.** {
   *;
}

Also if you dont want to see all of notes in log use:

-dontnote com.package.**

This file name is written in build Gradle

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

Or if you want to add many files for example use the following repo And for add all of files:

 buildTypes {
        release {
            minifyEnabled true

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

libraries folder should be at D:\workspace\MyProject\libraries

Solution 3

From what I can remember, it means you have referenced the Jar files in the wrong way.

Also, if your username (ME) contains spaces C:/Users/ME/android-sdks/tools/proguard/proguard-android.txt:proguard-project.txt Proguard will break in "funny" ways. Move android-sdk to C:\android-sdk and save yourself headache.

Share:
26,588
IAmGroot
Author by

IAmGroot

I graduated from The University of Sheffield, and am currently work as a software engineer.

Updated on October 15, 2020

Comments

  • IAmGroot
    IAmGroot over 3 years

    There are a few questions around but no solution that works for me. I thought it was suppose to be easy to use. I just get a console full of can't find referenced class

    This is my 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>;
    }
    

    and project.properties

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

    some of the classes with warnings are:

    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
    
  • IAmGroot
    IAmGroot almost 12 years
    My username is 'ME' :) Can you please expand on how I have referenced them wrong, and how to fix it. Thanks
  • IAmGroot
    IAmGroot almost 12 years
    Ive been reading that already. It says not to use ignorewarnings unless you know what your doing. Aka, you know what its reffering to and that it is fine. But implies things may well break doing so. So id rather link them properly than ignore warnings
  • Yahor10
    Yahor10 almost 12 years
    If you dont want use -ignore tag then just copy your classes with warnings to your src(source) folder and it should works
  • IAmGroot
    IAmGroot almost 12 years
    +1 for helping, but these are not my classes. Im just going to give up on Pro-guard. Too much hastle.
  • Yahor10
    Yahor10 almost 12 years
    you can find these classes on apache site
  • Oliver Dixon
    Oliver Dixon about 9 years
    I'm having lots of issues too. Spent a whole 2 days on ProGuard, overly complicated.
  • deadfish
    deadfish about 8 years
    why keep & dontwarn?
  • IgorGanapolsky
    IgorGanapolsky over 7 years
    Does -ignorewarning have any adverse effect on the Proguard result?
  • Clive Jefferies
    Clive Jefferies over 6 years
    Could you give an example please.
  • Erik B
    Erik B over 6 years
    I think he meant if your username is "M E" with any spaces.