Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2150682
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: Android平台

2012-11-12 15:51:32

在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

[参]
阅读(12896) | 评论(3) | 转发(1) |
给主人留下些什么吧!~~

嗯呵呵2015-05-23 22:21:03

马克..

wangcong023452014-01-03 18:24:16

think_jumper:你确定你的代码能在Android的APK的assets资源文件夹里面写入文件?

亲,不是apk,是生成apk的源代码

回复 | 举报

think_jumper2014-01-03 10:04:32

你确定你的代码能在Android的APK的assets资源文件夹里面写入文件?