Cocos2d-x android项目移植——各类bug及常见问题解决方案全集

在学习IOS项目如何移植到Android的项目过程中,相信很多初学者会遇到各种各样的问题。特别是移植从事C++语言编程的。在大家学过java,考试还考的不错。但是说到jni,就直接不知道了。在移植过程中,不断的查阅资料,充实自己。逐渐熟识了jni,ADT,NDK等术语以及它们之间的关系。这些词汇具体含义都能google到。

  1. Cocos2d-x 2.0.4版本的CCBReader代码,在xCode 4.6版本编译后,读取ccbi文件出错。原因是xCode 4.6版本编译使用的ARM指令集,在内存对齐这块有点特殊。解决方法:将readHead(),readFloat()函数中强制转换成float*代码注释掉,使用unsigned char*去保存地址。
    参考帖子:http://www.cocos2d-x.org/boards/6/topics/18183
  2. Cocos2d-x 2.0.4版本的android项目工程搭建后,无法在模拟器中调试。主要原因有两点:
    1.模拟器没有开启使用GPU Emulation。
    2.android版本Cocos2d-x,检查模拟器是否支持OpenGLES 2.0的代码有点问题。
    对应解决方法:
    1.开启GPU Emulation功能,在新的模拟器(我的是基于Android4.2版本的模拟器)中关于GPU的所有设置改为了【Use Host GPU】复选框。旧模拟器的好像在硬件设置里面直接能找到GPU Emulation设置。
    2.在Cocos2dxActivity.java的onCreateView()函数的
    gLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());
    代码之前加入一行新代码
    gLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);
    具体新加的代码什么含义本人不清楚(本人大学一直学的DirectX,没有摸过OpenGL,以后肯定要买点OpenGL的经典原著看看)。
    参考帖子:http://www.cocos2d-x.org/boards/6/topics/12563

  3. 当使用ndk-r8d版本,且使用eclipse编译代码C++代码的时候,可能会报出error: cant run because this: APP_PLATFORM android-9 is larger than android:minSdkVersion 8 in AndroidManifest.xml.其实这只是个NDK的警告,但是eclipse却把它作为error处理。解决方法:在eclipse的项目【C/C++ Builder】中的build命令中追加NDK_NO_WARNINGS=1
    参考帖子:http://quirkygba.blogspot.com/2012/11/two-problems-with-android-ndk-r8c.html

  4. 在使用eclipse的CDT(C++ Development tools)编译时,可能会出现提示please define NDK_ROOT,并且不能运行程序。
    解决方法:右击项目-》【Property】-》【C/C++ Builder】-》【environment]中添加一个环境变量:name:NDK_ROOT,value:你的ndk根路径
    参考帖子:http://www.cnblogs.com/young40/archive/2012/10/19/cocos2d-x-mac-os-x-android-xcode-ios-development-setup.html

  5. 在android的移植中,我们可能会用到jni。那么我们就肯定需要有jni类对应的C/C++头文件,一般使用javah命令可以生成。但是很多简单的教程使用javah命令,根本就不行。今天从网上查资料,一般需要先将android程序编译一遍,这样每个类就有了.class文件,然后我们到工程目录的【bin/classes】目录下,执行下述命令:javah com.example.jni_test.Nadd。我们需要到 bin/classes目录下面,以便javah可以搜索类文件,后面的类名,一定要加上包名。
    参考帖子:http://www.apkstory.com/development/javah-generate-jni-header-file.html
  6. 在android的移植中,如果想在jni对应的C/C++实现函数中打印信息,请不要使用printf,这个根本不管用。一般使用__android_log_print(ANDROID_LOG_DEBUG,“main",“print in android");第二个参数是输出信息的类别标签,第三个参数是要输出的信息。需要包含头文件#include <android/log.h>。
    参考帖子:http://stackoverflow.com/questions/10274920/how-to-get-printf-messgaes-written-in-ndk-application/10275209#10275209

  7. 如要想要在C++中调用Java类方法,那么我们需要做哪些呢?首先就是获得JNIEnv* env,然后通过env获取类id(即jclass类型),然后通过env和类id,可以获取方法id(jmethodID)和字段id(jfieldID)。有了这些,我们就可以调用一般方法(Call*Method)和静态方法(CallStatic*Method),调用一般方法需要传入对象id(即一个jobject对象),调用静态方法需要传入类id(无需对象id)。另外我们获得的这些jmethodID和 jfieldID可能需要调用DeleteLocalRef函数进行销毁。
    参考帖子:http://hubingforever.blog.163.com/blog/static/171040579201221553444677/
  8. 另外推荐一个学习jni的好教程-基于 Android NDK 的学习之旅-----序言
