Android模拟器运行&&日志调试Cocos2d-JS游戏
发表于2016-07-31
一、目标
在不使用 Eclipse Android Studio 等大型 IDE前提下,将 cocos2d-js 创建的游戏在模拟器中运行,并进行日志调试(最小化安装需求)。
二、环境
cocos2d-js v3.10
Mac OS X
android-ndk-r9d
Android 4.4.2 (API 19)
三、软件准备
安装 jdk
用于编译游戏中的 .java 文件。链接
下载后双击安装即可。
安装 Android-SDK
用于签名生成 .apk 等。链接
下载后解压即可。
安装 Android-NDK
用于编译 c++ ,生成 .so .a 文件等。链接
推荐使用 android-ndk-r9d 版本,为配合 cocos 命令行工具。
下载后解压即可。
四、配置环境变量
下载解压完 Android-SDK 和 Android-NDK 后,修改 .bash_profile 文件
1 2 3 4 5 6 7 8 9 10 | # NDK export NDK_ROOT=/Users/android/android-ndk-r9d export PATH=$PATH:$ANDROID_NDK_ROOT # SDK export ANDROID_SDK_ROOT=/Users/android/android-sdk-macosx export PATH=$PATH:$ANDROID_SDK_ROOT # 加入两个子目录,方便命令调用 export PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH export PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/build-tools/23.0.3:$PATH |
修改后保存退出 source ~/.bash_profile 即可。
五、虚拟机搭建
安装 SDK Image
前面下载解压后的 Android-SDK 并不包含实际的 SDK ,我们需要自己下载需要的版本。
在 android-sdk-macosx/tools 目录下有许多命令行工具,一些大型的 IDE 如 Eclipse 也是调用它们来实现自动化功能的。
1 | root: android |
命令运行后,会打开图形化的 Android-SDK-Manager 工具。在其中可以选择安装我们需要的模块。
这里安装的是:
1 2 3 4 5 6 7 8 9 | + Tools - Android SDK Tools - Android SDK Platform-tools - Android SDK Build-tools + Android 4.4.2 (API 19) - SDK Platform - Google APIs Intel x86 Atom System Image + Extras - Intel x86 Emulator Accelerator (HAXM Installer) |
安卓的版本选择了 Android 4.4.2 (API 19) 为了更好的配合 cocos2d-js 生成的 Android 项目,其他版本使用时可能会有问题。
Google APIs Intel x86 Atom System Image 是虚拟机的镜像文件,这里选择 x86 类型配合 Intel x86 Emulator Accelerator 可以提高模拟器的运行速度。

六、创建 && 运行 AVD
下载完 Image 后就可以创建虚拟设备了。
1 | root: android avd |
命令运行后,会打开图形化的 Android-Vitural-Device-Manager 工具。

在其中可以选择刚才下载的 Image 来创建一个虚拟设备。
所以说一个虚拟设备需要指定 Image + SDK + Device + Skin 来创建。

创建完虚拟设备后就可以直接通过命令行启动了:
1 | root: emulator avd "设备名" |

编译 .apk
cocos2d-js 提供了 cocos 命令行工具来方便的编译 .apk。但是在使用前需要对某些文件进行简单地修改。
七、编译前的修改
cocos 项目在创建完后都会默认自动生成 Android 的项目模板 proj.android :
1 2 3 4 5 | + CocosProtobuf + frameworks + runtime-src + Classes + proj.android |
首先修改 jni 目录下的 Android.mk :
1 2 3 4 | LOCAL_SRC_FILES := hellojavascript/main.cpp ../../Classes/AppDelegate.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes |
原来的写法是把项目中的文件一一列出,这个比较麻烦,修改成自动添加所有匹配类型的做法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | MY_FILES_PATH := $(LOCAL_PATH) MY_FILES_PATH += $(LOCAL_PATH)/../../Classes MY_FILES_SUFFIX := %.cpp %.c %.cc rwildcard = $(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)) MY_ALL_FILES := $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*.*) ) MY_ALL_FILES := $(MY_ALL_FILES:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%) MY_SRC_LIST := $(filter $(MY_FILES_SUFFIX),$(MY_ALL_FILES)) MY_SRC_LIST := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%) define uniq = $(eval seen :=) $(foreach _,$1,$( if $(filter $_,${seen}),,$(eval seen += $_))) ${seen} endef MY_ALL_DIRS := $(dir $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*/))) MY_ALL_DIRS := $(call uniq,$(MY_ALL_DIRS)) LOCAL_SRC_FILES := $(MY_SRC_LIST) LOCAL_C_INCLUDES := $(MY_ALL_DIRS) |
这样项目中所有 cpp .c .cc 文件都会被编译。
接着修改 Application.mk
1 | # APP_ABI := armeabi-v7a |
把原先注释掉的代码放开,ABI 修改成我们的虚拟设备的类型 x86
1 | APP_ABI := x86 |
接着就可以直接编译了
1 | cocos compile -p android |
八、运行 .apk 及日志
1、运行
生成的 .apk 可以在 proj.android/bin 或是 CocosProtobuf/simulator/android 中找到。
接下来只需要运行虚拟设备:
1 | root: emulator avd "设备名" |
设备就绪后,安装:
1 | root: adb install CocosProtobuf-debug.apk |
安装完后,就可以在虚拟设备上看到 app 图标了。
2、日志
只是运行还有些不足,还需要能够看到日志。这里可以使用 Android-SDK 中提供的工具来实现:
1 | root: monitor |
这条命了会启动 Eclipse 中的那种可视化日志调试工具。

接着只需要设置过滤器就可以看到游戏输出的日志了。

