【问题标题】:crash ORMLite on Android with proguard使用 proguard 在 Android 上崩溃 ORMLite
【发布时间】:2025-12-07 21:25:02
【问题描述】:

一切都好,直到我对它进行保护。 这是我的 proguard-project.txt

-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
-keep class com.liba.carpool.db.**
-keepclassmembers class com.liba.carpool.db.** { *; } 
-keepattributes Signature

这是日志:

10-29 16:11:24.616: E/AndroidRuntime(12870): java.lang.ExceptionInInitializerError 10-29 16:11:24.616: E/AndroidRuntime(12870):在 com.j256.ormlite.db.SqliteAndroidDatabaseType.extractDatabaseTableConfig(未知 来源) 10-29 16:11:24.616: E/AndroidRuntime(12870): at com.j256.ormlite.dao.DaoManager.createDao(来源不明)10-29 16:11:24.616:E/AndroidRuntime(12870):在 com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.getDao(未知 来源) 10-29 16:11:24.616: E/AndroidRuntime(12870): at com.liba.carpool.db.MappingRouteRepository.(未知来源) 10-29 16:11:24.616: E/AndroidRuntime(12870): 在 com.liba.carpool.db.MyRouteRepository.(未知来源) 10-29 16:11:24.616:E/AndroidRuntime(12870):在 com.liba.carpool.a.a.loadCarpools(来源不明)10-29 16:11:24.616: E/AndroidRuntime(12870):在 com.liba.carpool.DemoApplication.onCreate(未知来源) 10-29 16:11:24.616:E/AndroidRuntime(12870):在 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:981) 10-29 16:11:24.616: E/AndroidRuntime(12870): 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4462) 10-29 16:11:24.616: E/AndroidRuntime(12870): 在 android.app.ActivityThread.access$1300(ActivityThread.java:139) 10-29 16:11:24.616:E/AndroidRuntime(12870):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305) 10-29 16:11:24.616: E/AndroidRuntime(12870): 在 android.os.Handler.dispatchMessage(Handler.java:99) 10-29 16:11:24.616:E/AndroidRuntime(12870):在 android.os.Looper.loop(Looper.java:154) 10-29 16:11:24.616: E/AndroidRuntime(12870):在 android.app.ActivityThread.main(ActivityThread.java:4945) 10-29 16:11:24.616:E/AndroidRuntime(12870):在 java.lang.reflect.Method.invokeNative(Native Method) 10-29 16:11:24.616:E/AndroidRuntime(12870):在 java.lang.reflect.Method.invoke(Method.java:511) 10-29 16:11:24.616: E/AndroidRuntime(12870):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 10-29 16:11:24.616: E/AndroidRuntime(12870): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 10-29 16:11:24.616:E/AndroidRuntime(12870):在 dalvik.system.NativeStart.main(本机方法)10-29 16:11:24.616: E/AndroidRuntime(12870):原因:java.lang.NullPointerException 10-29 16:11:24.616: E/AndroidRuntime(12870): 在 java.lang.reflect.Proxy.getInvocationHandler(Proxy.java:263) 10-29 16:11:24.616:E/AndroidRuntime(12870):在 com.j256.ormlite.android.DatabaseTableConfigUtil.lookupClasses(未知 来源) 10-29 16:11:24.616: E/AndroidRuntime(12870): at com.j256.ormlite.android.DatabaseTableConfigUtil.(未知 来源)

大家都遇到同样的问题吗,谢谢

【问题讨论】:

  • 您找到解决方案了吗?

标签: android proguard ormlite


【解决方案1】:

我遇到了和你一样的问题。我的解决方案是添加 -keepattributes *Annotation* ,它可以工作。 希望能帮到你:)

【讨论】:

    【解决方案2】:

    我将这些行添加到我的 proguard-rules 中:

    -keep class com.j256.**
    -keepclassmembers class com.j256.** { *; }
    -keep enum com.j256.**
    -keepclassmembers enum com.j256.** { *; }
    -keep interface com.j256.**
    -keepclassmembers interface com.j256.** { *; }
    -keepattributes Signature
    -keepattributes *Annotation*
    -keepclassmembers class * { public <init>(android.content.Context); }
    

    【讨论】: