本帖交叉编译使用的代码使用的是Star Fighter项目, http://blog.csdn.net/u013174689/article/details/17997513
VC++编译器中可以通过的代码,交叉编译到安卓的时候,有一些会被报错。可能是两者的C++编译器中有一些方面的要求不同。
把build_native.sh 文件拖动到cygwin软件中回车编译。出现了错误如下
报错1:
Compile++ thumb : game_shared <= main.cpp
In file included from jni/hellocpp/main.cpp:6:
jni/../../Classes/HelloWorldScene.h:32: error: extra qualification 'HelloWorld::' on member 'update'
/cygdrive/e/android-ndk-r7/build/core/build-binary.mk:241: recipe for target 'obj/local/armeabi/objs-debug/game_shared/hellocpp/main.o' failed
make: *** [obj/local/armeabi/objs-debug/game_shared/hellocpp/main.o] Error 1
make: Leaving directory '/cygdrive/e/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/StarFighter01/proj.android'
解决方法:
HelloWorldScene.h第32行,删除多余的'HelloWorld::'
多余的限定在VC++中被认可允许了,这里不允许,需要删除。
再次把build_native.sh 文件拖动到cygwin软件中回车编译。再次报错。
报错2:
In file included from jni/../../Classes/HelloWorldScene.cpp:2:
jni/../../Classes/GameOverLayer.h:2:85: error: e:\cocos2d-2.0-x-2.0.4\cocos2dx\layers_scenes_transitions_nodes\cclayer.h: No such file or directory
jni/../../Classes/HelloWorldScene.cpp: In member function 'virtual void HelloWorld::update(float)':
jni/../../Classes/HelloWorldScene.cpp:274: warning: 'static bool cocos2d::CCRect::CCRectIntersectsRect(const cocos2d::CCRect&, const cocos2d::CCRect&)' is deprecated (declared at E:/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/StarFighter01/proj.android/../../cocos2dx/cocoa/CCGeometry.h:108)
/cygdrive/e/android-ndk-r7/build/core/build-binary.mk:241: recipe for target 'obj/local/armeabi/objs-debug/game_shared/__/__/Classes/HelloWorldScene.o' failed
make: *** [obj/local/armeabi/objs-debug/game_shared/__/__/Classes/HelloWorldScene.o] Error 1
make: Leaving directory '/cygdrive/e/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/StarFighter01/proj.android'
错误解读:GameOverLayer.h:2:85: error: e:\cocos2d-2.0-x-2.0.4\cocos2dx\layers_scenes_transitions_nodes\cclayer.h: No such file or directory
这是因为我之前移动了文件夹cocos2d-2.0-x-2.0.4,导致错误。
解决方法:修改为正确路径e:\cocos2d-2.0-x-2.0.4\cocos2d-2.0-x-2.0.4\cocos2dx\layers_scenes_transitions_nodes\cclayer.h
修改完毕后,再次把build_native.sh 文件拖动到cygwin软件中回车,这次编译成功,看到so文件(libgame.so)了!
如果不了解cocos2d x交叉编译的朋友,这里是传送门http://blog.csdn.net/u013174689/article/details/18700217
设置竖屏
在eclipse里面导入刚刚生成的android项目后需要设置竖屏,因为Android默认是横屏的。
我们在AndroidManifest.xml中右键选择open with Android common XML Editor
找到activity中的android:screenOrientation,
然后将默认的landscape(横屏显示)改为portrait(竖屏显示)。
点击项目名字,右键run as android application,如果模拟器有异常不显示,没有关系。
把生成的apk文件复制到手机,安装后就可以真机玩自己的游戏了。
参考资料:Android横屏竖屏切换的问题 http://blog.sina.com.cn/s/blog_77c632410101790w.html
很多软件在开发过程中为了避免横竖屏切换时引发不必要的麻烦,通常禁止掉横竖屏的切换,
通过在AndroidManifest.xml中设置activity中的android:screenOrientation属性值来实现。
比如下列设置
android:screenOrientation="portrait"
则无论手机如何变动,拥有这个属性的activity都将是竖屏显示。
android:screenOrientation="landscape",为横屏显示。