Android上的OpenGLES程序--开发环境介绍
来源:互联网 发布:怎么抢购淘宝一元拍 编辑:程序博客网 时间:2024/05/24 06:51
几年前搞过一个Android项目, 对Android开发有个简单了解, OpenGLES 是嵌入式三维图形规范, 如果不在Android上做点东西,感觉有点遗憾。 从现在开始, 尝试写一套OpenGLES 的 Android 开发教程.
一: Android 开发环境和流程介绍:
1: Android 项目类型:
要开发一个Android应用, 从语言角度讲, 有三种类型: 一个是Java项目, 一个是java + c/c++混合项目(java 通过jni方式调用 c/c++ 的 so), 还有一个是c/c++项目(jni native-activity).
2: 编译工具:
需要 jdk , ubuntu环境下 1.8 版本以上手动下载安装, 1.8以下用命令行即可安装。
需要 android-sdk, 可以设置环境变量为 $ANDROID_SDK。
需要 android-ndk。 因为我要写 jni 项目, 所以需要NDK来生成 so, 可以设置环境变量为 $ANDROID_NDK。
需要 sudo apt-get install android-tools-adb, 即Android Debug Bridge, 它将apk 部署到手机上。
需要 sudo apt-get install ant 相当于 make, 编译成apk
3: 链接手机:
开发Android系统, 得有个真机啊, 模拟器太慢, 在Unbuntu下, 识别手机可通过下面这个方法设置
http://blog.csdn.net/zangle260/article/details/50579929
4: apk 生成的流程:
怎么由源码编译成apk, 部署到手机上的, 编译流程如下:
1: $ANDROID_SDK/tools/android update project --path , 这个步骤得到 build.xml, 我认为相当于执行cmake, 生成makefile的过程。
2: 如果是jni类型的项目, $ANDROID_NDK/ndk-build, 这个步骤把c/c++编译成 .so。
3: ant debug , 生成apk, 我认为相当于make的过程。
4: adb install bin/xxx.apk, 部署到手机上。
这是命令行下编译生成apk的过程, 我觉得开发工具背后也是用的这一系列步骤。
5: 开发工具:
使用开发工具可以一键编译部署到手机上, 集成工具有以下几个:
(1): adt-bundle-linux(15年以前的, 比较容易上手)
(2): android-studio(貌似是在adt-bundle 之后出来的)
(3): Eclipse + sdk + ndk + cdt (这个配置起来太繁琐)
二: java + jni 的一个实例
目录结构:
src: 存放项目java源代码
jni: 存放c/c++ 源代码, .mk
gen: app资源索引目录
assets: app数据目录
bin: 可执行文件目录, apk
libs: 第三方库目录 .jar, .so
res: app资源目录
AndroidMainfest.xml : 项目配置文件
我用的是这个 android-ndk-r9d/samples/hello-gl2 例子, 算上一个HelloWorld 吧
三: 遇到的问题:
当在eclipse中导入 jni的项目时, 不认c/c++头文件和语法, 我猜这应该是默认按不带jni的项目处理的。 这个问题可以这样解决:
四: 如何写jni程序
1: 创建java类
package com.android.gl2jni;// Wrapper for native librarypublic class GL2JNILib { static { System.loadLibrary("gl2jni"); } /** * @param width the current view width * @param height the current view height */ public static native void init(int width, int height); public static native void step(); public static native void create();}
2: 生成 .h 文件, 找到编译后的 .class 文件, 在其目录下或者包名目录下, 执行 javah , 生成.h文件, (注意 javah 后接完整类名, 注意用. 不能用/)
命令格式:
javah -jni-classpath/path/to/sdk/platforms/android-version/android.jar:bin/classes/-d jni/ com.xxx.xxx.classname
3: 实现 .h 中的定义函数
#include <jni.h>#include <android/log.h>#define LOG_TAG "libgl2jni"#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_create(JNIEnv * env, jclass obj){ LOGI("function: %s\n", "create");}
这个函数在 create 函数中输出一个log, 好了运行, 成功了。
但有三个小问题:
(1): 如何查看log, 有两种方法:
第一在eclipse中看,具体这样设置 : http://jingyan.baidu.com/article/7908e85c6b4a52af481ad2ee.html
第二在命令行中使用 adb logcat
(2): logcat 信息那么多, 如何过滤?
第一: 在eclipse中过滤 :http://blog.csdn.net/qq_23934247/article/details/52594545
第二: 在命令行中 使用 grep , adb logcat | grep function
(3): 为什么不直接用 printf, printf是c标准库中的一个函数, 经过系统调用,printf的输出设备可以是显示设备或者是个图形窗口, 对android activity来说, 就相当于我们建立一个窗口程序, 而不是终端控制台程序, 而这个图形窗口做为绘制图形界面来使用了, 不能当做printf的标准输出。
- Android上的OpenGLES程序--开发环境介绍
- Android上的OpenCV程序--开发环境介绍
- Android+NDK+OpenGLES开发环境配置
- opengles开发环境搭建
- 基于Android opengles的魔方开发总结
- win32环境的opengles使用
- 配置OpenGLES环境的问题
- android OpenGLES开发第一课 绘制简单的Polygon
- android利用OpenGLES开发动态壁纸用到的GLWallpaperService类
- 基于Android opengles的魔方开发总结(一)
- 基于Android opengles的魔方开发总结(二)
- 基于Android opengles的魔方开发总结(三)
- 基于Android opengles的魔方开发总结(四)
- 首先介绍android开发环境的搭建
- 搭建 Windows 上的 Android 开发环境
- Mac上Android开发环境的搭建
- Mac上android开发环境的搭建
- OpenGLES WM6 SDK 开发环境设置
- 7/3日总结
- 暑期项目开发实训 Day9
- 生成随机数
- 暑期项目开发实训 Day9
- [bzoj1324]Exca王者之剑
- Android上的OpenGLES程序--开发环境介绍
- VS2008使用技巧汇总
- 干货 | 自更新CC 2015.3以上版本,都默认自动安装C盘,真的无法转移其他的盘吗?
- [Matlab]Invalid mex-file 找不到指定的模块
- Java 领域从传统行业向互联网转型你必须知道的事儿 我为什么要写这篇文章 武林中,"天下武功出少林"指各门各派的武功都与少林武学有一定的渊源,技术也是相同的道理,对于Java领域的应用而言,传统
- epoll服务器
- Spring 任务调度
- 20170704
- [Eclipse手册]设置pom.xml打开方式