• cocos2d-x在win7下的android交叉编译环境


    cocos2d-x在win7下的android交叉编译环境

    前面把Visual Studio+Python开发环境配好了,但还没有讲如何在Android中使用创建好的项目,本篇博客介绍如何在win7下进行Android与cocos2d-x的交叉编译,我的电脑是64,所以下面的配置是基于x86_64下配置的。

    下载:Cygwin

    Cygwin的主要目的是通过重新编译,将POSIX系统(例如Linux、BSD,以及其他Unix系统)上的软件移植到Windows上。

    http://cygwin.com/install.html这里下载

     

     

    下载成功,安装Cygwin


    到了这个界面都是默认下载的,这里需要特别注意一下,需要把Devel改为install,点一下Default就行了。

    Devel包含了make命令,不下载的话在导入Eclipse会编译不了。

    经过非常漫长的等待,我只想说一句:艹

    好,安装完成后,会在C:cygwin64有以下文件夹:

    下载NDK,这个自己到官网下去:http://developer.android.com/tools/sdk/ndk/index.html

    小巫把NDK解压缩到了D:/software目录下,需要是全英文,并且不能留空格。

    D:softwareandroid-ndk-r9d

    下面开始介绍如何将Cocos2d-x移植到Android中去,为了弄这个我花了好长时间才把它给弄好,过程有点复杂和繁琐。我现在也还不太清楚是否有更好更方便的移植的方法,如果知道的麻烦告知一下:

    首先我们要清楚cygwin是用来干什么的,简单来说就是在cygwin下使用NDK对Android项目进行交叉编译。

    不知道交叉编译是啥?

    交叉编译,简单来说就是在一个平台上生成另一个平台可执行的代码。我们这里就是把Linux下的代码生成windows下能够执行的代码。不知道解析的对不对,各位保留意见。

    配置过程:

    一、首先我们来对Cygwin配置

    打开C:cygwin64homeAdministrator下的.bash_profile文件,添加以下内容(已ndk实际路径为准我这里的NDK路径为:D:/software/android-ndk-r9d):

     

    # NDK PATH
    NDK=/cygdrive/d/software/android-ndk-r9d
    export NDK

    这里相当于在Linux下配置环境变量。

     

    如果想打开cygwin时候直接进入你项目所在目录:

    打开C:cygwin64etcash.bashrc,在文件末尾添加以下内容

    cd d:/software/cocos2d-x-2.2.3/projects

    打开cygwin.bat是就会有以下界面:

     

    进入HelloWorld项目:

     

    再键入./build_native.sh就可以编译我们的Android项目了

    我们就可以以这样的方式编译项目了,HelloWorld和Test都是我们使用Python创建的,下面会谈到,希望你能耐心读下去,如果实在不行,看看岛国的爱情动作片,撸一把先。

    我们将Cocos2d-x程序移植到Android

    需要将:D:softwarecocos2d-x-2.2.3cocos2dxplatformandroidjavasrcorg文件夹复制到我们目标项目的src目录下

    是不是每次编译项目的时候都要手动复制呢,我们可以这么做,但有一种方法可以每次编译项目的时候,会自动把org文件夹复制到目标项目的src目录下:

    我们在cygwin中执行./build_native.sh的时候发现会自动将与proj.android同一个文件下的Resources下的文件,复制到proj.androidassets目录下

    比如:D:softwarecocos2d-x-2.2.3samplesCppHelloCppproj.androidassets中的文件就是从Resources中复制过来的

     

    这个复制的过程是已经在Cocos2d-x中的脚本写好的,下面我们一步一步来完成这个复制的过程:

    1.   打开C:cygwin64homeAdministrator下的.bash_profile文件,增加路径:

    COCOS2DX_DIR=/cygdrive/d/software/cocos2d-x-2.2.3

    export COCOS2DX_DIR

    2.   打开D:softwarecocos2d-x-2.2.3 emplatemulti-platform-cppproj.android下的build_native.sh

    在33行~36行,有这么一个NDK_ROOT的判断:

    我们在它下面也定义一个COCOS2DX_DIR的判断:

    if [ -z "${COCOS2DX_DIR+aaa}" ];then

    echo "please defineCOCOS2DX_DIR"

    exit 1

    fi

    然后在下面输出COCOS2DX_DIR这个目录

    echo "COCOS2DX_DIR = $COCOS2DX_DIR"

    到这里还没完事,我们还没看到复制Resource下的文件到proj.android下的assets目录是怎么实现的,我们继续往下看,在62~72行有这样的定义:

     

    通过这个定义,我们就很清楚的看到,cocos2d-x是如何把资源复制到assets目录下的。

     

    所以我们同样可以把D:softwarecocos2d-x-2.2.3cocos2dxplatformandroidjavasrc的org文件夹复制到我们目标项目的src目录下,我们可以有这样的定义:

    for file in"$COCOS2DX_DIR"/cocos2dx/platform/android/java/src/*

    do

    if [ -d "file" ]; then

             cp -rf"$file" "$APP_ANDROID_ROOT"/src

    fi

    if [ -f "$file" ]; then

             cp"$file" "$APP_ANDROID_ROOT"/src

    fi

    done

    好,到现在为止,Cygwin和Cocos2d-x下的配置已经完成,修改脚本的目的也是为了避免重复性工作,把重复性的工作在脚本中定义好,下次编译项目时就可以自动复制到制定目录下。

     

    上面已经讲了,在HelloWorld目录下,proj.android,执行./build_native.sh就可以进行编译了,编译的过程有点慢,需要耐心等待。。。。,又是等,我艹,不好意思,失态了。

     

    等它编译成功后,在Eclipse将编译好的项目导入:

    我们把编译好的HelloWorld项目导入到Eclipse中:

    路径如下:D:softwarecocos2d-x-2.2.3projectsHelloWorldproj.android

    导入完成之后:右键项目->Properties

     

    选择Builders,点击New创建

    New_Builder,对应填写以下内容

    Location: C:cygwin64inash.exe

    Working Directory: C:cygwin64in

    Arguments: --login -c "cd/cygdrive/d/software/android-ndk-r9d && make APP=HelloWorld"


    之后还要增加C/C++ Build:


    Path: C:cygwin64in

    这里的配置基本上都是固定的,每次导入的项目都按照这样配一次,把自己配好的固定步保存下来,下次再配的时候可以直接复制粘帖。

    到现在基本上所有配置已经做好了

    最终HelloWorld的项目全貌如下图,红框就是我们编译复制过来的东西。


     

    点击运行,如果以上的步骤没有出错的话,就可以看到经典Helloworld了:

     

    以上内容是小巫参考资料所整理的,如有疑问可知悉。

    最后说一句,关于Cocos2d-x,我本人才接触没几天,这几天都在搭建这个环境,我本人基本上把整个流程都仔细过了一遍,也了解了一些配置的作用是什么,我希望其他跟我一样学习cocos2d-x的童鞋,自己学会总结。把自己遇到或者不懂的问题也总结出来,不然你搭过一次这样的环境,然后就忘了。我个人觉得一个环境的配置做得那么复杂那真够呛的,我目前还不知道有更加简单的方法,如果有谁知道可以交流一下。

  • 相关阅读:
    选择排序遇到的引用和传值问题记录
    The web application [ROOT] appears to have started a thread named [spring.cloud.inetutils] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
    IDEA中实用的插件
    Column 'status' specified twice
    Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'dataType' in 'field list'
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where id = 2' at line 8
    Missing URI template variable 'id' for method parameter of type long
    值传递和引用传递的区别
    SpringBoot项目与数据库交互,访问http://localhost:8888/admin/userInfo时,报org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
    SpringBoot项目启动时报错:org.apache.catalina.LifecycleException: Protocol handler start failed
  • 原文地址:https://www.cnblogs.com/dudu580231/p/4939681.html
Copyright © 2020-2023  润新知