개발/소프트웨어 개발 정리

[Android] NDK(jni) 에서 Asset에 접근하는 방법

로 얄 2017. 2. 23. 23:32
반응형

NDK를 쓰다보면 Asset에 접근해야 하는 경우가 심심치 않게 발생하는데, 일시적으로 만들어놓고 돌려쓰는 부분이다보니.. 잘 잊어먹게 되는 부분입니다.

간단하게 정리를 해보도록 하겠습니다.


Java

public class MainActivity extends Activity {

   @Override

   public void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);


        readAssetsNative(getAssets());

    }

   public native void readAssetsNative(AssetManager assetManager);


   static {

       System.loadLibrary("testNDK");

    }

}




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

반응형