月度存档: 9月 2012

android下使用ndk开发opengl

本文档目的是记录下从头搭建ndk开发opengl的全过程,以便后来者避免繁琐的准备过程。

以下过程以windows操作系统为例,所需程序默认安排在c盘

1、下载android sdk,安装在 C:\android-sdk-windows

2、下载android ndk,安装在 C:\android-ndk-r8b

3、下载Cygwin,需要1.7或更高版本。因为是在windows下开发,所以需要交叉编译,在其它平台下没有这种麻烦事。安装在C:\cygwin,安装完成后把C:\android-ndk-r8b移到C:\cygwin目录下

安装时,确保 gcc、make、awk三个程序是安装状态,gcc和make默认是不安装的。

另注:ndk r8及更高版本,支持windows下编译。

4、下载eclipse。

安装eclipse下的android sdk插件 adt。

安装eclipse下的c/c++插件cdt。

5、C:\cygwin\workspace(这个目录自己建立)。然后使用eclipse中的import功能,将ndk下的hello-gl2导入工程。

6、在ecliplse中配置ndk自动编译环境

直接参考网上的文章吧:http://blog.csdn.net/gengshenghong/article/details/6981590

以上完成后,编译发布报以下错误:

09-27 07:07:30.154: E/AndroidRuntime(658): FATAL EXCEPTION: GLThread 78
09-27 07:07:30.154: E/AndroidRuntime(658): java.lang.IllegalArgumentException: No configs match configSpec
09-27 07:07:30.154: E/AndroidRuntime(658):     at com.android.gl2jni.GL2JNIView$ConfigChooser.chooseConfig(GL2JNIView.java:168)
09-27 07:07:30.154: E/AndroidRuntime(658):     at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1024)
09-27 07:07:30.154: E/AndroidRuntime(658):     at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1401)
09-27 07:07:30.154: E/AndroidRuntime(658):     at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
09-27 07:07:30.165: D/gralloc_goldfish(658): Emulator without GPU emulation detected.

NDK里的GL2JNIView.java的init函数里(大概102行)

//        setEGLConfigChooser( translucent ?

//                             new ConfigChooser(8, 8, 8, 8, depth, stencil) :

//                             new ConfigChooser(5, 6, 5, 0, depth, stencil) );

setEGLConfigChooser(5, 6, 5, 0, 0, 0); 就可以跑起来了。

但是继续报以下错误:

09-27 07:11:07.694: E/libEGL(707): called unimplemented OpenGL ES API

7、在preference->c/c++->Build->Environment中添加

INCLUDE 指向ndk中的include目录

好像不起作用,最后在项目下新建了一个文件夹,然后引用到include目录来解决掉的。

8、需要把工程转为c/c++工程。

9、自己准备好的一个ndk opengles 1.0基础程序。

AndroidWow

linux下查看每个进程占用的内存

ps -aux|awk ‘{print $4″\t”$11}’|grep -v MEM|sort -r

java.io.IOException: error=12, Cannot allocate memory 解决方案

java调用本地指令报以上错误。

执行:

echo 1 > /proc/sys/vm/overcommit_memory

后,错误消失。

js调用flash需要注意地方

获取flash对象的方法。

在网上查找的很多js获取flash对象的方法,不兼容IE9,这里提供一个能兼容IE9的方法。同时兼容其它浏览器。

function thisMovie(movieName) {
if (navigator.appName.indexOf(“Microsoft”) != -1) {
//alert(“IE”);
if (typeof (window[movieName].qqBuyUpdate) == ‘function’) {
// < IE9
return  window[movieName];
}
else if (typeof (document[movieName].qqBuyUpdate) == ‘function’) {
// >= IE9
return  document[movieName];
}
}
else {
// NON IE
return  document[movieName];
}
}

 

在js里面调用flash:

thisMovie(“client”).qqBuyUpdate();