本指南說明如何使用 Android Studio,在應用程式中整合 Memory Advice API 的 Jetpack 版本。
遊戲使用的 Memory Advice API 版本必須是建構環境的建議版本。如果使用 Android Studio,建議採用 Jetpack 版本。如要瞭解其他建構環境適用的 Android Game Development Extension (AGDE) 等版本,請參閱「發布情況」一節。
新增程式庫
本節說明如何將程式庫新增至 Android Studio (Android Gradle 外掛程式) 專案。
新增依附元件
如要將程式庫新增到 Android Studio 專案,請完成下列步驟:
在專案層級
gradle.properties
中啟用 Android Jetpack 程式庫,這個檔案通常位於專案的根目錄:android.useAndroidX=true
開啟模組層級
build.gradle
檔案,並將下列implementation
加入依附元件區塊。這種做法會在應用程式中宣告 Memory Advice API 依附元件。dependencies { implementation 'androidx.games:games-memory-advice:1.0.0-beta01' }
在
android
區塊中指定 NDK 版本:ndkVersion "23.1.7779620"
請務必選擇與 Memory Advice API 相容的 NDK 版本。Android 遊戲 Jetpack 版本頁面提供支援的 NDK 版本清單。
宣告 CMake 的其他建構旗標。如果要宣告,請將下列程式碼新增至
android
區塊中的defaultConfig
區塊:externalNativeBuild { cmake { cppFlags '-std=c++14' // c++_shared flavor is the only supported STL type. arguments "-DANDROID_STL=c++_shared" } }
啟用 Prefab 功能。 如果是 Android Gradle 外掛程式 (AGP) 4.1 以上版本,請將下列程式碼加入
android
區塊:buildFeatures { prefab true }
如果您使用的是 AGP 4.0 或更早版本,請參閱 Prefab 頁面 取得設定說明。
儲存檔案。如果您看到下列訊息,請按一下「Sync Now」(立即同步處理) 按鈕,以更新專案:
Gradle files have changed since last project sync. A project sync may be necessary for the IDE to work properly.
設定 C/C++ 版本的 CMake
如要在專案中新增 Memory Advice API 的標頭檔案和執行階段程式庫,請開啟專案的主要 CMakeLists.txt
檔案。在
「Project」窗格,檔案位於 app >src >主要 >cpp。開啟檔案後,按照以下步驟操作:
在檔案頂端附近的任意
cmake_minimum_required
和project
行後方,新增下列程式碼:find_package(games-memory-advice REQUIRED CONFIG)
在
target_link_libraries
指令中新增games-memory-advice::memory_advice
。如此一來,Memory Advice API 就會成為專案原生程式庫的依附元件,並納入最終的應用程式套件中。更新內容應如下所示:target_link_libraries( your-native-lib #link memory advice to the project games-memory-advice::memory_advice #rest of the dependencies #... )
設定 Java 檔案
Memory Advice API 包含的原生程式庫為 libmemory_advice.so
。這是應用程式本身 C/C++ 共用程式庫的編譯依附元件,會在應用程式透過 System.loadlibrary()
函式載入該程式庫時自動載入。
此為選擇性步驟。
在專案中尋找載入原生程式庫的 Java 程式碼。如果找不到,請新增程式碼。程式碼應該與
System.loadLibrary("your-native-lib")
類似,且位於static
區塊中。在
System.loadLibrary("your-native-lib")
下方新增System.loadLibrary("memory_advice")
。更新內容應如下所示:static { System.loadLibrary("your-native-lib"); // Note: loading libmemory_advice.so is optional. System.loadLibrary("memory_advice"); }
使用程式庫
本節說明如何使用程式庫。
新增標頭檔案
在專案中納入下列程式庫標頭檔案:
#include <memory_advice/memory_advice.h>
初始化程式庫
應用程式啟動時,您必須初始化程式庫一次。如果要初始化,請在專案中新增下列程式碼:
MemoryAdvice_init(env, activity);
env
和 activity
參數是應提供給原生程式庫的 JNIEnv*
和 jobject
變數。每次傳送至原生資料庫的 JNI 呼叫都應包含這些變數。如果使用 GameActivity 程式庫,請務必將呼叫執行緒附加至 JavaVM,再呼叫 MemoryAdvice_init
函式。
記憶體狀態輪詢
以您選擇的時間間隔輪詢程式庫,即可擷取應用程式的記憶體狀態。每當您需要輪詢程式庫時,請使用 MemoryAdtip_getMemoryState 函式:
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;
}
設定看守工具
您也可以設定 看守者 並註冊 Memory Advice API,系統就會呼叫觀察工具函式 狀態可能達到上限或 記憶體狀態 (但如果是正常狀態的話)。舉例來說,以下程式碼會建立看守工具並每 2 秒要求 Memory Advice API 通知:
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);