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

Proguard configuration #23

Open
dadouf opened this issue Dec 20, 2015 · 1 comment
Open

Proguard configuration #23

dadouf opened this issue Dec 20, 2015 · 1 comment

Comments

@dadouf
Copy link

dadouf commented Dec 20, 2015

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!

@dadouf
Copy link
Author

dadouf commented Dec 20, 2015

An update on that: it seems that simply adding that line solved problem...

-libraryjars <java.home>/lib/rt.jar

(With <java.home> written as is, don't replace it by a path to your java home).

So it seems my problem is solved, but could you confirm? And maybe mention this in the README cause plenty of Android projects do use ProGuard...

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

1 participant