打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
android开发

在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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
在Android C/C++层添加LOG调试(LOGI\LOGD\LOGE...)输出支持
android串口通信实例分析
JNI调用机制
Android skia简单应用
高通camera架构 (二)
android 串口通讯1
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服