我无法使用NDK从C中的Assert文件夹访问.txt文件。 有没有人有一个想法如何从我的C文件访问该文件。
public class HelloJni extends AppCompatActivity {
static {
System.loadLibrary("hello-jni");
}
private AssetManager mgr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello_jni);
mgr = getResources().getAssets();
stringFromJNI(mgr);
}
public native String stringFromJNI(AssetManager mgr);
}
在Hello-jni.c文件中,我需要访问.txt
JNIEXPORT jstring JNICALL
Java_com_inspiringlife_fido_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz, jobject assetManager )
{
//access .txt file from assert folder
return (*env)->NewStringUTF(env, "Hello JNI ");
}
答案 0 :(得分:0)
AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
assert(NULL != mgr);
AAsset* testAsset = AAssetManager_open(mgr, "hello.txt", AASSET_MODE_UNKNOWN);
if (testAsset)
{
assert(testAsset);
size_t assetLength = AAsset_getLength(testAsset);
__android_log_print(ANDROID_LOG_DEBUG, "!!!!Native Audio", "Asset file size: %d\n", assetLength);
char* buffer = (char*) malloc(assetLength + 1);
AAsset_read(testAsset, buffer, assetLength);
buffer[assetLength] = 0;
__android_log_print(ANDROID_LOG_INFO, "!!!!!Test Asset Manager", "The value is %s", buffer);
AAsset_close(testAsset);
free(buffer);
}
else
{
__android_log_print(ANDROID_LOG_ERROR, "!!!!!Test Asset Manager", "Cannot open file");
}
//rsa_gen_keys(pub, priv);
return (*env)->NewStringUTF(env, "!!!Hello from JNI");
现在我可以从assert文件中读取文件了。