织梦CMS - 轻松建站从此开始!

罗索实验室

当前位置: 主页 > 嵌入式开发 > Android >

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

落鹤生 发布于 2013-10-17 09:15 点击:次 
在ndk的demo程序hello-jni修改 在assets目录中添加文件log.txt,里面随便写点什么,hello,world好了
TAG:

在ndk的demo程序hello-jni修改
1. 在assets目录中添加文件log.txt,里面随便写点什么,hello,world好了
2. 在 HelloJni.java中

  1. public void onCreate(Bundle savedInstanceState) 
  2.   nativeReadFromAssets(getAssets(),"log.txt"); //onCreate中添加调用 
  3. 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
  9. (JNIEnv* env,jclass tis,jobject assetManager,jstring filename) 
  10.     { 
  11.        LOGI("ReadAssets"); 
  12.        AAssetManager* mgr = AAssetManager_fromJava(env, assetManager); 
  13.        if(mgr==NULL) 
  14.        { 
  15.           LOGI(" %s","AAssetManager==NULL"); 
  16.           return ; 
  17.        } 
  18.         /*获取文件名并打开*/ 
  19.        jboolean iscopy; 
  20.        const char *mfile = (*env)->GetStringUTFChars(env, filename, &iscopy); 
  21.        AAsset* asset = AAssetManager_open(mgr, mfile,AASSET_MODE_UNKNOWN); 
  22.        (*env)->ReleaseStringUTFChars(env, filename, mfile); 
  23.        if(asset==NULL) 
  24.        { 
  25.           LOGI(" %s","asset==NULL"); 
  26.           return ; 
  27.        } 
  28.        /*获取文件大小*/ 
  29.        off_t bufferSize = AAsset_getLength(asset); 
  30.        LOGI("file size : %d\n",bufferSize); 
  31.        char *buffer=(char *)malloc(bufferSize+1); 
  32.        buffer[bufferSize]=0; 
  33.        int numBytesRead = AAsset_read(asset, buffer, bufferSize); 
  34.        LOGI(": %s",buffer); 
  35.        free(buffer); 
  36.         /*关闭文件*/ 
  37.        AAsset_close(asset); 

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 


[参]http://rritw.com/a/bianchengyuyan/_NET/20110815/102380.html

(wangcong02345)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www1.rosoo.net/a/201310/16770.html]
本文出处:ChinaUnix 作者:wangcong02345
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容