对于一个只懂得如何用Java去调用C++来实现某一种效果的初学者来说,Android编程中jni目录下的Android.mk这
样的配置文件几乎是完全有理解障碍的。
Android.mk是eclipse告诉它的插件NDK如何去编译C语言编写的源文件,有点像linux下编译C程序的makefile
,其实差不多。第一次见到其实是吓一跳的。不过还好上网能找到点相关的东西。其实Android编程一般是用不到Android.mk,因为Android的SDK已经功能很强大了,不需要C++什么事。但是对于游戏开发而言,为了保证应
用的高效等一些性能,还是经常要使用C++语言去写,或者说游戏开发引就是C++写的。好了,废话有点多,进
入正题吧!(PS:只是些基础,几个月以前接触的,不知道还记得多少,仅仅只是记录,怕忘了)
LOCAL_PATH :=
(callmy−dir)//C++源文件的工作目录,即当前编译目录include
(CLEAR_VARS)
LOCAL_MODULE := opencv_java //引用的动态库的模块名,这里我需要调用opencv(开源图像处理平台)
的动态链接库,
LOCAL_SRC_FILES := libso/libopencv_java.so //库名
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
//下面是编译opencv的环境配置
LOCAL_ARM_NEON := true
OpenCV_INSTALL_MODULES:=on
OPENCV_CAMERA_MODULES:=off
//在c++中调用opencv要想在eclipse中编译通过必须添加opencv的配置文件OpenCV.mk,不然NDK在编译的
//是安卓版(只有在这个版本才有Opencv.mk)的
include $(LOCAL_PATH)/../../sdk/native/jni/OpenCV.mk
//这里就是我的游戏中用到的cocos2d游戏开发引擎需要的原文件目录
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
//指定游戏编译模块
LOCAL_MODULE := cocos2dcpp_shared
//C程序生成的动态链接库,其实在这个游戏中Android部分的代码就是在调用下面用
//C++写的源程序生成的库,自己只是一个包装
LOCAL_MODULE_FILENAME := libcocos2dcpp
//这里就是需要编译C++的源程序文件了。
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp \
../../Classes/GameLoadResource.cpp \
../../Classes/GameDescribeSence.cpp \
../../Classes/GameSence.cpp \
../../Classes/makeMouse.cpp \
../../Classes/makeMouseSence.cpp \
../../Classes/mouse.cpp \
../../Classes/OperationSence.cpp
//这里是cpp文件引用的头文件所在的目录
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../sdk/native/jni/include
# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END
//
LOCAL_LDLIBS += -lm -llog
//以静态的模式加载.a库文件
LOCAL_STATIC_LIBRARIES := cocos2dx_static
LOCAL_SHARED_LIBRARIES := opencv_java
# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
//加载.so库
LOCAL_SHARED_LIBRARIES := opencv_java
$(call import-module,.)//调用库
# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END
这些写完之后,还需要在Application.mk中指定编译C++的编译选项比如:
APP_CPPFLAGS := -frtti -fexceptions -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
我完全不懂它是什么意思,这里就不献丑了。