把cygwin 的del(开发)的部分装完,这个过程需要花费2-3个小时,主要是下载时间。
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
OSG Android依赖文件下载路径3rdpartyAndroid
Android NDK下载路径 Android NDK
OSG for Android编译准备及设置 OSG Android配置编译
先定位到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_DEBUG=1
建议:在OpenSceneGraph3.2.1目录下,生成buildes1、buildes2两个路径,分别用于存放GLES1、GLES2两种工程配置。
3.1、Cygwin环境下生成
Cygwin中已经包含cmake命令
直接在osg的build路径中,输入以上cmake内容,即可生成工程文件。
在环境变量Path中,添加CMake路径,启动Windows cmd,有CMake提示即可。
在命令行中,输入CMake设置选项
先设置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.
在环境变量中配置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目录下
osgAndroidExampleGLES1的jni/Application.mk、Android.mk配置,osgAndroidExampleGLES2配置参照此配置:
#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
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 \ ......(以下不变)
apk成功安装,app启动后,无法显示菜单栏的按键。而且点击View随机异常退出。
apk安装成功,app启动后,点击菜单可以显示按键按钮。输入资源路径,正常加载模型,但是模型贴图加载异常。