OSG Android版本编译

来源:互联网 发布:千帆网络信息传媒 编辑:程序博客网 时间:2024/05/14 23:54

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 MAKEFILEAPP_BUILD_SCRIPT := $(call my-dir)/Android.mk#APP_PROJECT_PATH := $(call my-dir)APP_OPTIM := releaseAPP_PLATFORM := android-8APP_STL := gnustl_staticAPP_CPPFLAGS := -fexceptions -frttiAPP_ABI := armeabi armeabi-v7aAPP_MODULES     := osgNativeLib

5.2.2 Android.mk配置

 

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := osgNativeLib### Main Install dirOSG_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 := trueLIBDIR := 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 whitespaceLOCAL_C_INCLUDES:= $(OSG_ANDROID_DIR)/includeLOCAL_CFLAGS    := -Werror -fno-short-enumsLOCAL_CPPFLAGS  := -DOSG_LIBRARY_STATIC LOCAL_LDLIBS    := -llog -lGLESv1_CM -ldl -lz -lgnustl_static    #(配置系统库)LOCAL_SRC_FILES := osgNativeLib.cpp OsgMainApp.cpp OsgAndroidNotifyHandler.cppLOCAL_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启动后,点击菜单可以显示按键按钮。输入资源路径,正常加载模型,但是模型贴图加载异常。