2014-07-26 2 views
0

Я запускаю ProGuard для моей сборки релиза и стараюсь как можно больше оптимизировать его. Единственными настраиваемыми правилами, которые я добавил до сих пор, являются Serialization и Facebook. Теперь я запускаю свою сборку релизов, и я получаю трассировку стека, и то, что она отображает, действительно отбрасывает меня. Вот мой трассировки стека:Android - ошибка Proguard со статической строкой

java.lang.NullPointerException 

E/AndroidRuntime(10842): at com.myapp.android.myapp.dh.a(Unknown Source) 

E/AndroidRuntime(10842): at android.support.v4.app.Fragment.b(Unknown Source) 

E/AndroidRuntime(10842): at android.support.v4.app.w.a(Unknown Source) 

E/AndroidRuntime(10842): at android.support.v4.app.p.onCreatePanelMenu(Unknown Source) 

E/AndroidRuntime(10842): at android.support.v7.a.g.a(Unknown Source) 

E/AndroidRuntime(10842): at android.support.v7.a.m.a(Unknown Source) 

E/AndroidRuntime(10842): at android.support.v7.a.g.onCreatePanelMenu(Unknown Source) 

В отображении com.myapp.android.myapp.dh.a является:

com.myapp.android.myapp.LocalFragment -> com.myapp.android.myapp.dh: 
java.lang.String USER_ACCOUNT -> a 

В моем фактическом коде это:

public static String USER_ACCOUNT = "com.myapp.android.myapp.LocalFragment.user_account"; 

сейчас эта константа используется в нескольких местах по всему фрагменту, но она никогда не должна быть нулевой. Кто-нибудь видел такую ​​проблему раньше? Есть ли у Proguard странные вещи со статикой?

Редактировать: Эта ошибка возникает, и приложение падает в основном, как только я принимаю действие, которое будет загружать этот фрагмент.

EDIT AGAIN После немного большего расследования я ошибался в отношении того, что было. a был Статический член, но a также является методом. Это метод onCreate. Я также видел эту ошибку в LogCat перед NPE брошен в OnCreate:

W/SupportMenuInflater(10842): Cannot instantiate class: android.support.v7.widget.SearchView 

W/SupportMenuInflater(10842): java.lang.NoSuchMethodException: <init> [class android.content.Context] 

W/SupportMenuInflater(10842): at java.lang.Class.getConstructorOrMethod(Class.java:472) 

W/SupportMenuInflater(10842): at java.lang.Class.getConstructor(Class.java:446) 

W/SupportMenuInflater(10842): at android.support.v7.internal.view.e.a(Unknown Source) 

W/SupportMenuInflater(10842): at android.support.v7.internal.view.e.a(Unknown Source) 

W/SupportMenuInflater(10842): at android.support.v7.internal.view.c.a(Unknown Source) 

W/SupportMenuInflater(10842): at android.support.v7.internal.view.c.inflate(Unknown Source) 

W/SupportMenuInflater(10842): at com.myapp.android.myapp.dh.a(Unknown Source) 

ответ

6

У вас есть проблемы с ProGuard обфускации библиотеки поддержки, или, в частности, компонент SearchView, что вы, вероятно, пытаются инициировать в своем фрагменте , Чтобы этого избежать, вам нужно добавить несколько исключений в файл конфигурации proguard (proguard.cfg).

-keep class android.support.v7.widget.** { *; } 
-keep interface android.support.v7.widget.** { *; } 

Это позволит сохранить все классы и интерфейсы внутри виджета пакета библиотеки поддержки от того затемненного.

Смежные вопросы