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. javascript进击(七)Ajax

    AJAX AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJA ...

  2. js中的"=="与"==="的区别

    "==": 1,如果两表达式的类型不同,则试图将它们转换为字符串.数字或 Boolean 量. 2,NaN 与包括其本身在内的任何值都不相等. 3,负零等于正零. 4,null 与 ...

  3. 45种Javascript技巧大全【转藏】

    JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是 ...

  4. Unity3D 之UGUI 面板

    UGUI中使用面板,可以对一组控件分为一个组. 一个面板里面可以添加一些控件,就如同Html中的<div>一样.

  5. 2014年的Google I/O app设计中的材料设计-渣渣的翻译

    又是一篇翻译,用了三个多小时.http://android-developers.blogspot.co.id/2014/08/material-design-in-2014-google-io-ap ...

  6. 那天有个小孩跟我说LINQ(七)转载

    1  LINQ TO XML(代码下载)        准备:新建项目 linq_Ch7控制台程序,新建一个XML文件夹,我们就轻松地学习一下吧          XDocument         ...

  7. vmstat,iostat,sar命令详解

    Procs r: 等待运行的进程数 b: 处在非中断睡眠状态的进程数 w: 被交换出去的可运行的进程数.此数由 linux 计算得出,但 linux 并不耗尽交换空间 Memory swpd: 虚拟内 ...

  8. sublimeText3中 less2css error: `lessc` is not available的解决办法

    昨天在sublimeText3中安装了less 以及 less2css插件,但是在编译保存的时候总是出现错误: less2css error: `lessc` is not available 就go ...

  9. cordova 创建ios项目

    cordova create fmscmsios1023 com.weilian.fmscms fmscms cd fmscms cd fmscmsios1023/ cordova platforms ...

  10. TreeListView的用法

    public void ProductBind() { tlvProduct.Items.Clear(); List<ProductInfo> list = ppbll.GetProduc ...