Android: Use dagger in test get ClassNotFound error when running tests with proguard release config

267 Aufrufe
Direkt zur ersten ungelesenen Nachricht

Xiaofeng Han

ungelesen,
30.12.2014, 18:04:4130.12.14
an dagger-...@googlegroups.com
I use dagger to inject some test component (shared with main code). And have to enable proGuard shrink or will hit dex limit.
When I run a test case, get following error:


E/AndroidRuntime(23858): java.lang.NoClassDefFoundError: {package}/dagger/provider/DebugNetworkModule$ModuleAdapter$ProvideCacheEnabledOkClientProvidesAdapter
E/AndroidRuntime(23858): at {package}.dagger.provider.DebugNetworkModule$ModuleAdapter.getBindings(DebugNetworkModule$ModuleAdapter.java:36)
E/AndroidRuntime(23858): at {package}.dagger.provider.DebugNetworkModule$ModuleAdapter.getBindings(DebugNetworkModule$ModuleAdapter.java:16)
E/AndroidRuntime(23858): at dagger.ObjectGraph$DaggerObjectGraph.makeGraph(ObjectGraph.java:185)
E/AndroidRuntime(23858): at dagger.ObjectGraph$DaggerObjectGraph.access$000(ObjectGraph.java:138)



build.gradle:

compile 'com.squareup.dagger:dagger:1.2.1@jar'
compile 'com.squareup.dagger:dagger-compiler:1.2.1@jar'
compile 'com.squareup:javawriter:2.2.1@jar'

proguard configuration:
proguardFile getDefaultDexGuardFile('dexguard-release.pro')
proguardFile 'dexguard-project.txt'
p
roguardFile 'dexguard-project-debug.txt'


dexguard-project.txt content:
-dontoptimize
-dontobfuscate
-dontwarn

# Exclude files generated by Dagger

# keep annotations
-keepattributes *Annotation*

-keepclassmembers,allowobfuscation class * {
@javax.inject.* *; # keep all methods annotated by annotations defined in javax.inject.* package
@dagger.* *; # keep all methods annotated by annotations defined in and dagger.* package
<init>(); # keep default no-argument constructors
}

# keep files generated by Dagger
-keep class **$ModuleAdapter
-keep class **$InjectAdapter
-keep class **$StaticInjection
-keep class **$Adapter
-keepnames class dagger.Lazy


-keep class {my package}.test.** {*;}
-keep class {my package}.dagger.** {*;}
-keepnames class {my package}.test.** {*;}

dexguard-project-debug.txt content:

-dontobfuscate
Allen antworten
Antwort an Autor
Weiterleiten
0 neue Nachrichten