cocos2dx项目To安卓android平台 移植成功后记录一笔
经过一段时间的琢磨,终于搞定了cocos2dx到安卓平台的移植,现在把我成功的相关文件都贴下来,从一开始的环境看起~
首先是下载android的NDK,然后配置环境:
然后需要配置NDK_MODULE_PATH:
图片上没有显示完全,具体如下:NDK_MODULE_PATH=D:/cocos2d-x-2.1.5;D:/cocos2d-x-2.1.5/cocos2dx/platform/third_party/android/prebuilt
然后系统变量中的path配置里面,我配置了这两个:D:\android-ndk-r9c;D:\cygwin\bin
这是我的android项目结构视图:
我的Android.mk文件的配置如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp LOCAL_SRC_FILES := hellocpp/main.cpp \ ../../Classes/AppDelegate.cpp \ ../../Classes/BackGroundLayer.cpp \ ../../Classes/Box2dController.cpp \ ../../Classes/Box2dView.cpp \ ../../Classes/CarSelectorLayer.cpp \ ../../Classes/GameMenuLayer.cpp \ ../../Classes/GameScene.cpp \ ../../Classes/GLESRender.cpp \ ../../Classes/LoadingLayer.cpp \ ../../Classes/MoreGameOverScene.cpp \ ../../Classes/MoreGameScene.cpp \ ../../Classes/PauseGameDialogLayer.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static include $(BUILD_SHARED_LIBRARY) $(call import-module,cocos2dx) $(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl) $(call import-module,CocosDenshion/android) $(call import-module,extensions) $(call import-module,external/Box2D) $(call import-module,external/chipmunk)
我的AndroidManifest.xml文件配置如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.cocos2dx.hellocpp" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8"/> <uses-feature android:glEsVersion="0x00020000" /> <application android:label="@string/app_name" android:icon="@drawable/icon"> <activity android:name=".HelloCpp" android:label="@string/app_name" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:configChanges="orientation"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <supports-screens android:largeScreens="true" android:smallScreens="true" android:anyDensity="true" android:normalScreens="true"/> <uses-permission android:name="android.permission.INTERNET"/> </manifest>
vs下面的cpp文件视图:
需要注意的是:car.h这个文件我并没有在android.mk文件中配置它,因为他没有cpp文件,不过car.h在我的程序中是个很重要的代码~
网上有人说eclipse下面的一些配置,我就把那些看似关键的地方,实际上没有配置任何东西的地方贴出来:
下面这张图片,注意我画红线的地方,这里我们可以写个echo...我们可以现在cygwin中编译,然后在直接在eclipse里面运行就好了。
需要注意的地方。
如何编译build_native.sh文件,如下,可以用cygwin编译,觉得这样显得更cool一点,也可以直接用eclipse来编译
Cygwin下面正常编译的过程:
上面这些编译到底产生了什么东西呢,下面继续上图说明,我们可以在他编译的时候,看到我们的cocos2dx项目下面的目录(我下图红色标记)正在不断生成它编译的结果、
编译过程有点久。需要耐心等待,我也在耐心等待它编完截图。。。。。wait。。。。。
《既然它没有编完,我就说一个怎么让我们的游戏更好的适应屏幕的一句代码》
-----------------------插播时间------------------------------------------------------------------------------------------
bool AppDelegate::applicationDidFinishLaunching() { // 初始化 CCDirector *pDirector = CCDirector::sharedDirector(); pDirector->setOpenGLView(CCEGLView::sharedOpenGLView()); CCEGLView::sharedOpenGLView()->setDesignResolutionSize(800, 480, kResolutionNoBorder); //就是这句代码!!! pDirector->setDisplayStats(true); pDirector->setAnimationInterval(1.0 / 60); // 创建游戏开始的菜单GameMenu CCScene *pScene = GameMenuLayer::scene(); pDirector->runWithScene(pScene); return true; }
具体的大家可以去网上查查我标记的那句代码。
2.0版本提供了三种适配策略:
kResolutionNoBorder:超出屏幕的部分会被裁剪,两侧没有黑边,铺满屏幕,按图片原始比例显示,图片不变形。
kResolutionShowAll:整个游戏界面是可见的,会按原始比例进行缩放,图片不变形,但两侧可能会留有黑边,不铺满屏幕。
kResolutionExactFit:整个游戏界面是可见的,图片可能会进行拉伸或者压缩处理,铺满屏幕,图片会变形。
再贴一张我认为重要的图片:
-----------------------------------------------------插播结束-------------------------------------------------------------------------------------
继续刚刚的cygwin编译过程,我这里也编译完成了,(前提是你写的c++代码是可以被编译过去的,如果报错了,请注意看你的代码有没有报错哦)上图:
这个时候我们可以看到刚刚出炉的libs/armeabi/libcocos2dcpp.so文件了,这就是我们辛苦这么久的结晶T.T
然后apk吧,装到手机上运行起来,如果出现了无法打开,一定要注意读读logcat里面的内容,很大一部分是项目路径出现问题了,我就遇到过,调整了一下hellocpp.java文件的目录就好了,这个错误让我纠结很久。然后就有可能是你的资源文件读取失败的错误,比如你的资源文件是AAA.png,程序里你读取的文件名称可能是aaa.png。。。。然后就。。。。程序打不开了~~~~~