1

我为 Android 编译了 Cocos2d-js 'Hello World'-project 并尝试在 Genymotion(x86 上的 Android 模拟器)上运行它。

我已经尝试添加:

APP_ABI := armeabi armeabi-v7a x86

to Application.mk,这使 apk 大了 3 倍,但是当我在 Genymotion 中运行应用程序时,它立即显示“HelloWorld 已停止”。

相同的 apk 在真正的 Android 设备上运行良好。

有任何想法吗 ?

更新: 示例 JS-MoonWarriors 在 Genymotion 上运行良好(安装了 ARM 翻译),所以我猜它与 x86 无关。然而,示例 JS-Tests不起作用(同样的错误“...已停止”)。

4

2 回答 2

2

在以下链接的帮助下解决了这个问题:http: //discuss.cocos2d-x.org/t/cocos2d-x-with-genymotion/9476/2

该文件Cocos2dxActivity.java中有一个函数,用于检查它是否在默认的 Android 模拟器上运行。将此功能更改为还包括 Genymotion(和 Adob​​e VirtualBox):

isEmulator = product.equals("sdk") ||
             product.contains("_sdk") || 
             product.contains("sdk_") || 
             product.contains("vbox");

此外,您必须确保在 Genymotion 中安装了 ARM 翻译包,或者在问题中使用 APP_ABI 技巧。

于 2014-10-08T12:52:05.610 回答
1

我也解决了......你应该做两件事来让它工作:

首先在名为 Cocos2dxActivity.java 的文件中搜索你的 cocos 游戏项目,然后用记事本打开它并向下滚动到文件底部,然后你应该会找到一个带有如下行的静态函数:

 isEmulator = product.equals("sdk") || product.contains("_sdk") || product.contains("sdk_");

这需要更改为:

 isEmulator = product.equals("sdk") || product.contains("_sdk") || product.contains("sdk_") || product.contains("vbox");

第二次再次搜索你的 cocos 游戏项目以查找另一个名为 Application.mk 的文件,并像往常一样使用记事本打开它,并在这些拖曳行下:

# Uncomment this line to compile to armeabi-v7a, your application will run faster but support less devices
#APP_ABI := armeabi-v7a

在它们下面添加另一行:

APP_ABI := armeabi x86 

你应该考虑的另一件事是你刚刚添加的行应该和我写的完全一样,如果你试试这个:

APP_ABI := Armeabi x86 (Wrong ... it wont work just because of the capital A)

顺便说一句,我使用 Cocos 代码 IDE 1.2 将我的 apk 文件与框架 v3.7 和 android-ndk-r10c 和 SDK 打包为 adt-bundle-windows-x86_64-20140702

还有一件事......你必须在你的模拟器中使用 Gapps 安装 Genymotion-ARM-Translation 才能让它工作。

PS:如果您没有找到任何文件,那么您需要重新创建您的项目并将本机代码添加到签入的项目中。

于 2015-09-02T16:49:24.433 回答