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

简介: 在学习IOS项目如何移植到Android的项目过程中,相信很多初学者会遇到各种各样的问题。特别是移植从事C++语言编程的。在大家学过java,考试还考的不错。

在学习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 的学习之旅-----序言
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
109 1
|
1月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
97 2
|
13天前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
41 6
|
23天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
41 2
|
1月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
4天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
6天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
8天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
6天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!
|
7天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
19 2