Jni를 사용할때 Java를 거치지 않고 Asset파일에 접근 할 수 있다.

먼저 Java에서 Context.getAssets();을 사용하여 AssetManager를 보내준다.

	private static native void nativeCreated(AssetManager asset);

jni.c

#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
AAssetManager	*mgr;

void Java_pe_berabue_ex_GLView_nativeCreated(JNIEnv * env, jclass cls, jobject assetManager)
{
	char *buf;
	int fileSize;

	mgr = AAssetManager_fromJava(GetEnv(), assetManager);

	AAsset* asset = AAssetManager_open(mgr, "tmp.txt", AASSET_MODE_UNKNOWN);	// Asset 폴더안에 tmp.txt가 존재하면

	if ( asset == NULL )
		return;
	
	fileSize = AAsset_getLength(asset);
	
	if ( fileSize == 0 )
		return;
	
	buf = (char *)malloc(sizeof(char)*fileSize);
	AAsset_read(asset, buf, fileSize);
	
	AAsset_close(asset);
}

최소한의 소스만 적어보자면 위와 같다.

헤더파일을 포함시키고 Java에서 받아온 assetManager를 사용하면 된다.


android:minSdkVersion 9 이상 사용가능




+ Recent posts