Pierwsze kroki z interfejsem Memory Advice API

W tym przewodniku opisujemy, jak zintegrować Premiera Jetpacka Memory Advice API w za pomocą Android Studio.

Gry powinny używać interfejsu Memory Advice API, który jest zalecane dla środowiska kompilacji. W przypadku Androida Studio zalecamy Zwolnienie jetpacka. Aby uzyskać informacje o wersjach innych środowisk kompilacji, np. rozszerzenie Android Game Development. (AGDE), patrz Dystrybucja.

Dodaj bibliotekę

W tej sekcji dowiesz się, jak dodać bibliotekę do Androida Studio (na Androida projektu wtyczki Gradle).

Dodaj zależności

Aby dodać bibliotekę do projektu Android Studio, wykonaj te czynności:

  1. Włącz bibliotekę Androida Jetpack na poziomie projektu gradle.properties). Ten plik zwykle znajduje się w katalogu głównym. swojego projektu:

      android.useAndroidX=true
    
  2. Otwórz plik build.gradle na poziomie modułu i dodaj ten kod implementation do bloku zależności. Deklaruje interfejs API Porady dotyczące pamięci zależności w aplikacji.

     dependencies {
         implementation 'androidx.games:games-memory-advice:1.0.0-beta01'
     }
    
  3. Określ wersję NDK w bloku android:

     ndkVersion "23.1.7779620"
    

    Wybierz wersję NDK zgodną z interfejsem Memory Advice API. Lista obsługiwanych wersji NDK jest dostępna na stronie wersji Jetpack w grach na Androida.

  4. Deklarowanie dodatkowych flag kompilacji dla CMake. Aby to zrobić, dodaj następujący kod do sekcji Blok defaultConfig znajdujący się wewnątrz bloku android:

     externalNativeBuild {
         cmake {
             cppFlags '-std=c++14'
             // c++_shared flavor is the only supported STL type.
             arguments "-DANDROID_STL=c++_shared"
         }
     }
    
  5. Włącz funkcję Prefab. W przypadku wtyczki Android do obsługi Gradle(AGP) w wersji 4.1 lub nowszej dodaj poniższy kod do sekcji Blokada android:

     buildFeatures {
        prefab true
     }
    

    Jeśli używasz AGP 4.0 lub starszej wersji, zapoznaj się z Strona Prefab .

  6. Zapisz plik. Jeśli zobaczysz ten komunikat, kliknij Sync Now (Synchronizuj teraz). , aby zaktualizować projekt:

      Gradle files have changed since last project sync. A project sync may be
      necessary for the IDE to work properly.
    

Skonfiguruj CMake na potrzeby kompilacji C/C++

Aby dodać pliki nagłówka i bibliotekę środowiska wykonawczego dla interfejsu Memory Advice API otwórz projekt i otwórz jego główny plik CMakeLists.txt. W Panel Projekt, plik znajduje się w lokalizacji aplikacja > src > główny > CPP. Po otwarciu , wykonaj te czynności:

  1. Na początku pliku dodaj ten wiersz po dowolnym Linie cmake_minimum_required i project:

     find_package(games-memory-advice REQUIRED CONFIG)
    
  2. W poleceniu target_link_libraries dodaj games-memory-advice::memory_advice Dzięki temu interfejs Memory Advice API do biblioteki natywnej projektu i uwzględnia ją w ostatecznym pakiecie aplikacji. Aktualizacja powinna wyglądać mniej więcej tak:

     target_link_libraries(
         your-native-lib
    
         #link memory advice to the project
         games-memory-advice::memory_advice
    
         #rest of the dependencies
         #...
     )
    

Konfigurowanie plików Java

Biblioteka natywna dołączana do interfejsu Memory Advice API to libmemory_advice.so Jest to zależność kompilacji dla własnej aplikacji Biblioteka udostępniona w języku C/C++, która jest automatycznie ładowana, gdy aplikacja wczytuje własną udostępnione biblioteki za pomocą funkcji System.loadlibrary().

Ten krok jest opcjonalny.

  1. Znajdź w swoim projekcie kod Java, który wczytuje biblioteki natywne. Jeśli nie istnieje, dodaj go. Kod powinien wyglądać podobnie do System.loadLibrary("your-native-lib") i jest w okolicy: static.

  2. Dodaj System.loadLibrary("memory_advice") do System.loadLibrary("your-native-lib") Aktualizacja powinna wyglądać podobnie do następujące:

     static {
         System.loadLibrary("your-native-lib");
         // Note: loading libmemory_advice.so is optional.
         System.loadLibrary("memory_advice");
     }
    

Korzystanie z biblioteki

W tej sekcji opisano, jak korzystać z biblioteki.

Dodaj pliki nagłówka

Uwzględnij w projekcie ten plik nagłówkowy biblioteki:

    #include <memory_advice/memory_advice.h>

Zainicjuj bibliotekę

Tę bibliotekę musisz zainicjować raz podczas uruchamiania aplikacji. Aby to zrobić, dodaj ten element do swojego projektu:

    MemoryAdvice_init(env, activity);

Parametry env i activity to zmienne JNIEnv* i jobject. które powinny być dostępne w bibliotece natywnej. Każde połączenie JNI do Twojej firmy powinna zawierać te zmienne. Jeśli używasz tagu bibliotekę GameActivity, upewnij się, że dołącz wątek wywołujący do maszyny wirtualnej Java przed wywołaniem funkcji MemoryAdvice_init.

Ankieta dotycząca stanu pamięci

Możesz pobrać stan pamięci aplikacji, odpytując bibliotekę w w wybranym przedziale czasu. Użyj MemoryAdvice_getMemoryState , gdy chcesz przeprowadzić sondowanie biblioteki:

    MemoryAdvice_MemoryState state = MemoryAdvice_getMemoryState();
    switch (state) {
      case MEMORYADVICE_STATE_OK:
        // The application can safely allocate significant memory.
        break;
      case MEMORYADVICE_STATE_APPROACHING_LIMIT:
        //The application should minimize memory allocation.
        break;
      case MEMORYADVICE_STATE_CRITICAL:
        // The application should free memory as soon as possible,
        // until the memory state changes.
        break;
    }

Konfigurowanie zegarka

Możesz też skonfigurować widz i zarejestrujesz interfejs Memory Advice API, a funkcja obserwatora zostanie wywołana gdy stan zbliża się do granicy lub stan pamięci (ale nie w przypadku stanu OK). Na przykład ten kod tworzy obserwatora i wysyła żądanie powiadomienia do interfejsu Memory Advice API co 2 sekundy:

    static int USER_DATA;
    constexpr int callback_waittime_ms = 2000;

    void callback(MemoryAdvice_MemoryState state, void* context) {
        switch (state) {
          case MEMORYADVICE_STATE_APPROACHING_LIMIT:
            //The application should minimize memory allocation.
            break;
          case MEMORYADVICE_STATE_CRITICAL:
            // The application should free memory as soon as possible,
            // until the memory state changes.
            break;
        }
    }

    MemoryAdvice_registerWatcher(callback_waittime_ms, callback, &USER_DATA);

Co dalej

Zobacz omówienie usługi dodatkowe materiały i problemach z raportowaniem.