Android release minifyEnabled with couchbase - not working

Hi,

I am using couchbase lite in my android application, and i have tried to compile it for release, using build signed APK.

My gradle has minifyEnabled=true for release target, and when i try to run it fails to create the manager with the following exception.
Proguard complains about it as well, and i did -dontwarn on couchbase package.
Running with minifyEnabled=false works, but i do want my code to be minified.

Thanks a lot in advance.
Adi

W/System.err( 7897): java.lang.NoSuchFieldError
W/System.err( 7897): at libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:688)
W/System.err( 7897): at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:663)
W/System.err( 7897): at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:641)
W/System.err( 7897): at libcore.reflect.AnnotationAccess.getDeclaredAnnotation(AnnotationAccess.java:170)
W/System.err( 7897): at libcore.reflect.AnnotationAccess.getAnnotation(AnnotationAccess.java:72)
W/System.err( 7897): at java.lang.Class.getAnnotation(Class.java:343)
W/System.err( 7897): at com.b.a.c.f.ak.(Unknown Source)
W/System.err( 7897): at com.b.a.c.f.ak.a(Unknown Source)
W/System.err( 7897): at com.b.a.c.z.(Unknown Source)
W/System.err( 7897): at com.couchbase.a.y.(Unknown Source)
W/System.err( 7897): at com.mypackage.d.a.a(Unknown Source)
W/System.err( 7897): at com.mypackage.d.a.a(Unknown Source)
W/System.err( 7897): at com.mypackage.d.b.b(Unknown Source)
W/System.err( 7897): at com.mypackage.ui.activity.MainActivity.h(Unknown Source)
W/System.err( 7897): at com.mypackage.ui.activity.as.a(Unknown Source)
W/System.err( 7897): at com.mypackage.ui.activity.as.b(Unknown Source)
W/System.err( 7897): at com.mypackage.e.c.run(Unknown Source)
W/System.err( 7897): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
W/System.err( 7897): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err( 7897): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err( 7897): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err( 7897): at java.lang.Thread.run(Thread.java:818)
W/System.err( 7897): Caused by: java.lang.NoSuchFieldException: PUBLIC_ONLY
W/System.err( 7897): at java.lang.Class.getDeclaredField(Class.java:886)
W/System.err( 7897): at libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:685)
W/System.err( 7897): … 21 more
I/art ( 7897): Rejecting re-init on previously-failed class java.lang.Class<com.couchbase.a.y>

Hi @adic, can you try keeping the couchbase classes, not suppressing the warning from proguard. We use the proguard minification with couchbase successfully.

Also, which version of couchbase lite are you using? I thing they changed the package of jackson in one of the last releases, @hideki can confirm on that

-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.map.ext.**

-keep class com.couchbase.touchdb.TDCollateJSON { *; }
-keep class com.couchbase.lite.**{ *; }

Regards,
Vlad

Hi @vladoatanasov, Couchbase Lite v1.1.0 depends on Jackson v2.5.0.

-keep class com.couchbase.touchdb.TDCollateJSON { ; }
-dontwarn com.couchbase.touchdb.TDCollateJSON.
*

-keep class com.couchbase.lite.*{ ; }
-dontwarn com.couchbase.lite.

-keep class com.couchbase.lite.util.*{ ; }
-dontwarn com.couchbase.lite.util.

-keep class com.couchbase.lite.store.*{ ; }
-dontwarn com.couchbase.lite.store.

-keep class com.couchbase.lite.Manager.*{ ; }
-dontwarn com.couchbase.lite.Manager.

-keep class com.couchbase.lite.Database.*{ ; }
-dontwarn com.couchbase.lite.Database.

-keep class com.couchbase.cbforest.*{ ; }
-dontwarn com.couchbase.cbforest.

-keep class couchbase.lite.listener.*{ ; }
-dontwarn couchbase.lite.listener.

-keep class Acme.Serve.Serve.*{ ; }
-dontwarn Acme.Serve.Serve.

-keep class Acme.Serve.SimpleAcceptor.*{ ; }
-dontwarn Acme.Serve.SimpleAcceptor.

-keep class com.couchbase.lite.listener.LiteServer.serve.*{ ; }
-dontwarn com.couchbase.lite.listener.LiteServer.serve.

-keep class Acme.Serve.*{ ; }
-dontwarn Acme.Serve.

These saved my life…many redundant but needed…