2015-10-10 15 views
6

Running ProGuard w moim Android Studio Projektu dostaję ostrzeżenia tak:Android ProGuard: nie można odnaleźć odniesienia klasa

Warning: com.google.common.collect.Maps: can't find referenced class javax.annotation.Nullable 

mogę rozwiązać ten problem z jednym z wariantów to:

-keep class com.google.common.collect.** { *; } 
-dontwarn com.google.common.collect.** 
-keep class javax.annotation.** { *; } 
-dontwarn javax.annotation.** 

Jaki jest najlepszy sposób rozwiązania powyższego ostrzeżenia? Jaka jest różnica między wariantem 1. a 2.?

+0

Pokaż swój plik 'build.gradle' –

Odpowiedz

6

Jest to najczęstszy błąd związany z tym, że "wiele wstępnie skompilowanych bibliotek innych firm odwołuje się do innych bibliotek, które nie są faktycznie używane, a zatem nie są obecne. Działa to dobrze w kompilacjach debugowania, ale w wersjach wersji ProGuard oczekuje wszystkie biblioteki, aby mógł przeprowadzić prawidłową analizę statyczną. "

Od: http://proguard.sourceforge.net/index.html#manual/examples.html

tak, to javax.annotation.Nullable może nie być tam w projekcie, ale biblioteki używasz ma kilka klas, które są wewnętrznie odnoszące się do nich.

Można jednak uniknąć tych ostrzeżeń przez -dontwarn javax.annotation.** lub --dontwarn com.google.common.collect.**. Ale nie sądzę, -keep class javax.annotation.** { *; } i wygląda na nielogiczne.

Tak więc, jeśli robisz -keep class com.google.common.collect.** { *; }, pomijasz ten pakiet ze wszystkich 3 etapów wykonania Proguard (zmniejszanie, optymalizacja i zaciemnianie), co ma sens zgodnie z moim rozumieniem.

1

Nie zapomnij dodać pakiecie

-keep class com.package_name.** { *; } 
0

użyć libs wsparcia pustych zamiast:

import android.support.annotation.Nullable; 
Powiązane problemy