2017-01-31 12 views
1

хорошего вечера,Android Proguard и FirebaseListAdapter конфликтующих

Я провел несколько часов, пытаясь понять, что происходит. Это ситуация:

Сделано приложение, прекрасно работает в режиме отладки, но режим релиз дает мне ошибки на FirebaseListAdapter:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("a/"); 
    mAdapter = new FirebaseListAdapter<Acties>(activity, Acties.class, R.layout.list, ref) { 

     @Override 
     public void populateView(View v, Acties model, int position) { 
      ((TextView)v.findViewById(R.id.textView1)).setText(model.getWinkel()); 
      ((TextView)v.findViewById(R.id.textView2)).setText(model.getBericht()); 
      ((TextView)v.findViewById(R.id.textView3)).setText(model.getExpdate()); 
     } 
    }; 

FirebaseListAdapter использует Acties.class в добытчиками.

public class Acties { 
private String bericht; 
private String winkel; 
private String expdate; 

public Acties() { 
} 

public Acties(String bericht, String expdate, String winkel) { 
    this.bericht = bericht; 
    this.winkel = winkel; 
    this.expdate = expdate; 
} 

public String getBericht() { 
    return bericht; 
} 

public String getExpdate() { 
    return expdate; 
} 

public String getWinkel() { 
    return winkel; 
} 

}

Я редактировал каждую строку для публики, а не частным. (В соответствии с этим ответом: https://stackoverflow.com/a/37744290/6510329)

Это зафиксировало сбой приложения, но теперь у меня есть пустой список. Теперь я вижу ListView, но он не заполнен информацией, полученной из моей базы данных.

Что происходит? Я не вижу ошибку из-за ее режима выпуска.

Я также добавил @Keep в свои классы, и это все еще не сработало. (Ответ: https://stackoverflow.com/a/41141406/6510329)

Добавлена ​​этот код Proguard-файл правила:

-keep class com.firebase.** { *; } 
-keep class org.apache.** { *; } 
-keepnames class com.fasterxml.jackson.** { *; } 
-keepnames class javax.servlet.** { *; } 
-keepnames class org.ietf.jgss.** { *; } 
-dontwarn org.w3c.dom.** 
-dontwarn org.joda.time.** 
-dontwarn org.shaded.apache.** 
-dontwarn org.ietf.jgss.** 

Который дал мне точно такой же, как и раньше, список теперь виден, но с пустым TextViews .. (Ответ: https://stackoverflow.com/a/26274623/7157263)

Добавлены эти правила Proguard:

-keepattributes Signature 
-keepattributes *Annotation* 

Еще ничего не изменилось .. КАЖДАЯ функция firebase работает идеально. КРОМЕ метода FirebaseListAdapter/populateview

Спасибо за чтение на все это, я собираюсь сделать перерыв сейчас и вернуться к нему в ближайшее время, возможно, это даст мне какой-то «гений» момент

ответ

2

Вы можете добавьте директиву, чтобы ProGuard сохранял методы и поля Acties. Просто добавьте в файл ProGuard:

-keep class com.yourproject.Acties { *; } 

где com.yourproject.Acties полное имя (с пакетом) из Acties класса.

В качестве альтернативы вы можете аннотировать класс Acties с помощью @Keep, что делает ProGuard неизменным при применении обфускации/оптимизации.

+0

Это сработало для меня :) Я использовал @Keep, но я не использовал класс -keep в proguard .. это была моя ошибка. Спасибо –

+0

Должен ли я сделать 'minifyEnabled true' или false – Leenah

+0

' minifyEnabled' должен быть 'true' –

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

  • Нет связанных вопросов^_^