The Memory Advice API beta is now deprecated, and no longer recommended for use.
Memory Advice API のスタートガイド
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
このガイドでは、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
を dependencies ブロックに追加します。これにより、アプリで Memory Advice API の依存関係が宣言されます。
dependencies {
implementation 'androidx.games:games-memory-advice:1.0.0-beta01'
}
NDK バージョンを android
ブロックに指定します。
ndkVersion "23.1.7779620"
必ず Memory Advice API に対応している NDK バージョンを指定してください。対応している NDK バージョンの一覧については、Android Games の Jetpack リリースのページをご覧ください。
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.
Memory Advice API のヘッダー ファイルとランタイム ライブラリをプロジェクトに追加するため、プロジェクトのメイン CMakeLists.txt
ファイルを開きます。このファイルは、[Project] ペインの [app] > [src] > [main] > [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
#...
)
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>
ライブラリを初期化する
アプリの起動時に 1 回、ライブラリを初期化する必要があります。そのために、次のコードをプロジェクトに追加します。
MemoryAdvice_init(env, activity);
env
パラメータと activity
パラメータは、ネイティブ ライブラリで使用できるようにする必要がある JNIEnv*
変数と jobject
変数です。ネイティブ ライブラリに対するすべての JNI 呼び出しには、これらの変数が含まれている必要があります。GameActivity ライブラリを使用している場合は、MemoryAdvice_init
関数を呼び出す前に、必ず JavaVM に呼び出し元のスレッドをアタッチしてください。
メモリ状態についてポーリングする
任意の間隔でライブラリをポーリングすることにより、アプリのメモリ状態を取得できます。ライブラリをポーリングする必要がある場合は、常に MemoryAdvice_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 を登録することもできます。これにより、メモリ状態が上限に近づいた、またはひっ迫した際に、ウォッチャー関数が呼び出される(OK 状態では呼び出されない)ようにできます。たとえば、次のコードはウォッチャーを作成して 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);
次のステップ
Memory Advice API の概要で、参考情報および問題とフィードバックについてご確認ください。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-08-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-08-26 UTC。"],[],[],null,["| **Note:** The Memory Advice API Beta is now over and the library is deprecated. [learn more about alternative memory management approaches](/games/optimize/memory-allocation).\n\nThis guide describes how to integrate the\n[Jetpack release](/jetpack/androidx/releases/games) of the\n[Memory Advice API](/games/sdk/memory-advice/overview) in your\napp using Android Studio.\n\nGames should use the Memory Advice API release that is\nrecommended for their build environment. For Android Studio, we recommend the\nJetpack release. For information about releases for other build environments,\nsuch as the [Android Game Development Extension](/games/agde)\n(AGDE), see [Distributions](/games/sdk/memory-advice/overview#distributions).\n\nAdd the library\n\nThis section describes how to add the library to your Android Studio (Android\nGradle Plugin) project.\n\nAdd the dependencies\n\nTo add the library to your Android Studio project, complete the following steps:\n\n1. Enable Android Jetpack library in the project level\n [`gradle.properties`](/studio/build#properties-files)), the file normally is located in root directory\n of your project:\n\n android.useAndroidX=true\n\n2. Open the module level `build.gradle` file and add the following\n `implementation` to the dependencies block. This declares [the memory advice API\n dependencies](/jetpack/androidx/releases/games) in your app.\n\n dependencies {\n implementation 'androidx.games:games-memory-advice:1.0.0-beta01'\n }\n\n3. Specify the NDK version inside the `android` block:\n\n ndkVersion \"23.1.7779620\"\n\n Make sure to choose a version of the NDK compatible with Memory Advice API.\n A list of supported NDK versions is available on the [Android Games Jetpack Release page](/jetpack/androidx/releases/games).\n4. Declare additional build flags for CMake. To do so, add the following code to the\n `defaultConfig` block that is inside the `android` block:\n\n externalNativeBuild {\n cmake {\n cppFlags '-std=c++14'\n // c++_shared flavor is the only supported STL type.\n arguments \"-DANDROID_STL=c++_shared\"\n }\n }\n\n5. Enable the [Prefab](/studio/build/dependencies#native-dependencies-aars) feature.\n For Android Gradle Plugin(AGP) 4.1 or higher, add the following code to the\n `android` block:\n\n buildFeatures {\n prefab true\n }\n\n If you are using AGP 4.0 or older, see the\n [Prefab page](/studio/build/dependencies#native-dependencies-aars)\n for configuration instructions.\n6. Save the file. If you see the following message, click the **Sync Now**\n button to update your project:\n\n Gradle files have changed since last project sync. A project sync may be\n necessary for the IDE to work properly.\n\nConfigure CMake for C/C++ build\n\nTo add the header files and runtime library for Memory Advice API\ninto your project, open your project's main `CMakeLists.txt` file. In the\n**Project** pane, the file is in **app \\\u003e src \\\u003e main \\\u003e cpp**. After opening the\nfile, perform the following steps:\n\n1. Near the top of the file, add the following line after any\n `cmake_minimum_required` and `project` lines:\n\n find_package(games-memory-advice REQUIRED CONFIG)\n\n2. In the `target_link_libraries` command, add\n `games-memory-advice::memory_advice`. This makes the Memory Advice API\n a dependency to your project's native library and includes it in your final application package.\n The update should look similar to the following:\n\n target_link_libraries(\n your-native-lib\n\n #link memory advice to the project\n games-memory-advice::memory_advice\n\n #rest of the dependencies\n #...\n )\n\nConfigure the Java files\n\nThe native library included with the Memory Advice API is\n`libmemory_advice.so`. It is a compiling dependency for your app's own\nC/C++ shared library, and is automatically loaded when your app loads its own\nshared library with the `System.loadlibrary()` function.\n\nThis step is optional.\n\n1. Find the java code in your project that loads the native libraries. If it\n doesn't exist, add it. The code\n should look similar to `System.loadLibrary(\"your-native-lib\")`, and is\n located in a `static` block.\n\n2. Add `System.loadLibrary(\"memory_advice\")` under\n `System.loadLibrary(\"your-native-lib\")`. The update should look similar to\n the following:\n\n static {\n System.loadLibrary(\"your-native-lib\");\n // Note: loading libmemory_advice.so is optional.\n System.loadLibrary(\"memory_advice\");\n }\n\nUse the library\n\nThis section describes how to use the library.\n\nAdd the header files\n\nInclude the following library header file in your project: \n\n #include \u003cmemory_advice/memory_advice.h\u003e\n\nInitialize the library\n\nYou need to initialize the library once when the app starts. To do so, add this\ncode to your project: \n\n MemoryAdvice_init(env, activity);\n\nThe `env` and `activity` parameters are the `JNIEnv*` and `jobject` variables\nthat should be available to your native library. Every JNI call to your native\nlibrary should contain these variables. If you are using the\n[GameActivity library](/games/agdk/game-activity),\nmake sure to\n[attach the calling thread to the JavaVM](/training/articles/perf-jni#threads)\nbefore calling the `MemoryAdvice_init` function.\n\nPoll for memory state\n\nYou can retrieve the memory state of your app by polling the library at the\ninterval of your choosing. Use the\n[MemoryAdvice_getMemoryState](/reference/games/memory-advice/group/memory-advice#memoryadvice_getmemorystate)\nfunction whenever you need to poll the library: \n\n MemoryAdvice_MemoryState state = MemoryAdvice_getMemoryState();\n switch (state) {\n case MEMORYADVICE_STATE_OK:\n // The application can safely allocate significant memory.\n break;\n case MEMORYADVICE_STATE_APPROACHING_LIMIT:\n //The application should minimize memory allocation.\n break;\n case MEMORYADVICE_STATE_CRITICAL:\n // The application should free memory as soon as possible,\n // until the memory state changes.\n break;\n }\n\nSet up a watcher\n\nYou can also set up\n[a watcher](/reference/games/memory-advice/group/memory-advice#memoryadvice_registerwatcher)\nand register the Memory Advice API, and your watcher function will get called\nwhen the state is either approaching the limit or the critical\n[memory state](/reference/games/memory-advice/group/memory-advice#memoryadvice_memorystate)\n(but not for the ok state). For example, the following code creates a watcher\nand requests a Memory Advice API notification every 2 seconds: \n\n static int USER_DATA;\n constexpr int callback_waittime_ms = 2000;\n\n void callback(MemoryAdvice_MemoryState state, void* context) {\n switch (state) {\n case MEMORYADVICE_STATE_APPROACHING_LIMIT:\n //The application should minimize memory allocation.\n break;\n case MEMORYADVICE_STATE_CRITICAL:\n // The application should free memory as soon as possible,\n // until the memory state changes.\n break;\n }\n }\n\n MemoryAdvice_registerWatcher(callback_waittime_ms, callback, &USER_DATA);\n\nWhat's next\n\nSee the [overview](/games/sdk/memory-advice/overview) for\n[additional resources](/games/sdk/memory-advice/overview#additional_resources)\nand [reporting issues](/games/sdk/memory-advice/overview#issues_and_feedback)."]]