时间: 2024-10-24 05:49:27

Cocos2d-x android项目移植——各类bug及常见问题解决方案全集的相关文章

android项目 移植到J2me

问题描述 最近完成了一个android平台的信息查询系统的项目,这个应用不是太复杂,现在要把它移植到java平台,不知道各位有没有比较好的思路,能够不做大的改动快速实现移植. 解决方案 解决方案二:该回复于2011-10-27 16:53:18被版主删除

java android-eclipse 创建android项目 最后一部create activity 问题

问题描述 eclipse 创建android项目 最后一部create activity 问题 解决方案 不应该啊,好奇怪,在以上两图之间应该还有两个界面,你选择啥了 Blank Activity默认10是可以的,连8也可以,要是不可以,就不该有更低的选择, 因为Blank代表最低要求 估计出bug了,关闭下再试一次.不行的话,不是哪儿配置被动了就是编译器坏掉了 选择更高版本或是换掉它

连接不上服务器-android项目连接服务器连不上。

问题描述 android项目连接服务器连不上. 我的项目连接服务器时,没有报错但就是不能将数据传过去.权限也加了,路径在浏览器上也ok.就是连不上啊.求大神指教. 解决方案 一步步用Log打印看看,到底哪里不对 解决方案二: 你ping一下服务器,看看能访问吗 解决方案三: 你先用浏览器,调试 是否可以发送数据,排除服务器不能接收问题,其次在调试客户端.调试客户端,先做连接测试,其次在发数据,实在不行, 简化排除法,服务器端写最简单接收返回程序,不要加权限等外在因素.如何可以访问,证明是权限之类

移植-关于Android项目工程的问题

问题描述 关于Android项目工程的问题 我在一个项目A内写好了一个二维码扫描的程序, 可惜我在项目B中写好了GPS定位功能, 我不想在项目A重新写一次,有没有什么功能能够将它移植到其中一个项目B 解决方案 在B中引用A项目,或者代码拷贝.也可以直接在windows中把A文件夹里面的内容直接拷贝入B项目.然后修改android配置xml文件即可 解决方案二: 参考http://stackoverflow.com/questions/2721386/android-how-to-share-co

android找不到jar包,androidstudio项目移植到eclipse

问题描述 android找不到jar包,androidstudio项目移植到eclipse import io.codetail.animation.SupportAnimator;import io.codetail.animation.ViewAnimationUtils; 用别人的androidstudio的开源框架的时候,找不到这两个类所在的jar包这两个类是在哪个jar包里? 解决方案 尽量不要用eclipse

android-c++和Android项目转换

问题描述 c++和Android项目转换 将一个c++的项目改成Android项目,难度多大?有可行性吗? 解决方案 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; /** ?*..

【译】将 Android 项目迁移到 Kotlin 语言

本文讲的是[译]将 Android 项目迁移到 Kotlin 语言, 原文地址:Migrating an Android project to Kotlin 原文作者:Ben Weiss 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:wilsonandusa 校对者:phxnirvana, Zhiw 不久前我们开源了 Topeka,一个 Android 小测试程序. 这个程序是用 integration tests 和 unit tests 进行测试

解决方案-请问,自己写的android项目在一些三星华为手机不能运行。

问题描述 请问,自己写的android项目在一些三星华为手机不能运行. 这是个什么样的问题,百度谷歌都没找到相关的解决方案,如何解决 解决方案 要看具体的错误信息呀 不能运行的情况太多了 解决方案二: 挂上eclipse,调试状态下看看报错信息是什么 解决方案三: 我也遇到过,Google原生系统没问题,三星上各种bug各种崩溃 解决方案四: 我也遇到过,Google原生系统没问题,三星上各种bug各种崩溃 解决方案五: 在三星华为的手机上运行,问题确实比在其它手机上运行的问题多,也遇到过好多次

在netbeans生成android项目问题

问题描述 刚刚接触android运行时出现C:Documents and SettingsmyjMy DocumentsNetBeansProjectsAndroidApplication5nbprojectbuild-impl.xml:411: exec returned: 255生成失败(总时间:0 秒) 问题补充:加上 REM Added as bug fix for the ant build echo SKIP check the parameter set args=%params%