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. what is delta simulation time

    In digital logic simulation, a delta cycles are evaluation of expressions, followed by value updates ...

  2. VBA控件ListBox的BoundColumn和TextColumn用法,Value和Text的用法

    在使用Excel编写VBA程序时,用到ListBox,然后研究了下它的所有属性.其实这个控件功能很不好用,太老了,最重要的是还不支持鼠标滚轮,很不好操作,但是考虑到兼容性,还是使用它. 其实读取.写入 ...

  3. Spring、struts、webwork2三者MVC的比较

    http://blog.sina.com.cn/s/blog_4a69fa43010005il.html 在web应用方面,Spring有独立的MVC实现,与struts和webwork2相比毫不逊色 ...

  4. 第二篇:gradle脚本运行环境分析(gradle的语义模型)

    引言:通过上一篇的论述,我们知道gradle脚本是如假包换的groovy代码,但是这个groovy代码是运行在他的上下文环境里面的,学名叫语义模型.这一篇我们就来看看他的语义模型到底是什么,如何使用. ...

  5. Entity Framework 使用sql语句分页(查询单表)

    1.查询单表 var pageSize = 2;//条数 var pageIndex = 2;//索引 var sql = @" SELECT D.* FROM ( SELECT ROW_N ...

  6. Oracle 11g gateways(透明网关)配置

    配置要点主要有三点: 1.%GATEWAYS_HOME%(透明网关安装目录)\dg4msql\admin\initdg4msql.ora 内容: HS_FDS_CONNECT_INFO=localho ...

  7. Sublime Text使用手记

    1.Package Control 输入python 命令安装,打开控制台输入下方代码运行即可.控制台打开可使用快捷键Ctrl+~ 或菜单栏中View> Show Console,可访问Pack ...

  8. redis基本数据类型【2】-Hash类型

    一.概述 1.散列是一种典型的字典结构,filed和value的映射,但value只能存储字符串,不支持其他类型 2.一个散列类型最多包含 2^32 -1个字段 3.散列适合存储对象:使用对象和ID构 ...

  9. 暑假集训(2)第九弹 ----- Points on Cycle(hdu1700)

                                                Points on Cycle Time Limit:1000MS     Memory Limit:32768 ...

  10. 【C++11】新特性——Lambda函数

    本篇文章由:http://www.sollyu.com/c11-new-lambda-function/ 文章列表 本文章为系列文章 [C++11]新特性--auto的使用 http://www.so ...