Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Butterknife and InstrumentationTestSuite #103

Closed
Pedlar opened this issue Feb 14, 2014 · 8 comments
Closed

Butterknife and InstrumentationTestSuite #103

Pedlar opened this issue Feb 14, 2014 · 8 comments

Comments

@Pedlar
Copy link

Pedlar commented Feb 14, 2014

Having an issues with Butterknife using instrumentationTestSuites. It's failing to find the butterknife.internal.InjectViewProcessor

W/ClassPathPackageInfoSource﹕ Cannot load class. Make sure it is in your apk. Class name: 'butterknife.internal.InjectViewProcessor'. Message: butterknife.internal.InjectViewProcessor
java.lang.ClassNotFoundException: butterknife.internal.InjectViewProcessor

dependencies {
        compile 'com.jakewharton:butterknife:4.0.1'
        instrumentTestCompile 'com.jakewharton.espresso:espresso:1.1-r1'
}
@imminent
Copy link
Contributor

Should InjectViewProcessor only be needed at compile time, meaning it gets added with the "compile" dependency and then used to create the apk. The instrument test then uses that apk. It sounds like the instrumentation test pass is trying to perform annotation processing as well, and sees the InjectViewProcessor registered, but it's not around because you don't have it in a "instrumentTestCompile" dependency.

@JakeWharton
Copy link
Owner

Is there a stacktrace for this or is that the only message? Nothing should be using the annotation processor itself at runtime.

@thaussma
Copy link

I'm having the same problem. Here's my Stacktrace:

W/dalvikvm﹕ Unable to resolve superclass of Lbutterknife/internal/InjectViewProcessor; (2445)
W/dalvikvm﹕ Link of class 'Lbutterknife/internal/InjectViewProcessor;' failed
W/dalvikvm﹕ Unable to resolve superclass of Lbutterknife/internal/InjectViewProcessor; (2558)
W/dalvikvm﹕ Link of class 'Lbutterknife/internal/InjectViewProcessor;' failed
W/ClassPathPackageInfoSource﹕ Cannot load class. Make sure it is in your apk. Class name: 'butterknife.internal.InjectViewProcessor'. Message: butterknife.internal.InjectViewProcessor
    java.lang.ClassNotFoundException: butterknife.internal.InjectViewProcessor
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:217)
            at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:88)
            at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:39)
            at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:50)
            at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:47)
            at android.test.SimpleCache.get(SimpleCache.java:31)
            at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:72)
            at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48)
            at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61)
            at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55)
            at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156)
            at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117)
            at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102)
            at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366)
            at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onCreate(GoogleInstrumentationTestRunner.java:114)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4142)
            at android.app.ActivityThread.access$1300(ActivityThread.java:130)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NoClassDefFoundError: butterknife/internal/InjectViewProcessor
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:217)
            at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:88)
            at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:39)
            at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:50)
            at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:47)
            at android.test.SimpleCache.get(SimpleCache.java:31)
            at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:72)
            at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48)
            at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61)
            at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55)
            at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156)
            at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117)
            at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102)
            at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366)
            at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onCreate(GoogleInstrumentationTestRunner.java:114)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4142)
            at android.app.ActivityThread.access$1300(ActivityThread.java:130)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassNotFoundException: butterknife.internal.InjectViewProcessor
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:217)
            at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:88)
            at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:39)
            at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:50)
            at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:47)
            at android.test.SimpleCache.get(SimpleCache.java:31)
            at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:72)
            at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48)
            at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61)
            at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55)
            at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156)
            at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117)
            at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102)
            at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366)
            at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onCreate(GoogleInstrumentationTestRunner.java:114)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4142)
            at android.app.ActivityThread.access$1300(ActivityThread.java:130)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)    

@JakeWharton
Copy link
Owner

Now that helps and makes sense. Thanks.

@JakeWharton
Copy link
Owner

As a temporary workaround, you can strip everything in butterknife.internal.* via ProGuard.

@ZacSweers
Copy link
Contributor

Should we use that workaround for 5.0 as well? Started getting this issue after updating, but it's a silent exception and doesn't crash the app.

... W/dalvikvm﹕ Unable to resolve superclass of Lbutterknife/internal/ButterKnifeProcessor; (1067)
... W/dalvikvm﹕ Link of class 'Lbutterknife/internal/ButterKnifeProcessor;' failed

P.S. Hey Madison, long time no see haha

@JakeWharton
Copy link
Owner

I'm going to split up the processor and the runtime in v6. No ETA.

@JakeWharton
Copy link
Owner

Encapsulated in #192.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants