Stosuj sprawdzone metody

Podczas pracy z regułami zachowywania danych ważne jest, aby osiągnąć odpowiedni poziom szczegółowości, który zapewni Ci korzyści przy jednoczesnym zachowaniu działania aplikacji. W sekcjach poniżej znajdziesz informacje o dobrych wzorcach i rzeczach, których należy unikać w przypadku reguł przechowywania.

Dobre wzorce w regułach przechowywania

Dobrze zdefiniowane reguły przechowywania są jak najbardziej szczegółowe:

  • W specyfikacji klasy zawsze podawaj konkretną klasę, klasę bazową lub klasę z adnotacjami, jeśli to możliwe, jak pokazano w tych przykładach:

    -keepclassmembers class com.example.MyClass {
      void someSpecificMethod();
    }
    
    -keepclassmembers ** extends com.example.MyBaseClass {
      void someSpecificMethod();
    }
    
    -keepclassmembers @com.example.MyAnnotation class ** {
      void someSpecificMethod();
    }
    
  • W miarę możliwości należy zadeklarować specyfikację elementu i odwoływać się tylko do tych części klasy, które muszą być zachowane, aby aplikacja działała. Nie zalecamy stosowania reguły do całej klasy przez zdefiniowanie opcjonalnego zakresu elementu jako { *; }, chyba że jest to bezwzględnie konieczne.

    -keepclassmembers com.example.MyClass {
      void someSpecificMethod();
      void @com.example.MyAnnotation *;
    }
    

Jeśli nie możesz przestrzegać tych wytycznych, możesz tymczasowo odizolować kod, który ma zostać zachowany, w dedykowanym pakiecie i zastosować do niego regułę zachowywania. Nie jest to jednak rozwiązanie długoterminowe. Więcej informacji znajdziesz w artykule Stopniowe wprowadzanie optymalizacji. Aby użyć reguły przechowywania pakietu, zdefiniuj ją tak jak w tym przykładzie:

-keepclassmembers class com.example.pkg.** { *; }

Czego warto unikać

Składnia reguły zachowywania ma wiele opcji, ale w przypadku mierzalnych korzyści związanych ze zrównoważonym rozwojem nie zalecamy używania tych elementów:

  • Unikaj używania operatora odwrócenia ! w regułach zachowywania, ponieważ możesz nieumyślnie zastosować regułę do niemal każdej klasy w aplikacji.
  • Nie używaj reguł przechowywania obejmujących cały pakiet, takich jak -keep class com.example.pkg.** { *; }, przez dłuższy czas. Można ich tymczasowo używać do rozwiązywania problemów podczas konfigurowania R8. Więcej informacji znajdziesz w artykule Ograniczanie zakresu optymalizacji. Ogólnie rzecz biorąc, zachowaj ostrożność w przypadku symboli wieloznacznych – upewnij się, że zachowujesz tylko potrzebny kod.

Jeśli nie możesz przestrzegać tych reguł, prawdopodobnie używasz wielu otwartych odbić i powinieneś ich unikać lub unikać biblioteki, która ich używa (patrz studium przypadku Gson).