cocos2dx-3.0(21) 移植android平台 说多了都是泪

~~~~我的生活,我的点点滴滴!

网上3.0的教程真心少。能够说没有吧,大多都是2.x 或者 3.0測试版之类的,因为我心大,没有照着2.x去搞,后来搞完后总结了一下,发觉事实上3.0的移植android平台非常easy了,也不须要照着2.x搞,以下记录一下一个"超级苦比的小煞笔"在全然不知道怎么搞的情况下横冲直创去移植android平台遇到的问题

1.、首先你的环境要配好

先看以下的图片,图片里是你须要的东西

看图说话

1.1 ADT

ADT(Android Development Tools):

眼下Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中。安装ADT。为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具。

1.2 SDK

SDK(Software Development Kit):

通常是一些被软件project师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。在Android中,他为开发人员提供了库文件以及其它开发所用到的工具。

简单理解为开发工具包集合,是总体开发中所用到的工具包,假设你不用Eclipse作为你的开发工具。你就不须要下载ADT,仅仅下载SDK就可以开发。

1.3 JDK

可能在刚开发时。刚開始学习的人都会问一个问题,既然SDK是JDK的一个子集,那为什么两者会同一时候存在,用JDK是不是就能够了?另外。Eclispe中并没有设置JDK的Path。而Android是依赖于SDK的。那此时JDK是不是意味着没有起到作用了?事实上回答这个问题很easy。关键一点就是要明确要想Eclipse正常工作,是必须安装JDK的。在XP环境中,尽管没有在IDE中设置JDK的引用路径,但Eclipse会自己主动会在系统变量中寻找。这下懂了,JDK的作用就是为Eclipse执行服务的。

1.4 ANT

Apache Ant,是一个将软件编译、測试、部署等步骤联系在一起加以自己主动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。默認情況下,它的buildfile(XML文件)名為build.xml。每一個buildfile含有一個<project>和至少一個預設的<target>,這些targets包括許多task elements。每一個task element有一個用來被参考的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 我们发现里面仅仅有两行代码

# Project target.
target=android-10

android.library.reference.1=../cocos2d/cocos/2d/platform/android/java

那个target=android-10 表示你的API level 因为我用的是android4.0的库相应的是API 14,所以我会把他改成 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 := armeabi armeabi-v7a x86

这行代码非常重要。他能解决你找不到 cocos2dcpp.so的错误提示。加了这行代码后,他编译的时候会编译出三个版本号的.so文件,尽管慢一点,可是不会出错,假设你们不加他也没报错能够无视。当报那个错后,加上他即可了。

在来看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/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)

$(call import-module,2d)
$(call import-module,audio/android)
$(call import-module,Box2D)

我们先一行一行来分析:

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/HelloWorldScene.cpp

这个一看就知道应该是要把Classes文件夹下的全部的.cpp文件加入到这里,当然你能够选择手动加入。这里我们用脚本加入

# 遍历文件夹及子文件夹的函数
define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef
# 遍历Classes文件夹
ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)
FILE_LIST := hellocpp/main.cpp
# 从全部文件里提取出全部.cpp文件
FILE_LIST += $(filter %.cpp, $(ALLFILES))
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

到此把.cpp加入完了,头文件非常easy,不用我们改

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

我们接下来看static库

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static

这三行是默认给我们创建好的,假设我们想用cocos2dx里面的其它的功能模块,我们能够像以下这样加入

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static

看最后一行当我们程序中用到cocos的扩展时,须要加进来,反正照着上面那格式加即可了。

最后是import

include $(BUILD_SHARED_LIBRARY)

$(call import-module,2d)
$(call import-module,audio/android)
$(call import-module,Box2D)

与上面LOCAL_WHOLE_STATIC_LIBRARIES的模块相应上。假设上面加入了extension以下就要改成这样

include $(BUILD_SHARED_LIBRARY)

$(call import-module,2d)
$(call import-module,audio/android)
$(call import-module,Box2D)
$(call import-module,extensions)

这里在提一个VS下加入依赖库的题外话,3.0创建project时默认给我们加入了libAudio、libchipmunk、libcocos2d这三个模块,一般有这三个模块我们也够用了。假设想用扩展,按下图方法加入

选中"解决方式" 右键 "加入" ---> "现有项目" 选择扩展包 然后确实即可了。然后选中我们的project名 比方我的project名为"runping" 右键 "引用"

