QLGame 2d Engine win端已经实现了一个动物的动画了,初步的东西已经完成,考虑在Android端也实现这些基本的东西,这样跨平台的引擎也就实现了!

要在Android下编程,首先要实现从Assets文件夹读取资源文件,这就用到了ndk-jni技术!

需要安装 eclpse cdt(开发c++) ndk plugins

下面一步一步来说明下,如何实现读取assets目录下的资源文件!

1.新建一个Android项目,然后右键Android Tools->Add Support,这个时候会弹出一个对话框,会生成一个.so文件,这个就是把我们编写的C++代码打包进去.so中去!

2.编写JNI.java文件,来声明调用这个.so文件

并且实现函数声明

public native  String  ReadFromAssets(AssetManager ass,String filename);

native关键词告诉编译器,这是一个C++的定义方法,需要C++进行具体的代码实现!

还需要载入.so文件,写法如下:

static

{

System.loadLibrary("readassetsdata");

}

3.编译程序(这一步很重要,否则在后一步的生成头文件会失败)

然后CMD窗口到这个工程的bin/classes目录下,输入如下内容:

javah  -classpath  .  -jni  包名.类名即可,然后会在bin/classes文件夹下会生成一个头文件,将其放到jni目录下

生成的头文件如下:

JNIEXPORT jstring JNICALL Java_com_example_readassetsdata_JNI_ReadFromAssets(JNIEnv *, jobject, jobject, jstring);

4.打开自动生成的cpp文件,然后包含刚才的.h头文件,实现这个方法!

#include <jni.h>

#include <android\log.h>

#include <android\asset_manager.h>

#include <android\asset_manager_jni.h>

#include <stdlib.h>

#include "com_example_readassetsdata_JNI.h"

JNICALL jstring Java_com_example_readassetsdata_JNI_ReadFromAssets(JNIEnv *env, jobject obj, jobject obj1, jstring string1) {

AAssetManager* mgr = AAssetManager_fromJava(env, obj1);

if (mgr == NULL) {

return env->NewStringUTF("");

}

/*获取文件名并打开*/

jboolean iscopy;

const char *mfile = env->GetStringUTFChars(string1, &iscopy);

AAsset* asset = AAssetManager_open(mgr, mfile, AASSET_MODE_UNKNOWN);

env->ReleaseStringUTFChars(string1, mfile);

if (asset == NULL) {

return env->NewStringUTF("");

}

/*获取文件大小*/

off_t bufferSize = AAsset_getLength(asset);

char *buffer = (char *) malloc(bufferSize + 1);

buffer[bufferSize] = 0;

int numBytesRead = AAsset_read(asset, buffer, bufferSize);

jstring resultstring;

resultstring=env->NewStringUTF(buffer);

free(buffer);

/*关闭文件*/

AAsset_close(asset);

return resultstring;

}

5.然后就可以ndk-build生成.so文件,在java中进行获取就行!

view=(TextView) findViewById(R.id.textView1);

view.setText(new JNI().ReadFromAssets(getAssets(), "qlgame2dtest.txt"));

就可以通过这样,C++就可以访问Assets目录下的文件了!

QLGame 2d Engine Android端环境搭建(通过jni读取assets目录的文件)的更多相关文章

  1. QLGame 2D Engine编写环境搭建

    QLGame 2D Engine编写 (win7环境搭建) 广州麒麟网络工作室,计划制作一款2d game engine,基于opengl(es)平台,暂时支持android,以后考虑支持linux, ...

  2. Ionic2 cordova angular2 打包到Android apk环境搭建

    一.前言 前段时间,公司有个APP项目需要支持不同平台,于是采用了Ionic2 + cordova + angular2,在搭建环境过程中遇到了不少问题,刚好最近有时间整理出来. 二.开发环境搭建 参 ...

  3. Android测试环境搭建

    Android测试环境搭建 一.操作系统 使用Win7_64位操作系统.(可以用其他的系统,下面都是针对Win7 64位进行操作) 二.安装JDK 运行jdk-6u45-windows-x64.exe ...

  4. Qt for Android开发环境搭建及测试过程记录

    最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...

  5. Android开发环境搭建全程演示(jdk+eclipse+android sdk)

    全程演示android开发环境的搭建过程,无需配置环境变量.所有软件都是写该文章时最新版本 一 相关下载 (1) java JDK下载: 进入该网页: http://java.sun.com/java ...

  6. Java、Android 开发环境搭建

    一.准备工作 为便于管理,将java开发工具集中到一个文件夹中.创建D:\javaDevE文件夹,JDK.Android-SDK.Eclipse.tomcat等都可以安装到这个文件夹中. 二.搭建Ja ...

  7. Android开发环境搭建相关文章列表(转载)

    Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1.0是2008年发布的,截止到目前为止Android已经更新Android5.0.1, ...

  8. Android开发环境搭建及常见问题解决方法

    转自: http://www.cnblogs.com/rwxwsblog/p/4769785.html 在移动互联网的时代,Android的份额早已超过了苹果.Android的出现无疑加速了移动互联网 ...

  9. Android测试环境搭建(win7)

    一.安装JDK并配置环境变量 1.在Java官方网站上下载相应系统的jdk文件安装,如win7 64 位系统下安装jdk-6u45-windows-x64,全部选择默认的安装路径即可安装完成. 2.配 ...

随机推荐

  1. ffmpeg之yuv2rgb_c_24_rgb

    YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, ) LOADCHROMA(); PUTRGB24(dst_1, py_1, ); PUTRGB24(dst_2, py_2 ...

  2. javascript-02

    1.js的特点2.js的数据类型3.js运算符 4.js的全局变量   |-定义在函数体外部的变量   |-定义在函数体内部没有使用var声明 var和没有var声明变量的区别?     |-var ...

  3. Asp.net自制模板框架

    最近在做个包含了大量重复样式的控件的网站. 如果用MVC的话,我可以针对每个需要单独块编辑的Model写一个局部视图. 然后根据不同逻辑需求拼起来.用现成MVC框架非常容易做到. 但环境是3.5的最高 ...

  4. 深入理解C#中this/partial/null的使用

    一.this关键字作用 1.this表示当前运行中的对象 Eg: public class Person { public int age; public string name; public Pe ...

  5. 转:四种方案解决ScrollView嵌套ListView问题

    转载自:http://blog.sina.com.cn/s/blog_46798aa80101lxbk.html 原始的连接已经不知道是哪里了,项目中遇到了同样的问题,花了一下午都没有想到是嵌套引起的 ...

  6. Oracle start with.connect by prior子句实现递归查询

    Oracle中的select语句可以用start with...connect by prior子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: select ... fr ...

  7. oracle从各个表取得数据保存到另一个表

    从各个表中取得数据保存另一个表中: CREATE VIEW PARAMETER_view ASWITH tall AS ( SELECT p.PI_NO,--产品序列号 p.SERIALNO,--产品 ...

  8. RAC分解步骤之一,在oracle linux 4u4上安装oracle 10.2.0.1.0操作日志

    练习oracle的rac组建过程,第一步,先练习4u4上安装oracle 10.2.0.1.0.直接安装rac,有些难度.从简单的做起.总RAC步骤,参照小布老师的RAC组建. 1. 启动vc,登陆v ...

  9. iOS谋职之OC面试题

    iOS谋职之OC面试题 iOS求职之OC面试题 IOS求职之OC面试题 1.Objective-C的类可以多重继承么?可以采用多个协议么? 答:不可以多重继承,可以采用多个协议. 2.#import和 ...

  10. js hashMap

    /** * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, ...