‘壹’ cocos2dx最新版用命令行打包apk为何会出现各种错误,如何解决
具体做法。
1、安装必要的库和工具包,以及配置相关环境变量,请按照cocos2d-x-3.0rc0toolstoluaREADME.mdown说得去做,不做赘述。
2、写c++类(我测试用的是cocos2d-x-3.0rc0testslua-empty-.cpp)
3、写一个生成的python脚本,你不会写,没关系,我们会照猫画虎
1)进入目录cocos2d-x-3.0rc0toolstolua,复制一份genbindings.py,命名为genbindings_myclass.py
2)把生成目录制定到咱工程里去,打开genbindings_myclass.py把
?
1
output_dir = '%s/cocos/scripting/lua-bindings/auto' % project_root
改成
?
1
output_dir = '%s/tests/lua-empty-test/project/Classes/auto' % project_root
3)修改命令参数,把
?
cmd_args = { 'cocos2dx.ini' : ( 'cocos2d-x' , 'lua_cocos2dx_auto' ),
'cocos2dx_extension.ini' : ( 'cocos2dx_extension' , 'lua_cocos2dx_extension_auto' ),
'cocos2dx_ui.ini' : ( 'cocos2dx_ui' , 'lua_cocos2dx_ui_auto' ),
'cocos2dx_studio.ini' : ( 'cocos2dx_studio' , 'lua_cocos2dx_studio_auto' ),
'cocos2dx_spine.ini' : ( 'cocos2dx_spine' , 'lua_cocos2dx_spine_auto' ),
'cocos2dx_physics.ini' : ( 'cocos2dx_physics' , 'lua_coco
‘贰’ cocos2dx 3.16怎么编译
先给自己科普一下, android sdk 是给java开发者用的, 咱C++开发者用的是android ndk, 所以就是使用ndk来编译cocos2dx程序了
使用命令行创建一个项目, 我这里创建的是一个lua项目:cocos new lua_proj2 -p com.company_name.program_name -l lua -d d:\xxx\xxx
此时创建了一个DEMO程序, 此时就可以使用cocos命令生成一个apk包, 进入到目录lua_proj2\frameworks\runtime-src下面, 在此目录下面执行命令cocos compile -p android 就会生成一个apk包, 把这个拖到genymotion上面, 就安装跑起来了.
上面说的是不使用eclipse的方式来生成一个apk包, 下面记录一下在eclipse中加载lua_proj2这个项目, 并生成apk包的过程. 为什么一定要将cocos2dx项目导入到eclipse中来生成apk包呢, 因为在eclipse中可以连接AVD来调试android程序, 再者, eclipse可以运行在linux环境下面, 后面我打算在linux进行开发, 所以这一步是一定要跨出去的
打开eclipse, 加载lua_proj2项目, 在此注意一下, 不需要加载libcocos2dx这个项目, 只要加载lua_proj2这个自己新建一项目即可
在eclipse中右击lua_proj2 -> Properties. 出现Properties for lua_proj2框框
创建一个新的builder
第一个红框是builder名称, 随便填写, 第二个红框框是NDK生成工具, 即, 使用此工具来编译C++项目, 第三个红框框是工作目录, 此处我使用lua_proj2项目目录作为工作目录, 切换到Environment选项卡, 新建一个在此生成器中使用的环境变量NDK_MODULE_PATH, 值是......\lua_proj2\frameworks\cocos2d-x\cocos;......\lua_proj2\frameworks\cocos2d-x;......\lua_proj2\frameworks\cocos2d-x\external, 前面的.......是绝对目录的省略, 这里要输入绝对路径名称, 在此我就不写绝对路径了.
一路OK下去, 到下面这个画面
这个就新建立的builder, Project->Build Project
出现大量的error: 'override' does not name a type错误, 这是由于NDK的版本太低了, override是C++11中才有的关键字, 而到NDKr10才支持C++11, 所以要升级NDK. 到官网去下载吧
不大, 400多M的样子, 更新完成之后, 看一下ndk\toolchains目录下面的编译器, 我的目录是下面这样子的
我很想使用clang来编译, 但是现阶段我还不会配置, 就用GCC吧, x86-4.6 & x86-4.8两个版本的GCC, 4.8的支持C++11
在Application.mk中添加一句NDK_TOOLCHAIN_VERSION = 4.8 就是指定使用GCC4.8来编译cocos2dx项目, 跑起来了, 下面是eclipse跑起来的console输出
跟命令行下执行cocos compile -p android 跑出来的是一样的, 都是在编译程序. 下面进入到在eclipse下面调试程序
‘叁’ 如何在eclipse下调试cocos2dx
cocos2dx程序移植到eclipse
必要组件:
1.macos gcc编译器,若没有,在xcode->preference->downloads中下载command line tools(在命令行下输入g++,若显示command not found 则没有)
2. android sdk :本机目录为 /Users/zhangyao/IDE/android-sdk-macosx
3.cocos2d-x:本机目录为 /Users/zhangyao/Desktop/cocos2d-x-2.1.1
4.ndk 本机目录为 /Users/zhangyao/Desktop/android-ndk-re8
地址:http://developer.android.com/tools/sdk/ndk/index.html
选择macos 64bit
5.cdt 若没有 则在help->install new software中下载
Programming Languages->C/C++ Development Tools.
1.配置环境变量
终端中 输入 sudo vi ~/.bash_profile
输入i进入编辑环境 输入以下内容:
export COCOS2DX_ROOT=~/Desktop/cocos2d-x-2.1.1/
export NDK_ROOT=~/Desktop/android-ndk-r8e/
export ANDROID_SDK_ROOT=~/IDE/android-sdk-macosx/
export PATH=$PATH:$ANDROID_SDK_ROOT/tools
按下esc键退出编辑
输入:wq保存退出
2.在eclipse中创建项目(设项目名称为test)
cd Desktop/cocos2d-x-2.1.1
./create-android-project.sh
输入工程标志符com.cwa.test
选择android版本号:6
输入工程名:test
cd test/proj.android/
./build_native.sh
打开eclipse,选择file->new->other->Android->Android Project from Existing code->next->Browse->选择目录至cocos2d-x-2.1.4/test/project.android->finish
选择file->new->other->c/c++->convert to a c/c++ Project->next->选择上面建好的工程->finish
至此工程test创建完成
3.配置工程属性
右键工程名->properties
3.1 c/c++ Build 把use default build command的勾去掉,在build command中写(其中test为工程名):
bash ${workspace_loc:/test}/build_native.sh NDK_DEBUG=1 V=1
3.2 点开c/c++ Build 选择Environment->add
name:NDK_ROOT
value:/Users/zhangyao/Desktop/android-ndk-r8e
3.3 c/c++ General->Path and Symbols->add
/Users/zhangyao/Desktop/android-ndk-r8e/sources/cxx-stl/system/include
全部修改完,点OK
在GUN C++中加入
/Users/zhangyao/Desktop/cocos2d-x-2.1.1/cocos2dx/include
/Users/zhangyao/Desktop/android-ndk-r8e/platforms/android-14/arch-arm/usr/include
在Android中 最好选择最新的Android4.2.2(确保Andorid模拟机中已经下载好了4.2.2的API)
4.打开项目的AndroidMainfest.xml
把android:icon="@drawable/icon">一行改为android:icon="@drawable/ic_launcher">
android:minSdkVersion="8"
把8改成14
android:minSdkVersion="14"
关闭AndroidMainfest.xml save changes选yes
在src/org.cocos2dx.lib/Cocos2dxActivity.java中
在// ...add to FrameLayout
framelayout.addView(this.mGLSurfaceView);
这句后面加上一句(如果没有):
this.mGLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);
打开工程jni目录下的Android.mk
MY_CPP_PATH := $(LOCAL_PATH)/ \
$(LOCAL_PATH)/../../Classes/
MY_FILES_SUFFIX := %.cpp
My_All_Files := $(foreach src_path,$(MY_CPP_PATH),$(shell find $(src_path)/.))
My_All_Files := $(My_All_Files:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)
MY_CPP_LIST := $(filter $(MY_FILES_SUFFIX),$(My_All_Files))
MY_CPP_LIST := $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES := $(MY_CPP_LIST)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_C_INCLUDES += $(shell ls -FR $(LOCAL_C_INCLUDES) | grep $(LOCAL_PATH)/$)
LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES:$(LOCAL_PATH)/%:=$(LOCAL_PATH)/%)
把cocos2d-x引擎的根目录的cocos2dx/platform/android/java/src文件夹下org文件夹 复制到项目的src包(test/proj.android/src)下替换org文件夹
5.把xcode中所有的自建的类文件(包括.h和.cpp)复制到cocos2d-x-2.1.1/test/Classes
所有的资源文件复制到cocos2d-x-2.1.1/test/Resources
工程的图标文件放在cocos2d-x-2.1.1/test/res下的文件夹中
至此工程配置完毕。
在对工程作出修改,比如加入/替换新的资源文件,class后,最好对工程clean一下,如果clean后还出现问题,可以重新执行一下build_native命令。
Test 的 模拟器配置
最后,执行以下步骤可以把xcode和eclipse相关联,让在xcode中做的更改,eclipse可以自动做出更改。
1.打开Xcode中的test项目(项目名和eclipse中的相同)
选择classes分组,点删除,选择Move to Trash
2.在工程中添加新group,还命名为classes,右键classes->addFIles
然后把cocos2dx/test/classes中的类都添加回来,这样eclipse和xcode就公用了这些文件,在一个中做出更改,另一个里就会自动更改,如下图:
另:1. Android联网
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.android中的R文件 ,是伴随着加入资源等自动更新的
Android 在开发中会自动生成一个 R.java 文件 ,这个文件是自动生成的,最好不要去改。不过有时候这个 java 文件会跟我们捉迷藏,在程序中 R.xx.xxx 会出现经常报错现象。
1 对着工程点击鼠标右键 选择 Build Project,R.java 文件又回来。这样R.xx.xxx 就能 X 的出来了。
如果不行 试用第二种 方法
2 选择eclipse/myeclipse 的 clean 这样R文件也会出现
如果还不行 试用第三种
3 经过上面两种方法都不行 使用绝招 从别的工程中拷贝一份R文件过来 然后string.xml里随便改动一下 即可更新R文件
如果还不行 试用第四种
4 经过上面的3种方法都不行 说明我们的工程有问题 好好检查吧
比如resoure资源中的文件 命名,例result_main.xml,如果写成Result_main.xml是错误的 需要全部小写
‘肆’ cocos2dx3.10 怎么运行cocos2dx库
一、通用准备工作
1、安装Cocos2d-x 3.1
在Cocos2d官网上下载 Cocos2d-x 3.2+引擎 ,下载后解压缩。
2、安装Eclipse与Android SDK
这个在Mac上或是PC上开发都是可以通用的。
Eclipse 在其官网下载( 官网地址 )。
Android SDK 在Android开发者中心下载( 地址 )。
Eclipse是开发Android需要用到的IDE。这是个很牛的IDE,有许多插件让他变得三头六臂。要开发Android的程序,需要下载相关的插件,但如果每个插件要自己配置,会是很蛋痛的事情。
如果是新手,推荐使用:ADT Bundle。这是Eclipse+Android SDK的合体,所有的项目都已经帮你配置好了。
3、安装JDK
Eclipse需要Java环境才能运行。如果事先没有安装Java环境,则会报错。
解决方案安装jdk( 下载地址 )。
一般来说安装之后会自动配置好环境变量。如果还没有解决问题,请查找网络上关于JDK安装的攻略,很多的。
4、安装CDT插件 ( 下载地址 )
这是个Eclipse的插件,用来支持Eclipse中C/C++语言的开发。
从Eclipse的官网下载,下载之后,将features和plusins这两个文件夹里面的内容复制到Ecplise安装目录下对应的文件夹之后就可以了。
5、安装NDK ( 下载地址 )
这是进行C/C++与Java混合编译的必要工具。记下下载之后解压到的目录,因为到之后的安装中会用到。
6、安装ANT ( 下载地址 )
Cocos的Android开发需要用到它,所以下载下来安装好吧。
二、PC环境下配置过程
1、安装VS2012 ( 官方地址 )
网上还有很多其他下载地址。
最好是2012,我曾经试过2010,2013,都会出这样那样的问题。所以,2012!
2、安装python 2.7.6 ( 下载地址 )
因为Cocos2d-x的安装程序是用phthon写的,所以需要这个软件。不要下载python3.0以上的版本,否则运行会出错。如果是Mac,那么天生就自带了。
3、进行开发环境配置
以上的工作完成之后,就可以进行配置了。启动Windows的命令行(CMD)工具。进入Cocos2d-x 3.1的安装目录,执行:
python setup.py
Cocos2d-x 3.1版本使用这个setup.py来安装,十分方便。执行之后会让你配置上面准备工作中所安装的:ANT、NDK、SDK等目录,把安装到哪儿去了填写进入就行。
4、建立自己的项目
用setup.py配置好Cocos2d-x的环境之后,你的命令行中就会多如“cocos”的命令,新建项目将使用这个命令进行。示例:
cocos new hello(项目名称)-p com.hello(包名字)-l cpp(项目类型) -d E:\MyCocos\cocos2d(目录)
新建的项目会把所有的源文件和库都拷到你的项目目录中。所以新建的项目文件会很大,有许多人怀疑这个的必要性,不过到你之后的开发中就会知道这种配置方法是对的了。
项目建立好之后,就可以开发了:
A、进行VS2012的开发。
找到你的项目目录下的:proj.win32,打开里面的解决方案就行。剩下的就是你的任务了。一般来说,直接就可以运行。
B、进行Android的开发。
使用Eclipse中的项目导入,导入proj.android中的项目方案。导入之后,因为SDK的问题,一般无法启动,关于这个问题,以及其它的问题,请参见(四、其它问题解决方案)。
三、MAC环境下配置过程
1、注册苹果开发者账号 ( 注册地址 )
如果不使用真机,使用模拟器调试,那么有开发者账号应该就足够了。
如果要使用真机调试,需要购买IOS开发者会员,688RMB一年。我看到之前的攻略说要99美元,但是看现在的页面的的提示,应该只要有网银就可以支付了。网上的攻略写得非常复杂,说要下载证书什么什么的,现在统统都不需要了,XCode全部为您代劳了,只要照提示一路点同意就行。
2、安装XCode
在你的开发者首页下面就有XCode的下载。通过App Store下载安装即可。
请使用最新的XCode(需要OS X 10.8以上系统支持),并使用App Store安装。我的MacBook Air从朋友那里拿来时还是10.7,因为下载总是中断,屡次不成功,所以用XCode 4.6,但好像不通过App Store安装会出这样那样的问题。所以强烈推荐使用最新的版本。
3、进行开发者环境配置。
与PC的配置一样,打开MAC的终端程序,执行setup.py,配置好各种SDK的路径就行。但MAC需要再加上一句:
source /Users/yourname/.bash_profile
这是用来刷新配置文件的。
4、建立项目文件
使用命令行建立。
如果你像我一样用两个平台(PC与MAC)开发,可以共享同一个项目目录。我的项目文件是放在PC上的,MAC通过共享访问项目文件。
项目建立好之后就可以开发了。MAC下的配置相对简单,使用XCode打开项目目录下的proj.ios_mac下的项目配置文件就行。之后基本不会出错的。
四、其它问题解决方案
Eclipse与Android相关:
问题 :SDK错误
因为Cocos2d-x的模版默认是使用Android 2.3.3(API-10),如果新安装的ADT Bundle或Android SDK,是API-19,则会出现错误,解决方案是通过Android SDK中的管理工具(SDK Manager)下载Android 2.3.3的SDK。
问题 :Project 'XXX' is missing required source folder: 'gen'
这个问题就是上面的SDK错误导致的。
问题 :undefined reference to 'cocos2d::network::HttpClient::getInstance()'
我是使用网络库(network)的时候出现这个错误的。如果你使用其它库,解决方案是一样的。原因是缺少库的引用。解决方案是在Android.mk里面增加:
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
Cocos2d-x的开发者已经在Android.mk里面加上了很多这种路径,平时是注释掉的。您要使用时把这些增加上去就行。
问题 :fatal error: cocos-ext.h: No such file or directory
问题分析:缺少头文件路径的引用
需要在:Android.mk里面增加
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../cocos2d/extensions
Cocos2d-x的开发者已经在Android.mk里面加上了很多这种路径,平时是注释掉的。您要使用时把这些增加上去就行。
问题 :The import org.cocos2dx.lib cannot be resolved。
无法找到指定的库文件。解决的方案是增加路径的引用:Project Properties -> Java Build Path -> Source and then linking “项目目录/cocos/platform/android/java/src”
VS2012相关:
问题 :“extensions/ExtensionMacros.h”: No such file or directory
无法打开包括文件。
1、解决方案中,添加“现有项目”--> libExtensions 具体目录: ..\cocos2d\extensions\proj.win32\libExtensions.vcxproj
2、项目中添加引用-->libExtensions
3、通过:属性->C/C++->附加包含目录。附加包含目录:$(EngineRoot)
如果你使用其它的文件,解决方案是一样的。1、增加项目的引用。2、附加头文件的包含目录。
当遇到COCOS2DX 3.2+版本创建权限问题时:
首先,打开终端cd到目录 /cocos2d-x-3.2/tools/cocos2d-console/bin 下, 运行 cocos.py 脚本创建文件。
[javascript] view plain
./cocos.py new HelloWorldDemo -p com.coco2dx.org -l cpp -d ~/Desktop
参数说明:
HelloWorldDemo为项目名称
-p 后面接包名
-l 后面接开发语言类型,有cpp, lua, js三种类型
-d 后面接项目存放的目录
如果出现 -bash: ./cocos.py: Permission denied ,是因为没有权限。 用命令 chmod 修改一下目录下的 cocos.py 权限就可以了
[cpp] view plain
chmod u+x cocos.py