网上3.0的教程真心少,可以说没有吧,大多都是2.x或者3.0测试版之类的,由于我心大,没有照着2.x去搞,后来搞完后总结了一下,发觉其实3.0的移植android平台很简单了,也不需要照着2.x搞,下面记录一下一个"超级苦比的小煞笔"在完全不知道怎么搞的情况下横冲直创去移植android平台遇到的问题
1.、首先你的环境要配好
先看下面的图片,图片里是你需要的东西
看图说话
1.1ADT
ADT(AndroidDevelopmentTools):目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具。
1.2SDK
SDK(SoftwareDevelopmentKit):一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。在Android中,他为开发者提供了库文件以及其他开发所用到的工具。简单理解为开发工具包集合,是整体开发中所用到的工具包,如果你不用Eclipse作为你的开发工具,你就不需要下载ADT,只下载SDK即可开发。
1.3JDK
可能在刚开发时,初学者都会问一个问题,既然SDK是JDK的一个子集,那为什么两者会同时存在,用JDK是不是就可以了?另外,Eclispe中并没有设置JDK的Path,而Android是依赖于SDK的,那此时JDK是不是意味着没有起到作用了?其实回答这个问题非常简单,关键一点就是要明白要想Eclipse正常工作,是必须安装JDK的。在XP环境中,虽然没有在IDE中设置JDK的引用路径,但Eclipse会自动会在系统变量中寻找。这下懂了,JDK的作用就是为Eclipse运行服务的。
1.4ANT
ApacheAnt,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。默認情況下,它的buildfile(XML文件)名為build.xml。每一個buildfile含有一個<project>和至少一個預設的<target>,這些targets包含許多taskelements。每一個taskelement有一個用來被參考的id,此id必須是唯一的。
也就是用来打包的
对于怎么配置android环境我这里不说了,网上好多。
ps:重点来了,请端好板凳,坐下来慢慢观看
2、cocos2dx-3.0移植到android平台下
2.1首先看一下目录结构
第一步:
去cocos2dx库目录路径cocos2d-x-3.0\cocos\2d\platform\android\java\src\org\cocos2dx\lib下复制lib到此目录src\org\cocos2dx下与cpp目录并列
然后我们可以看看当前目录下的AndroidManifest.xml文件由于我不懂,所以只是简单的看看,一般不需要我们更改^V^
第二步:
打开当前目录下的project.properties我们发现里面只有两行代码
#Projecttarget.
target=android-10
android.library.reference.1=../cocos2d/cocos/2d/platform/android/java
那个target=android-10表示你的APIlevel由于我用的是android4.0的库对应的是API14,所以我会把他改成android-14
这里温馨小提示一下,编译的android版本比运行的真机或模拟器低点为好,他是可以兼容的,但是如果编译的版本比真机或模拟器高了,那会出很多意想不到的问题。
当前目录我们简单的处理完了,下面进到jni文件夹下面去看看
第三步:
进入到JNI文件夹下面后,会发现两个文件与一个hellocpp文件夹,那个文件夹我们懒得去管了,主要看那两个后缀为.mk的文件
先看Application.mk
APP_STL:=gnustl_static
APP_CPPFLAGS:=-frtti-DCC_ENABLE_CHIPMUNK_INTEGRATION=1-DCOCOS2D_DEBUG=1-std=c++11-fsigned-char
里面有两行代码,我们在最后给添加一行
APP_ABI:=armeabiarmeabi-v7ax86这行代码很重要,他能解决你找不到cocos2dcpp.so的错误提示,加了这行代码后,他编译的时候会编译出三个版本的.so文件,虽然慢一点,但是不会出错,如果你们不加他也没报错可以无视,当报那个错后,加上他就行了。
在来看Android.mk
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE:=cocos2dcpp_shared
LOCAL_MODULE_FILENAME:=libcocos2dcpp
LOCAL_SRC_FILES:=hellocpp/main.cpp\
../../Classes/AppDelegate.cpp\
../../Classes/HelloWorldScene.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
include$(BUILD_SHARED_LIBRARY)
$(callimport-module,2d)
dio/android)
Box2D)
我们先一行一行来分析:
LOCAL_MODULE_FILENAME:=libcocos2dcpp这四行你管他是什么意思了,我反正没管,就这样不动就行
../../Classes/HelloWorldScene.cpp这个一看就知道应该是要把Classes目录下的所有的.cpp文件添加到这里,当然你可以选择手动添加,这里我们用脚本添加
#遍历目录及子目录的函数
definewalk
$(wildcard$(1))$(foreache,$(wildcard$(1)/*),$(callwalk,$(e)))
endef
#遍历Classes目录
ALLFILES=$(callwalk,$(LOCAL_PATH)/../../Classes)
FILE_LIST:=hellocpp/main.cpp
#从所有文件中提取出所有.cpp文件
FILE_LIST+=$(filter%.cpp,$(ALLFILES))
LOCAL_SRC_FILES:=$(FILE_LIST:$(LOCAL_PATH)/%=%)
到此把.cpp添加完了,头文件很简单,不用我们改
我们接下来看static库
这三行是默认给我们创建好的,如果我们想用cocos2dx里面的其他的功能模块,我们可以像下面这样添加
LOCAL_WHOLE_STATIC_LIBRARIES+=cocos_extension_static
看最后一行当我们程序中用到cocos的扩展时,需要加进来,反正照着上面那格式加就行了。
最后是import
与上面LOCAL_WHOLE_STATIC_LIBRARIES的模块对应上,如果上面添加了extension下面就要改成这样
这里在提一个VS下添加依赖库的题外话,3.0创建工程时默认给我们添加了libAudio、libchipmunk、libcocos2d这三个模块,一般有这三个模块我们也够用了,如果想用扩展,按下图方法添加
选中"解决方案"右键"添加"--->"现有项目"选择扩展包然后确实就行了,然后选中我们的工程名比如我的工程名为"runping"右键"引用" 然后点击“新建引用”把我们新添加的勾上,确定就行了
这是VS下的添加库到此结束,我们继续回到我们android平台移植主题上,上面对于Android.mk文件里完整的内容如下:
到此JNI文件夹说完了,我们发现还有一个res文件夹,那个是用来换我们安装apk后的显示图片,我这里暂时不关心
那么这个时候,我们需要在cmd中进入工程目录下运行build_native.py去生成我们需要的so文件了
运行OK后,会多出几个文件夹,目录结构图如下:
多了一个gen文件夹(自动生成)、libs文件夹(用来存放libcocos2dcpp.so)、obj文件夹(看名字就知道是编译过程中生成的中间文件)、bin文件夹(最后.apk包所在地)、assets文件夹(存放资源文件)
这个时候,如果你不想用eclipse,可以直接接着运行命令
cocosrun-pandroid-j4如果不报错,就会在bin下面生成apk文件,你直接copy到真机上,但是这样就没法调试问题了,所以我们用eclipse,我们打开eclipse,如果你的没有汉化请照着下面连接执行,soeasysofast
eclipse汉化过程点击"文件(File)"----->"导入(import)"照下图选择
点击“下一步”,在出现的界面上选择“浏览”然后选择到我们要打开的项目的android层就行,然后点“完成“
至此我们的项目打开了,他会自动编译的,如果有错误会有console或logcat里面报出来,如果在vs下面修改了代码或者在文件浏览器中修改了东西,可以右键项目----->刷新,或者
点击”项目窗口“------>"清理"目前为止我不知道怎么在eclipse里面debug项目,因为我不知道android的程序入口在哪里?希望大家告诉我一下这个时候有可能在JNI下的main.cpp前面有一个小小的红色叉叉,我们点进去发现他会提示一堆
Unresolvedinclusion:"AppDelegate.h
Unresolvedinclusion:"cocos2d.h
Unresolvedinclusion:"CCEventType.h
......反正意思是说找不到这些头文件,但是这些头文件是确实存在的,路径也包含对了,这时我们为了让项目编译通过我们需要这样设置“项目”---->"属性"----->"C/C++常规"照着下面的图操作就行了
把那个勾去掉就好了。这样项目就能编译通过了,这时我们需要把生成的apk包放到模拟器或者真机上运行看效果
我们在项目上右键----->运行方式----->androidapplication此时如果你的genymotion打开了一个模拟器,就会出现选择框让你选择在哪个上面安装
从上图能看到标号1是我的真机,标号2是我的模拟器,随便选一个就能看到效果了!!如果出问题,查看logcat里的error项的错误自动google去解决错误
我的一个bug,编译与运行都没有错误,但是一运行到手机或模拟器上就一直黑屏,我试了各种办法都无果,最后发现我的AppDelegate里面的启动函数和标准的cocos2dx里的有点不一样
boolAppDelegate::applicationDidFinishLaunching(){
//initializedirector
autodirector=Director::getInstance();
autoglview=director->getOpenGLView();
if(!glview)
{
glview=GLView::create("runpig");
//glview=GLView::create("runpig");
glview->setFrameSize(360,640);
director->setOpenGLView(glview);
glview->setDesignResolutionSize(720,1280,ResolutionPolicy::SHOW_ALL);
}
//我把下面的代码除了reutrntrue外全放到上面的if里面了,然后在android上运行就一直黑屏也不报错,在win下正常,折磨了快2天啊,这里大家注意一下吧,不要犯像我SB一样的错误
//turnondisplayFPS
director->setDisplayStats(true);
//setFPS.thedefaultvalueis1.0/60ifyoudon'tcallthis
director->setAnimationInterval(1.0/60);
//createascene.it'sanautoreleaSEObject
autoscene=WelcomeScene::scene();
//autoscene=HelloWorld::createScene();
//run
director->runWithScene(scene);
returntrue;
原文链接:https://www.f2er.com/cocos2dx/347021.html1.、首先你的环境要配好
先看下面的图片,图片里是你需要的东西
看图说话
1.1ADT
ADT(AndroidDevelopmentTools):目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具。
1.2SDK
SDK(SoftwareDevelopmentKit):一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。在Android中,他为开发者提供了库文件以及其他开发所用到的工具。简单理解为开发工具包集合,是整体开发中所用到的工具包,如果你不用Eclipse作为你的开发工具,你就不需要下载ADT,只下载SDK即可开发。
1.3JDK
可能在刚开发时,初学者都会问一个问题,既然SDK是JDK的一个子集,那为什么两者会同时存在,用JDK是不是就可以了?另外,Eclispe中并没有设置JDK的Path,而Android是依赖于SDK的,那此时JDK是不是意味着没有起到作用了?其实回答这个问题非常简单,关键一点就是要明白要想Eclipse正常工作,是必须安装JDK的。在XP环境中,虽然没有在IDE中设置JDK的引用路径,但Eclipse会自动会在系统变量中寻找。这下懂了,JDK的作用就是为Eclipse运行服务的。
1.4ANT
ApacheAnt,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。默認情況下,它的buildfile(XML文件)名為build.xml。每一個buildfile含有一個<project>和至少一個預設的<target>,這些targets包含許多taskelements。每一個taskelement有一個用來被參考的id,此id必須是唯一的。
也就是用来打包的
对于怎么配置android环境我这里不说了,网上好多。
ps:重点来了,请端好板凳,坐下来慢慢观看
2、cocos2dx-3.0移植到android平台下
2.1首先看一下目录结构
第一步:
去cocos2dx库目录路径cocos2d-x-3.0\cocos\2d\platform\android\java\src\org\cocos2dx\lib下复制lib到此目录src\org\cocos2dx下与cpp目录并列
然后我们可以看看当前目录下的AndroidManifest.xml文件由于我不懂,所以只是简单的看看,一般不需要我们更改^V^
第二步:
打开当前目录下的project.properties我们发现里面只有两行代码
#Projecttarget.
target=android-10
android.library.reference.1=../cocos2d/cocos/2d/platform/android/java
那个target=android-10表示你的APIlevel由于我用的是android4.0的库对应的是API14,所以我会把他改成android-14
这里温馨小提示一下,编译的android版本比运行的真机或模拟器低点为好,他是可以兼容的,但是如果编译的版本比真机或模拟器高了,那会出很多意想不到的问题。
当前目录我们简单的处理完了,下面进到jni文件夹下面去看看
第三步:
进入到JNI文件夹下面后,会发现两个文件与一个hellocpp文件夹,那个文件夹我们懒得去管了,主要看那两个后缀为.mk的文件
先看Application.mk
APP_STL:=gnustl_static
APP_CPPFLAGS:=-frtti-DCC_ENABLE_CHIPMUNK_INTEGRATION=1-DCOCOS2D_DEBUG=1-std=c++11-fsigned-char
里面有两行代码,我们在最后给添加一行
APP_ABI:=armeabiarmeabi-v7ax86这行代码很重要,他能解决你找不到cocos2dcpp.so的错误提示,加了这行代码后,他编译的时候会编译出三个版本的.so文件,虽然慢一点,但是不会出错,如果你们不加他也没报错可以无视,当报那个错后,加上他就行了。
在来看Android.mk
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE:=cocos2dcpp_shared
LOCAL_MODULE_FILENAME:=libcocos2dcpp
LOCAL_SRC_FILES:=hellocpp/main.cpp\
../../Classes/AppDelegate.cpp\
../../Classes/HelloWorldScene.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
include$(BUILD_SHARED_LIBRARY)
$(callimport-module,2d)
dio/android)
Box2D)
我们先一行一行来分析:
LOCAL_MODULE_FILENAME:=libcocos2dcpp这四行你管他是什么意思了,我反正没管,就这样不动就行
../../Classes/HelloWorldScene.cpp这个一看就知道应该是要把Classes目录下的所有的.cpp文件添加到这里,当然你可以选择手动添加,这里我们用脚本添加
#遍历目录及子目录的函数
definewalk
$(wildcard$(1))$(foreache,$(wildcard$(1)/*),$(callwalk,$(e)))
endef
#遍历Classes目录
ALLFILES=$(callwalk,$(LOCAL_PATH)/../../Classes)
FILE_LIST:=hellocpp/main.cpp
#从所有文件中提取出所有.cpp文件
FILE_LIST+=$(filter%.cpp,$(ALLFILES))
LOCAL_SRC_FILES:=$(FILE_LIST:$(LOCAL_PATH)/%=%)
到此把.cpp添加完了,头文件很简单,不用我们改
我们接下来看static库
这三行是默认给我们创建好的,如果我们想用cocos2dx里面的其他的功能模块,我们可以像下面这样添加
LOCAL_WHOLE_STATIC_LIBRARIES+=cocos_extension_static
看最后一行当我们程序中用到cocos的扩展时,需要加进来,反正照着上面那格式加就行了。
最后是import
与上面LOCAL_WHOLE_STATIC_LIBRARIES的模块对应上,如果上面添加了extension下面就要改成这样
这里在提一个VS下添加依赖库的题外话,3.0创建工程时默认给我们添加了libAudio、libchipmunk、libcocos2d这三个模块,一般有这三个模块我们也够用了,如果想用扩展,按下图方法添加
选中"解决方案"右键"添加"--->"现有项目"选择扩展包然后确实就行了,然后选中我们的工程名比如我的工程名为"runping"右键"引用" 然后点击“新建引用”把我们新添加的勾上,确定就行了
这是VS下的添加库到此结束,我们继续回到我们android平台移植主题上,上面对于Android.mk文件里完整的内容如下:
到此JNI文件夹说完了,我们发现还有一个res文件夹,那个是用来换我们安装apk后的显示图片,我这里暂时不关心
那么这个时候,我们需要在cmd中进入工程目录下运行build_native.py去生成我们需要的so文件了
运行OK后,会多出几个文件夹,目录结构图如下:
多了一个gen文件夹(自动生成)、libs文件夹(用来存放libcocos2dcpp.so)、obj文件夹(看名字就知道是编译过程中生成的中间文件)、bin文件夹(最后.apk包所在地)、assets文件夹(存放资源文件)
这个时候,如果你不想用eclipse,可以直接接着运行命令
cocosrun-pandroid-j4如果不报错,就会在bin下面生成apk文件,你直接copy到真机上,但是这样就没法调试问题了,所以我们用eclipse,我们打开eclipse,如果你的没有汉化请照着下面连接执行,soeasysofast
eclipse汉化过程点击"文件(File)"----->"导入(import)"照下图选择
点击“下一步”,在出现的界面上选择“浏览”然后选择到我们要打开的项目的android层就行,然后点“完成“
至此我们的项目打开了,他会自动编译的,如果有错误会有console或logcat里面报出来,如果在vs下面修改了代码或者在文件浏览器中修改了东西,可以右键项目----->刷新,或者
点击”项目窗口“------>"清理"目前为止我不知道怎么在eclipse里面debug项目,因为我不知道android的程序入口在哪里?希望大家告诉我一下这个时候有可能在JNI下的main.cpp前面有一个小小的红色叉叉,我们点进去发现他会提示一堆
Unresolvedinclusion:"AppDelegate.h
Unresolvedinclusion:"cocos2d.h
Unresolvedinclusion:"CCEventType.h
......反正意思是说找不到这些头文件,但是这些头文件是确实存在的,路径也包含对了,这时我们为了让项目编译通过我们需要这样设置“项目”---->"属性"----->"C/C++常规"照着下面的图操作就行了
把那个勾去掉就好了。这样项目就能编译通过了,这时我们需要把生成的apk包放到模拟器或者真机上运行看效果
我们在项目上右键----->运行方式----->androidapplication此时如果你的genymotion打开了一个模拟器,就会出现选择框让你选择在哪个上面安装
从上图能看到标号1是我的真机,标号2是我的模拟器,随便选一个就能看到效果了!!如果出问题,查看logcat里的error项的错误自动google去解决错误
我的一个bug,编译与运行都没有错误,但是一运行到手机或模拟器上就一直黑屏,我试了各种办法都无果,最后发现我的AppDelegate里面的启动函数和标准的cocos2dx里的有点不一样
boolAppDelegate::applicationDidFinishLaunching(){
//initializedirector
autodirector=Director::getInstance();
autoglview=director->getOpenGLView();
if(!glview)
{
glview=GLView::create("runpig");
//glview=GLView::create("runpig");
glview->setFrameSize(360,640);
director->setOpenGLView(glview);
glview->setDesignResolutionSize(720,1280,ResolutionPolicy::SHOW_ALL);
}
//我把下面的代码除了reutrntrue外全放到上面的if里面了,然后在android上运行就一直黑屏也不报错,在win下正常,折磨了快2天啊,这里大家注意一下吧,不要犯像我SB一样的错误
//turnondisplayFPS
director->setDisplayStats(true);
//setFPS.thedefaultvalueis1.0/60ifyoudon'tcallthis
director->setAnimationInterval(1.0/60);
//createascene.it'sanautoreleaSEObject
autoscene=WelcomeScene::scene();
//autoscene=HelloWorld::createScene();
//run
director->runWithScene(scene);
returntrue;
}文章就写到这里了,口才不怎么好,blog会坚持写,只是为了记录我的点点滴滴