Skip to content

Proguard configuration #23

@dadouf

Description

@dadouf

Hi,

I have a lot of trouble using this library in a production environment, that is with Proguard enabled (minifyEnabled true).

If I don't specify any rule, I get these warnings during compilation:

Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find superclass or interface javax.annotation.processing.AbstractProcessor
Warning:com.squareup.javawriter.JavaWriter: can't find referenced class javax.lang.model.element.Modifier
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.AbstractProcessor
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.SourceVersion
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.RoundEnvironment
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced field 'javax.annotation.processing.ProcessingEnvironment processingEnv' in program class com.tojc.ormlite.android.compiler.ContractAnnotationProcessor
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.ProcessingEnvironment
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.Filer
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.tools.JavaFileObject
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Modifier
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.ProcessingEnvironment
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.tools.Diagnostic$Kind
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.Messager
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.ElementKind
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.PackageElement
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.ElementKind
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.PackageElement
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.AbstractProcessor
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.RoundEnvironment
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.tools.JavaFileObject
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.SourceVersion
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.RoundEnvironment
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.ProcessingEnvironment
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.Filer
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.tools.JavaFileObject
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Modifier
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.tools.Diagnostic$Kind
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.Messager
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.ElementKind
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.tools.Diagnostic
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.SourceVersion
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.RoundEnvironment
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.tools.JavaFileObject
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.RoundEnvironment
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.TypeElement
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.TypeElement
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.RoundEnvironment
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Modifier
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.PackageElement
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.ElementKind
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.ElementKind
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.ElementKind
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.PackageElement
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.element.Element
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.SupportedAnnotationTypes
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.annotation.processing.SupportedSourceVersion
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor: can't find referenced class javax.lang.model.SourceVersion
Warning:com.tojc.ormlite.android.compiler.ContractAnnotationProcessor$1: can't find referenced class javax.lang.model.element.Element

If I try to keep everything in the com.tojc.ormlite package and the javax package with:

-keep class com.tojc.**
-keepclassmembers class com.tojc.** { *; }
-keep enum com.tojc.**
-keepclassmembers enum com.tojc.** { *; }
-keep interface com.tojc.**
-keepclassmembers interface com.tojc.** { *; }

-keep class javax.**

I still get the same errors.


If I simply ignore the warnings, with:

-dontwarn com.tojc.ormlite.android.compiler.**
-dontwarn com.squareup.javawriter.**

It compiles fine, obviously, but it crashes at runtime:

Caused by: java.lang.IllegalStateException: Could not find public constructor that has a single (Context) argument for helper class class com.davidferrand.posted.provider.c
   at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:215)
   at com.j256.ormlite.android.apptools.OpenHelperManager.loadHelper(OpenHelperManager.java:170)
   at com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(OpenHelperManager.java:78)
   at com.a.a.a.a.c(OrmLiteBaseContentProvider.java:68)
   at com.a.a.a.a.b(OrmLiteBaseContentProvider.java:56)
   at com.a.a.a.b.query(OrmLiteDefaultContentProvider.java:166)
   at android.content.ContentProvider.query(ContentProvider.java:1017)
   at android.content.ContentProvider$Transport.query(ContentProvider.java:238)
   at android.content.ContentResolver.query(ContentResolver.java:491)
   at android.support.v4.b.g.a(ContentResolverCompatJellybean.java:29)
   at android.support.v4.b.f.a(ContentResolverCompat.java:57)
   at android.support.v4.b.c.a(ContentResolverCompat.java:125)
   at android.support.v4.b.m.h(CursorLoader.java:59)
   at android.support.v4.b.m.d(CursorLoader.java:37)
   at android.support.v4.b.a.e(AsyncTaskLoader.java:296)
   at android.support.v4.b.b.a(AsyncTaskLoader.java:54)
   at android.support.v4.b.b.a(AsyncTaskLoader.java:42)
   at android.support.v4.b.z.call(ModernAsyncTask.java:128)
   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
   at java.lang.Thread.run(Thread.java:818) 
Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context]
   at java.lang.Class.getConstructor(Class.java:528)
   at java.lang.Class.getConstructor(Class.java:492)
   at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:213)
   at com.j256.ormlite.android.apptools.OpenHelperManager.loadHelper(OpenHelperManager.java:170) 
   at com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(OpenHelperManager.java:78) 
   at com.a.a.a.a.c(OrmLiteBaseContentProvider.java:68) 
   at com.a.a.a.a.b(OrmLiteBaseContentProvider.java:56) 
   at com.a.a.a.b.query(OrmLiteDefaultContentProvider.java:166) 
   at android.content.ContentProvider.query(ContentProvider.java:1017) 
   at android.content.ContentProvider$Transport.query(ContentProvider.java:238) 
   at android.content.ContentResolver.query(ContentResolver.java:491) 
   at android.support.v4.b.g.a(ContentResolverCompatJellybean.java:29) 
   at android.support.v4.b.f.a(ContentResolverCompat.java:57) 
   at android.support.v4.b.c.a(ContentResolverCompat.java:125) 
   at android.support.v4.b.m.h(CursorLoader.java:59) 
   at android.support.v4.b.m.d(CursorLoader.java:37) 
   at android.support.v4.b.a.e(AsyncTaskLoader.java:296) 
   at android.support.v4.b.b.a(AsyncTaskLoader.java:54) 
   at android.support.v4.b.b.a(AsyncTaskLoader.java:42) 
   at android.support.v4.b.z.call(ModernAsyncTask.java:128) 
   at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
   at java.lang.Thread.run(Thread.java:818) 

I sense there's a problem with javax being obfuscated by Proguard, but I lack the insight that you have to determine the right rules.

Note: I used version 1.0.4.
Thanks for your help, I'm sure it'll help others in the future!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions