分享

android开发

 天海544 2014-01-10

在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:///a/bianchengyuyan/_NET/20110815/102380.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多