android use NDK api call AssetManager

{

 

工具类代码

    public native static  String getAssetStringUseJNI(Context context,String path);

    1

NDK代码


#include <jni.h>
#include <assert.h>
#include <string.h>
#include <malloc.h>
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
#include <android/log.h>
#include  "com_netease_study_task_AssetUtil.h"

/*
 * Class:     com_netease_study_task_AssetUtil
 * Method:    getAssetStringUseJNI
 * Signature: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_netease_study_task_AssetUtil_getAssetStringUseJNI
  (JNIEnv  *env , jclass assetUtilClass, jobject context, jstring filename){

    jclass  class=(*env)->GetObjectClass(env,context);
    jmethodID getAssets=(*env)->GetMethodID(env,class,"getAssets","()Landroid/content/res/AssetManager;");

    //创建一个AssetManager对象
    AAssetManager   *mgr = AAssetManager_fromJava(env, (*env)->CallObjectMethod(env,context,getAssets));

    //获取文件名并打开
    jboolean iscopy;
    const char *filePath = (*env)->GetStringUTFChars(env, filename, &iscopy);
    AAsset* asset = AAssetManager_open(mgr, filePath, AASSET_MODE_UNKNOWN);


    long size = AAsset_getLength(asset);//获取文件长度
    char* buffer = (char*) malloc (sizeof(char)*size+1);
    buffer[size]='\0';
    AAsset_read(asset,buffer,size);
   jstring  result=(*env)->NewStringUTF(env,buffer);

    free(buffer);
    AAsset_close(asset);
    return result;

};
————————————————
版权声明:本文为CSDN博主「SKY_L1」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34203494/article/details/54285914

 

}

posted @   YZFHKMS-X  阅读(198)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示