可以帮忙写个android通过jni调用c或c++读取assets下的文件吗?
跪求

解决方案 »

  1.   

    跟JNI调用C读取模式一样   
    只是有点点区别
    你查一下AssetManager  这个就知道了
      

  2.   

    我不知道怎么写呀,求高手给个demo,谢谢了
      

  3.   

    /******************************************************************************* 
    * Function Name  : java_com_fontlose_ReadAssets_readFromAssetsLibzip 
    * Description    : 定义:public native void  readFromAssetsLibzip(String apkpath,String filename); 
    * Input          : apkpath路径 filename 资源名 
    * Output         : None 
    * Return         : None 
    *******************************************************************************/   
    void  Java_com_fontlose_ReadAssets_readFromAssetsLibzip(JNIEnv* env,jclass tis,jstring assetpath,jstring filename)  
    {  
       LOGI("ReadAssets");   
      int i=0;  
       jboolean iscopy;  
       const char *mpath = (*env)->GetStringUTFChars(env, assetpath, &iscopy);  
       struct zip* apkArchive=zip_open(mpath, 0, NULL);;  
       (*env)->ReleaseStringUTFChars(env, filename, mpath);  
      
       struct zip_stat fstat;  
       zip_stat_init(&fstat);  
      
       int numFiles = zip_get_num_files(apkArchive);  
       LOGI("File numFiles %i \n",numFiles);  
       for (i=0; i<numFiles; i++) {  
         const char* name = zip_get_name(apkArchive, i, 0);  
          
         if (name == NULL) {  
          LOGE("Error reading zip file name at index %i : %s", zip_strerror(apkArchive));  
          return;  
        }  
         
        zip_stat(apkArchive,name,0,&fstat);  
        LOGI("File %i:%s Size1: %d Size2: %d", i,fstat.name,fstat.size ,fstat.comp_size)  ;  
       }  
      
       const char *fname = (*env)->GetStringUTFChars(env, filename, &iscopy);  
       struct zip_file* file = zip_fopen(apkArchive, fname, 0);  
       
       if (!file) {  
         LOGE("Error opening %s from APK", fname);  
         return;  
        }  
      
       zip_stat(apkArchive,fname,0,&fstat);  
       (*env)->ReleaseStringUTFChars(env, filename, fname);  
       char *buffer=(char *)malloc(fstat.size+1);  
       buffer[fstat.size]=0;  
       int numBytesRead =  zip_fread(file, buffer,fstat.size);;  
       LOGI(": %s\n",buffer);  
       free(buffer);  
       zip_fclose(file);  
       zip_close(apkArchive);  
    }  网上别人写的,可以参考原文:http://blog.csdn.net/fontlose/article/details/6686161