android开发--- jni读取assert资源文件

1850阅读 0评论2015-05-23 嗯呵呵
分类:LINUX

在ndk的demo程序hello-jni修改
1. 在assets目录中添加文件log.txt,里面随便写点什么,hello,world好了
2. 在 HelloJni.java中
     public void onCreate(Bundle savedInstanceState)
  1.     {
  2.        nativeReadFromAssets(getAssets(),"log.txt"); //onCreate中添加调用
  3.     }
  4.     public native void nativeReadFromAssets(AssetManager ass,String filename); //声明
3.  在hello-jni.c中,添加实现
  1. /*******************************************************************************
  2. * Function Name : java_com_fontlose_ReadAssets_readFromAssets
  3. * Description : 定义:public native void readFromAssets(AssetManager ass,String filename);
  4. * Input : AssetManager 对象 filename资源名
  5. * Output : None
  6. * Return : None
  7. *******************************************************************************/
  8. void Java_com_example_hellojni_HelloJni_nativeReadFromAssets(JNIEnv* env,jclass tis,jobject assetManager,jstring filename)
  9. {
  10.    LOGI("ReadAssets");
  11.    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
  12.    if(mgr==NULL)
  13.    {
  14.       LOGI(" %s","AAssetManager==NULL");
  15.       return ;
  16.    }

  17.     /*获取文件名并打开*/
  18.    jboolean iscopy;
  19.    const char *mfile = (*env)->GetStringUTFChars(env, filename, &iscopy);
  20.    AAsset* asset = AAssetManager_open(mgr, mfile,AASSET_MODE_UNKNOWN);
  21.    (*env)->ReleaseStringUTFChars(env, filename, mfile);
  22.    if(asset==NULL)
  23.    {
  24.       LOGI(" %s","asset==NULL");
  25.       return ;
  26.    }
  27.    /*获取文件大小*/
  28.    off_t bufferSize = AAsset_getLength(asset);
  29.    LOGI("file size : %d\n",bufferSize);
  30.    char *buffer=(char *)malloc(bufferSize+1);
  31.    buffer[bufferSize]=0;
  32.    int numBytesRead = AAsset_read(asset, buffer, bufferSize);
  33.    LOGI(": %s",buffer);
  34.    free(buffer);
  35.     /*关闭文件*/
  36.    AAsset_close(asset);
  37. }
4. 当然这样是编不过的,还需要加上头文件
  1. #include <jni.h>
  2. #include <android/asset_manager.h>
  3. #include <android/asset_manager_jni.h>
  4. #include <android/log.h>

  5. #define TAG "HELLO"
  6. #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__)
  7. #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , TAG, __VA_ARGS__)
  8. #define LOGI(...) __android_log_print(ANDROID_LOG_INFO , TAG, __VA_ARGS__)
  9. #define LOGW(...) __android_log_print(ANDROID_LOG_WARN , TAG, __VA_ARGS__)
  10. #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , TAG, __VA_ARGS__)
5.同时在Android.mk中,加上
  1. LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
  2. LOCAL_LDLIBS += -landroid

[参]
上一篇:没有了
下一篇:没有了