android 使用NDK api调用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

}

原文地址:https://www.cnblogs.com/YZFHKMS-X/p/12629503.html

时间: 2024-11-10 14:10:33

android 使用NDK api调用AssetManager的相关文章

Android微信SDK API 调用教程

最近一直在调用微信的API,却发现一直调用不成功,纠结了好久,各方面找教程,找官方,官方里的文档也只是写得很模糊,说是按三步走. 1.申请App_ID 2.填写包名3. 获取程序签名的md5值, 这三步只要你走对了就能调通,可是大家都不知道有时候我们Eclipse调用的keystore和我们打包的keystore获取到的程序签名的md5是不一样的.而且是每一个keystore对应生成的apk的值都会不一样.我们在申请的时候填的程序签名值是正式打包的,但我们在eclipse部署上去的却是用的我们默

Android ndk下用AssetManager读取assets的资源

转自:http://www.cppblog.com/johndragon/archive/2012/12/28/196754.html 在使用 cocos2dx 在 Android 上进行游戏开发时,遇到了奇怪的事情,无论什么代码,都无法读资源文件.不得以只好寻求更高版本的Api. 在Android ndk api level 9 之后,提供了一套称为 AssetManager 的api. 这个api 的工作原理是 - Java通过JNI把getAssets得到的AssetManager传递给一

Android:利用Java反射调用@hide的API

置使用3G数据功能: 从源代码看到隐藏的API(ConnectivityManager.java): 查看文本打印? /** * Sets the persisted value for enabling/disabling Mobile data. * * @param enabled Whether the mobile data connection should be *            used or not. * @hide */ public void setMobileDa

Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用

一.Android平台编程方式:      1.基于Android SDK进行开发的第三方应用都必须使用Java语言(Android的SDK基于Java实现)      2.自从ndk r5发布以后,已经允许完全用C/C++ 来开发应用或者游戏,而不再需要编写任何Java 的代码   Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序. 二.跨平台移动开发   Delphi使用android的NDK是通过JNI接口,封装好了,不用自己

【转】 Android的NDK开发(1)————Android JNI简介与调用流程

原文网址:http://blog.csdn.net/conowen/article/details/7521340 ******************************************************************************************** * author:[email protected]大钟                                                                      

反射调用android系统级API函数

try { Class<?> mClass = Class.forName("com.android.server.wifi.WifiSettingsStore"); Constructor con=mClass.getDeclaredConstructor(Context.class); if(!con.isAccessible()){ con.setAccessible(true); } Object store = con.newInstance(this); Met

[转载]android常用的API接口调用

原文地址:android常用的API接口调用作者:宋耀 显示网页:         Uri uri = Uri.parse("http://www.google.com"); Intent it = new Intent(Intent.ACTION_VIEW,uri); startActivity(it);显示地图: Uri uri = Uri.parse("geo:38.899533,-77.036476"); //Uri uri = Uri.parse(&quo

Android之NDK开发

一篇文章: Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言.但这并不等同于“第三方应用只能使用Java”.在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可

android studio NDK配置

向您的项目添加 C 和 C++ 代码 本文内容 下载 NDK 和构建工具 创建支持 C/C++ 的新项目 构建和运行示例应用 向现有项目添加 C/C++ 代码 创建新的原生源文件 创建 CMake 构建脚本 将 Gradle 关联到您的原生库 搭配使用 Android Studio 2.2 或更高版本与 Android Plugin for Gradle 版本 2.2.0 或更高版本时,您可以将 C 和 C++ 代码编译到 Gradle 与 APK 一起打包的原生库中,将这类代码添加到您的应用中