Ubuntu下编译Cocos-2d-x-3.6 Android工程

前言

Linux环境下编译成功后,我们继续要进行的测试就是完成Android工程的编译。
我在第一篇《Ubuntu下搭建Cocos2d-x-3.4 / Cocos2d-x-3.6开发环境》里面提到过,直接使用Android Studio自动下载的ndk环境,不适合以前旧的cocos版本开发的游戏。即使我升级到3.6,依然不适合。

部署环境

当时,填完了所有坑,部署好3.6版本之后,用cocos new命令新建一个test工程,然后成功地编译运行了linux下的HelloWorld。 但是当用cocos compile -p Android编译Android包的时候,却报错了,看清楚它试图去找armeabi-v8a,而我们项目里面只有armeabi-v7a,我觉得是Ndk版本太高了,所以决定从Google官网下载我们从前采用的NDK r9d来重新编译。
下载地址:http://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2

特别推荐一个csdn网页,上面有很全的Android官方下载地址,我就在这里找的。
http://www.cnblogs.com/yaotong/archive/2011/01/25/1943615.html

将下载的r9d解压放到~/Android/android-ndk-r9d目录下。
然后编辑配置文件:

vim ~/.bashrc

将其中export NDK_ROOT=一项(如果没有就添加),修改为:

export NDK_ROOT=~/Android/android-ndk-r9d

然后source一下让这个设置立即生效:

source ~/.bashrc:

编译test工程的Android包

cd ~/Devlop/test
cocos compile -p Android

终于成功了,回应如下:

Move apk to /home/ace/Devlop/test/bin/debug/android
build succeeded.

The NDK version is not r10c or above.
Your application may crash or freeze on Android L(5.0) when using BMFont and HttpClient.
For More information:
https://github.com/cocos2d/cocos2d-x/issues/9114
https://github.com/cocos2d/cocos2d-x/issues/9138

Your application may crash when using c++ 11 regular expression with NDK_TOOLCHAIN_VERSION 4.8

嗯,看来cocos2d-x-3.6将ndk要求升级到了r10c或者更高。依稀回忆起3.6时代我们用lua开发的时候,是用的ndk r10d,重新下载ndk r10d,并再次配置一下环境。
下载地址:
http://dl.google.com/android/ndk/android-ndk-r10d-linux-x86_64.bin
发现不是熟悉的zip格式,而是用的bin,我讨厌这种可执行文件。下载完成后,发现文件没有执行权限。进到下载目录,下终端设置权限,然后执行:

cd ~/Downloads
chmod +x android-ndk-r10d-linux-x86_64.bin
./android-ndk-r10d-linux-x86_64.bin

自解压出一个android-ndk-r10d目录,我们把它移动到/Android目录下,然后重新设置/.bashrc并source之(过程略)。

再次cocos compile -p Android来编译Android工程,回应如下:

BUILD SUCCESSFUL
Total time: 4 seconds
Move apk to /home/ace/Devlop/test/bin/debug/android
build succeeded.

嗯,这次完美了,4秒钟那么快是因为先前编译过一次了。
就不用把这个apk拷贝到真机上测试了,我希望配置好能在AS上调试以后才开始真机调试。

编译实战项目的Android包

采用前面《Ubuntu下编译Cocos 2d-x-3.6 Linux工程》这篇文章的中实战项目CrossNew来测试。
因为原项目中接过sdk包,而且c++程序中有一些Android的编译选项,我几乎无法直接用新建工程的proj.android来增改,最好的办法是把现在的这个目录备份了,再把原来工程中的这个目录完整复制过来,最后调试检查是否有问题。

下面容是原来工程Android.mk的部分内容,主要记录一下用脚本遍历所有.cpp和.h头文件的方法:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

OT_PATH := $(LOCAL_PATH)

$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos/editor-support)

LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp

define walk
    $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef

ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)

FILE_LIST := hellocpp/main.cpp
FILE_LIST += $(filter %.cpp, $(ALLFILES))
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

FILE_INCLUDES := $(shell find $(LOCAL_PATH)/../../Classes -type d)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
                    $(FILE_INCLUDES)

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

这个是3.4下实现的,不知道3.6下面会有什么幺蛾子。

开始编译

cd ~/Devlop/cross
cocos compile -p Android

漫长的等待。几乎快成功的时候报错了:

BUILD FAILED
/home/ace/Android/Sdk/tools/ant/build.xml:459: ..\cocos2d\cocos\platform\android\java resolve to a path with no project.properties file for project /home/ace/Devlop/cross/proj.android

看了一下project.properties的内容,恍然明白..\cocos2d\cocos\platform\android\java这种写法是windows平台下的写法啊,linux下都应该换成"/"。 修改为:

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

然后重新编译,成功了。最后回应:

BUILD SUCCESSFUL
Total time: 7 seconds
Move apk to /home/ace/Devlop/cross/bin/debug/android
build succeeded.

大功告成,所有环境都算成功过了一遍。有点没想明白的是,以前用eclipse编译为什么没报错呢?难道不是用的ant编译?ant编译和ndk编译又是什么关系?不懂的东东太多,想不明白就不想了,以后慢慢会懂。

后记

刚才又狠狠想了一下,确定以前做项目的时候,应该从来没有用cocos compile来编译android工程,都是习惯进eclipse里面编译的。直接在命令行编译,是在后面做lua项目时候,因为没有好的ide环境,才养成的习惯。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容