然后点击“新建引用”把我们新加入的勾上,确定即可了

这是VS下的加入库到此结束,我们继续回到我们android平台移植主题上。上面对于 Android.mk文件中完整的内容例如以下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

# 遍历文件夹及子文件夹的函数
define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef
# 遍历Classes文件夹
ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)
FILE_LIST := hellocpp/main.cpp
# 从全部文件里提取出全部.cpp文件
FILE_LIST += $(filter %.cpp, $(ALLFILES))
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

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 += cocos_extension_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,2d)
$(call import-module,audio/android)
$(call import-module,Box2D)
$(call import-module,extensions)

到此JNI目录说完了。我们发现另一个res目录。那个是用来换我们安装apk后的显示图片,我这里临时不关心

那么这个时候,我们须要在cmd中进入project文件夹下执行build_native.py去生成我们须要的so文件了

执行OK后,会多出几个文件夹,文件夹结构图例如以下:

多了一个gen目录(自己主动生成)、libs目录(用来存放libcocos2dcpp.so)、obj目录(看名字就知道是编译过程中生成的中间文件)、bin目录(最后.apk包所在地)、assets目录(存放资源文件)

这个时候。假设你不想用eclipse。能够直接接着执行命令

cocos run -p android -j 4

假设不报错,就会在bin以下生成 apk文件,你直接copy到真机上。可是这样就没法调试问题了,所以我们用eclipse。我们打开eclipse,假设你的没有汉化请照着以下连接运行,so easy so fast eclipse汉化过程 点击"文件(File)"
-----> "导入(import)" 照下图选择

点击“下一步”,在出现的界面上选择“浏览”然后选择到我们要打开的项目的android层即可,然后点“完毕“

至此我们的项目打开了,他会自己主动编译的,假设有错误会有console或logcat里面报出来。假设在vs以下改动了代码或者在文件浏览器中改动了东西。能够右键项目----->刷新,或者

点击”项目窗体“ ------>"清理"
眼下为止我不知道怎么在eclipse里面debug项目,由于我不知道android的程序入口在哪里?希望大家告诉我一下 这个时候有可能在JNI下的main.cpp前面有一个小小的红色叉叉,我们点进去发现他会提示一堆

Unresolved inclusion: "AppDelegate.h
Unresolved inclusion: "cocos2d.h
Unresolved inclusion: "CCEventType.h
......

反正意思是说找不到这些头文件。可是这些头文件是确实存在的,路径也包括对了,这时我们为了让项目编译通过 我们须要这样设置 “项目”---->"属性"----->"C/C++常规" 照着以下的图操作即可了

把那个勾去掉就好了。这样项目就能编译通过了,这时我们须要把生成的apk包放到模拟器或者真机上执行看效果

我们在项目上右键 ----->执行方式 -----> android application 此时假设你的genymotion打开了一个模拟器。就会出现选择框让你选择在哪个上面安装

从上图能看到 标号1是我的真机,标号2是我的模拟器,随便选一个就能看到效果了!

假设出问题,查看logcat里的error项的错误 自己主动google去解决错误

我的一个bug,编译与执行都没有错误,可是一执行到手机或模拟器上就一直黑屏,我试了各种办法都无果,最后发现我的AppDelegate 里面的启动函数和标准的cocos2dx里的有点不一样

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
	auto glview = director->getOpenGLView();
	if( !glview )
	{
		glview = GLView::create("run pig");
		//glview = GLView::create("run pig");

		glview->setFrameSize(360,640);

		director->setOpenGLView(glview);

		glview->setDesignResolutionSize(720, 1280, ResolutionPolicy::SHOW_ALL);

	}
        //我把以下的代码除了reutrn true外全放到上面的if里面了,然后在android上执行就一直黑屏也不报错,在win下正常。折磨了快2天啊。这里大家注意一下吧,不要犯像我SB一样的错误
	// turn on display FPS
	director->setDisplayStats(true);

	// set FPS. the default value is 1.0/60 if you don‘t call this
	director->setAnimationInterval(1.0 / 60);

	// create a scene. it‘s an autorelease object
	auto scene = WelcomeScene::scene();
	//auto scene = HelloWorld::createScene();
	// run
	director->runWithScene(scene);

    return true;
}

