Попытка вызвать виртуальный метод java.lang.Class java.lang.reflect.Field.getType() для нулевой ссылки на объект

Я использую activeandroid в своем приложении для Android.

Все работает нормально, запуская отладочную сборку во время разработки. После создания релизной сборки моего проекта приложение вылетает. Это происходит как на Nexus5 с Android 5.0, так и на Nexus 7 с Android 4.4.2.

Вот исходный код, если вам нужно взглянуть!
https://github.com/MetalMatze/Krautreporter

Спасибо!

java.lang.RuntimeException: Unable to create application com.activeandroid.app.Application: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.reflect.Field.getType()' on a null object reference
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4521)
at android.app.ActivityThread.access$1500(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1339)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.reflect.Field.getType()' on a null object reference
at com.activeandroid.e.f.c(Unknown Source)
at com.activeandroid.e.f.c(Unknown Source)
at com.activeandroid.f.c(Unknown Source)
at com.activeandroid.f.onCreate(Unknown Source)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at com.activeandroid.b.b(Unknown Source)
at com.activeandroid.b.a(Unknown Source)
at com.activeandroid.a.a(Unknown Source)
at com.activeandroid.a.a(Unknown Source)
at com.activeandroid.a.a(Unknown Source)
at com.activeandroid.app.Application.onCreate(Unknown Source)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1011)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4518)
... 9 more

person Matthias Loibl    schedule 10.12.2014    source источник


Ответы (1)


Вы используете отражение, чтобы найти поле по его имени. Сборка вашего выпуска минимизируется с помощью Proguard/R8, который переименовывает поля во что-то короткое и неясное. Вам нужно добавить правило в Proguard/R8, чтобы сохранить имена полей, к которым вы обращаетесь с помощью отражения.

Здесь уже есть ответ о том, как сохранить поля во всех или определенных классах: /а>

person Eugen Pechanec    schedule 10.12.2014
comment
Ты был прав. Спасибо! С этими правилами proguard я получил это: rejasupotaro/Rebuild/blob/ - person Matthias Loibl; 11.12.2014