[Android] NDK(jni) 에서 Asset에 접근하는 방법
NDK를 쓰다보면 Asset에 접근해야 하는 경우가 심심치 않게 발생하는데, 일시적으로 만들어놓고 돌려쓰는 부분이다보니.. 잘 잊어먹게 되는 부분입니다.
간단하게 정리를 해보도록 하겠습니다.
Java
public class MainActivity extends Activity {
readAssetsNative(getAssets()); }
} } |
NDK
#include <jni.h>
#include <assert.h>
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
void
Java_com_test_test_MainActivity_testAsset(JNIEnv *env, jobject thiz, jobject assetManager)
{
AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
AAsset* testAsset = AAssetManager_open(mgr, "text.txt", AASSET_MODE_UNKNOWN);
AAsset_close(testAsset);
}
간단히 코드를 작성해보면 위와 같이 진행됩니다.
AssetManager_fromJava함수는 android/asset_manager.h에 포함되어있으며, AssetManager_open, Asset_close등은 android/asset_manager.h에 포함되어있습니다.
API Level 9 부터 사용이 가능합니다.
참고가 될지 모르겠지만 reference는 다음 링크에서 참고하시면 될 것 같습니다.
https://developer.android.com/ndk/reference/asset__manager_8h.html