文章就写到这里了,口才不怎么好,blog会坚持写,仅仅是为了记录我的点点滴滴

时间: 2024-10-09 12:36:23

cocos2dx-3.0(21) 移植android平台 说多了都是泪的相关文章

cocos2d-x 3.0 final 移植 android

准备工作 你仅仅要依照上一篇的 cocos2d-x 3.0 final 环境搭建 完毕就能够了 1.编辑proj.android\jni\Android.mk,更改内容例如以下 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp # 遍历文件夹及子文件夹的函数 define walk $(wildcar

Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种各样的问题也就来了,之前网上一直有零零碎碎的移植教程,但是都不完整,或是有这样或者那样的问题.今天刚刚研究成功了Cocos2dx-3.0版本项目的安卓平台移植问题,本人亲自完成了整个过程,将Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程 一起分享给大家.

win8下面配置cocos2d-x的环境以及向android平台移植

大家好,今天学习了一下在win8下面配置cocos2d-x的开发环境,现在分享一下吧,如果有不准确的地方,请大家指出,谢谢! 需要的软件: vs2012 adt Bundle(集成了eclipse和sdk) ant ndk cocos2d-x 的源码 python 首先安装 vs2012 ,安装后安装 python ,安装python后将 python的目录添加进 环境变量中,如: 这样的话,python的环境变量就配置好了,可以在命令行下面执行 python命令 查看是否成功: 安装好后 下载

Win7 / Win8 搭建配置【vs2010】、【cocos2dx环境】、【Android平台】

[1.安装VS2010] 推荐版本 Microsoft Visual Studio 2010旗舰版(2.5G) http://download.microsoft.com/download/E/0/4/E0427BB8-8490-4C7F-A05B-AFEA0FC3EA80/X16-60997VS2010UltimTrialCHS.iso 注册方法: 方法一:在控制面版的在卸载向导中输入序列号 (不要真的卸载) YCFHQ-9DWCY-DKV88-T2TMH-G7BHP, 方法二:解压ISO后找

cocos2d-x 3.0 WIN7+VS2012 安卓平台搭建

***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** 题外话: 暑假,重拾cocos2d-x,一年没有接触了,更新到3.0,搭建安卓环境不需要cygwin了.简单了好多呀,就是新建的时候有点麻烦= =. 正文: 一.前期准备工作: 准备几个软件: 1.JDK    地址:http://www.oracle.com/te

cocos 3.0 一键打包android平台应该注意的细节

cocos2d-x 移植越来越便捷,走到cocos2d-x-3.0rc2,能够说移植已经非常完好了,我们仅仅要进行适当的适配,cocos能够直接帮助我们生成apk 我网络不好无法上传图片:(无图无捷豹,呵呵),好像又能够了,哎,这网络! (1)首先确保本地已下载下面软件: android-NDK   :任意找 android-SDK    :官网   developer.android.com/sdk/index.html apache-ant      :    任意找 java-jdk   

Cocos2d-x 3.0 打造一个全平台概念文件夹

Cocos2d-x 3.0 打造一个全平台概念文件夹http:// www.eoeandroid.com/thread-328055-1-1.html

cocos2dx移植android平台

本人这几天一直都没有跟新自己的网站内容,问我干什么去了,当然是做这篇文章做的事了,说起这个移植来真是麻烦啊,网上试验了各种方法,都不知道谁对谁错啊.不过经过本人这三天的研究最后终于成功了,为了让大家少走一些歪路,我决定一定要写下这篇文章,新手们,好好看,不要浪费时间了!现在我就把我遇到的问题和一种简单的方法(方法绝对靠谱,安卓部分适用于3.0)教给大家,还有就是我用到的所有资源.先说资源的问题,大家先去下载我给的资源,一边下载我们一边学教程.关于移植的问题网上的版本大致分为使用Cygwin和不使

【winows7+android-ndk-r9+Cygwin 】cocos2dx 2.*游戏移植Android平台完全手册

为了有不少走的弯路.这里简要记录cocos2d开发环境的搭建.android开发环境搭建.android NDK环境搭建.终于实现cocos2dx 2.* 游戏Android平台移植. 转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/24498213 cocos2dx 2.* 游戏Android平台移植所须要的必要条件 1.cocos2d开发环境搭建,请见前面写的文档:http://blog.csdn.net/oyangyufu/ar