cocos2dx-3.0 移植android平台

简介:     网上3.0的教程真心少,可以说没有吧,大多都是2.x 或者 3.0测试版之类的,由于我心大,没有照着2.x去搞,后来搞完后总结了一下,发觉其实3.0的移植android平台很简单了,也不需要照着2.
    网上3.0的教程真心少,可以说没有吧,大多都是2.x 或者 3.0测试版之类的,由于我心大,没有照着2.x去搞,后来搞完后总结了一下,发觉其实3.0的移植android平台很简单了,也不需要照着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): 一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。在Android中,他为开发者提供了库文件以及其他开发所用到的工具。简单理解为开发工具包集合,是整体开发中所用到的工具包,如果你不用Eclipse作为你的开发工具,你就不需要下载ADT,只下载SDK即可开发。  
        1.3 JDK 
        可能在刚开发时,初学者都会问一个问题,既然SDK是JDK的一个子集,那为什么两者会同时存在,用JDK是不是就可以了?另外,Eclispe中并没有设置JDK的Path,而Android是依赖于SDK的,那此时JDK是不是意味着没有起到作用了?其实回答这个问题非常简单,关键一点就是要明白要想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添加完了,头文件很简单,不用我们改 
         
         
        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创建工程时默认给我们添加了libAudio、libchipmunk、libcocos2d这三个模块,一般有这三个模块我们也够用了,如果想用扩展,按下图方法添加 
         
           
          
        选中"解决方案" 右键 "添加" ---> "现有项目" 选择扩展包 然后确实就行了,然后选中我们的工程名 比如我的工程名为"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中进入工程目录下运行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会坚持写,只是为了记录我的点点滴滴 


转载自:http://www.58player.com/blog-2537-89679.html

相关文章
|
2月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
120 1
|
3月前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
7天前
|
IDE 开发工具 Android开发
移动应用开发之旅:探索Android和iOS平台
在这篇文章中,我们将深入探讨移动应用开发的两个主要平台——Android和iOS。我们将了解它们的操作系统、开发环境和工具,并通过代码示例展示如何在这两个平台上创建一个简单的“Hello World”应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧,帮助你更好地理解和掌握移动应用开发。
32 17
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
106 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
106 6
|
3月前
|
开发工具 Android开发 iOS开发
安卓与iOS开发环境对比:选择适合你的平台
【9月更文挑战第26天】在移动应用开发的广阔天地中,安卓和iOS是两大巨头。它们各自拥有独特的优势和挑战,影响着开发者的选择和决策。本文将深入探讨这两个平台的开发环境,帮助你理解它们的核心差异,并指导你根据个人或项目需求做出明智的选择。无论你是初学者还是资深开发者,了解这些平台的异同都至关重要。让我们一起探索,找到最适合你的那片开发天地。
|
3月前
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
|
3月前
|
安全 API 开发工具
Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换
Android平台扬声器播放声音的采集,在无纸化同屏等场景下,意义很大,早期低版本的Android设备,是没法直接采集扬声器audio的(从Android 10开始支持),所以,如果需要采集扬声器audio,需要先做系统版本判断,添加相应的权限。
|
3月前
|
编解码 开发工具 Android开发
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器
|
3月前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
81 0