1、准备工作

1.1、下载安装cygwin

把cygwin 的del(开发)的部分装完,这个过程需要花费2-3个小时,主要是下载时间。

1.2、相关工程版本

OSG:  3.2.1

OSG_Data_Resource: 3.0.0

CMake: 2.8.12.1

cygwin:  make -v 3.8.1(cygwin的make工具,3.8.1版本,尝试使用make 4.0.0编译不了)

NDK:  android-ndk-r9b

ADT:adt-bundle-windows-x86-20131030

1.3、下载3rd库文件

OSG Android依赖文件下载路径3rdpartyAndroid

1.4、下载Android NDK

Android NDK下载路径 Android NDK

1.5、Android编译过程官方链接

OSG for Android编译准备及设置  OSG Android配置编译

2、CMake配置

先定位到build目录下,再执行一下命令

编译GLES1版本,输入如下:

cmake .. -DOSG_BUILD_PLATFORM_ANDROID=ON -DDYNAMIC_OPENTHREADS=OFF

-DDYNAMIC_OPENSCENEGRAPH=OFF -DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF

-DOSG_GL_MATRICES_AVAILABLE=ON -DOSG_GL_VERTEX_FUNCS_AVAILABLE=ON

-DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=ON -DOSG_GL_FIXED_FUNCTION_AVAILABLE=ON

-DOSG_CPP_EXCEPTIONS_AVAILABLE=OFF -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=OFF

-DOSG_GL3_AVAILABLE=OFF -DOSG_GLES1_AVAILABLE=ON -DOSG_GLES2_AVAILABLE=OFF

编译GLES2版本,输入如下:

cmake .. -DOSG_BUILD_PLATFORM_ANDROID=ON -DDYNAMIC_OPENTHREADS=OFF -DDYNAMIC_OPENSCENEGRAPH=OFF -DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF -DOSG_GL_MATRICES_AVAILABLE=OFF -DOSG_GL_VERTEX_FUNCS_AVAILABLE=OFF -DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=OFF -DOSG_GL_FIXED_FUNCTION_AVAILABLE=OFF -DOSG_CPP_EXCEPTIONS_AVAILABLE=OFF -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=OFF -DOSG_GL3_AVAILABLE=OFF -DOSG_GLES1_AVAILABLE=OFF -DOSG_GLES2_AVAILABLE=ON -DJ=4

除了上面的参数外,还需要加上以下参数

-DANDROID_NDK={Path to your NDK root directory}

-DANDROID_ABI="armeabi armeabi-v7a" (此处说明要编译armeabi、armeabi-v7a两个版本) -DANDROID_PLATFORM=8

-DANDROID_DEBUG=1 -DANDROID_OPTIM_NEON=1

-DANDROID_OPTIM_ARM32=1

3、生成Android工程文件

建议:在OpenSceneGraph3.2.1目录下,生成buildes1、buildes2两个路径,分别用于存放GLES1、GLES2两种工程配置。

3.1、Cygwin环境下生成

Cygwin中已经包含cmake命令

直接在osg的build路径中,输入以上cmake内容,即可生成工程文件。

3.2、Windows命令行下生成

在环境变量Path中,添加CMake路径,启动Windows cmd,有CMake提示即可。

在命令行中,输入CMake设置选项

4、编译Android

4.1、Cygwin环境下生成

先设置cygwin的环境变量:cygwin/home/${Computer Name}目录下的.bash_profile、.bashrc

a、.bash_profile设置NDK路径:NDK=/cygdrive/d/Android/android-ndk-r9b export NDK

b、.bashrc  导出ndk-build命令:NDK_HOME=/cygdrive/d/Android/android-ndk-r9b export PATH=$PATH:$NDK_HOME

cd 到OSG的Android_build目录下,执行ndk-build.cmd  NDK_APPLICATION_MK=application.mk,但是编译过程总是不流畅,不建议使用cygwin.

4.2、Windows命令行下生成

在环境变量中配置Android NDK全局值,启动windows cmd,输入ndk-build.cmd,有Android NDK找不到路径的报错,说明配置成功。

cmd 到OSG的Android_build目录下,执行ndk-build.cmd  NDK_APPLICATION_MK=application.mk

生成的.a文件在Android_build-->obj-->local-->armeabi 、armeabi-v7a目录下

5、运行、查看Demo

5.1 eclipse导入工程

使用adt-bundle-windows-x86-20131030 文件夹中的eclipse工程,打开、导入工程examples/osgAndroidExamplesGLES1或2(具体根据cmake中指定的gles版本),编译即可。联手机安装.apk文件,应用程序安装成功,但是只看到Light(ON/OFF)、Center View、Change Navigation,使用过程容易崩溃。

5.2 osgAndroidExamplesGLES1编译配置:

osgAndroidExampleGLES1的jni/Application.mk、Android.mk配置,osgAndroidExampleGLES2配置参照此配置:

5.2.1 Application.mk配置

#ANDROID APPLICATION MAKEFILE

APP_BUILD_SCRIPT := $(call my-dir)/Android.mk

#APP_PROJECT_PATH := $(call my-dir)

APP_OPTIM := release

APP_PLATFORM := android-8

APP_STL := gnustl_static

APP_CPPFLAGS := -fexceptions -frtti

APP_ABI := armeabi armeabi-v7a

APP_MODULES := osgNativeLib

5.2.2 Android.mk配置

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := osgNativeLib

### Main Install dir

OSG_ANDROID_DIR:= E:/Workspace/Coding/OSG/OpenSceneGraph-3.2.1-android/examples/osgAndroidExampleGLES1 #(配置.so生成路径)

LIBDIR := E:/Workspaces/Coding/OSG/OpenSceneGraph-3.2.1-android/buildes1/obj/local/armeabi # (配置osg .lib链接路径)

LIB_STD_DIR := D:/Android/android-ndk-r9b/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi # (配置系统库链接路径)

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)

LOCAL_ARM_NEON := true

LIBDIR := E:/Workspaces/Coding/OSG/OpenSceneGraph-3.2.1-android/buildes1/obj/local/armeabi-v7a #(配置osg .lib链接路径)

LIB_STD_DIR := D:/Android/android-ndk-r9b/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a #(配置系统库链接路径)

endif

### Add all source file names to be included in lib separated by a whitespace

LOCAL_C_INCLUDES:= $(OSG_ANDROID_DIR)/include

LOCAL_CFLAGS := -Werror -fno-short-enums

LOCAL_CPPFLAGS := -DOSG_LIBRARY_STATIC

LOCAL_LDLIBS := -llog -lGLESv1_CM -ldl -lz -lgnustl_static #(配置系统库)

LOCAL_SRC_FILES := osgNativeLib.cpp OsgMainApp.cpp OsgAndroidNotifyHandler.cpp

LOCAL_LDFLAGS := -I $(LOCAL_C_INCLUDES) \ #(添加头文件路径)

-L $(LIBDIR) \ #(添加库文件路径)

-L $(LIB_STD_DIR) \ #(添加系统库文件路径)

-losgdb_dds \

-losgdb_openflight \

......(以下不变)

6、apk运行情况

6.1、三星I9100G + Android 2.3.5 (ADT Android2.3.3)

apk成功安装,app启动后,无法显示菜单栏的按键。而且点击View随机异常退出。

6.2、三星GT-N8000 + Android 4.1.2 (ADT Android 4.1)

apk安装成功,app启动后,点击菜单可以显示按键按钮。输入资源路径,正常加载模型,但是模型贴图加载异常。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