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:
Włącz bibliotekę Androida Jetpack na poziomie projektu
gradle.properties
). Ten plik zwykle znajduje się w katalogu głównym. swojego projektu:android.useAndroidX=true
Otwórz plik
build.gradle
na poziomie modułu i dodaj ten kodimplementation
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' }
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.
Deklarowanie dodatkowych flag kompilacji dla CMake. Aby to zrobić, dodaj następujący kod do sekcji Blok
defaultConfig
znajdujący się wewnątrz blokuandroid
:externalNativeBuild { cmake { cppFlags '-std=c++14' // c++_shared flavor is the only supported STL type. arguments "-DANDROID_STL=c++_shared" } }
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 .
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:
Na początku pliku dodaj ten wiersz po dowolnym Linie
cmake_minimum_required
iproject
:find_package(games-memory-advice REQUIRED CONFIG)
W poleceniu
target_link_libraries
dodajgames-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.
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
.Dodaj
System.loadLibrary("memory_advice")
doSystem.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.