eclipse+ADT使用第三方静态库及COCOS2d问题汇总

最近在搞安卓下的音视频通讯聊天,模块工程均完成后,需要由cocos搭起可执行程序的框架,在使用cocos及第三方静态库的过程中遇到了一些问题,由于自己是首次接触COCOS,再加上COCOS自身的问题,搞了整整一天,也终于算是搞透了;

环境:eclipse+ADT、cocos2d-x-3.5

   一、cocos新工程的生成:   

进入E:\OpenSource\cocos2d-x-3.5\tools\cocos2d-console\bin

按住shift键,右键空白处,打开命令窗口

使用命令cocos new创建,如:
   cocos new -p
com.example.mediagame -l cpp -d E:/CodeSpace/AVMeidaGame ProjectName

注:如果提示cocos 命令不存在,请先运行根目录下的setup.py文件(首先需要先按住        python.exe)或者直接打开此文件,一次添加相应的环境变量,然后重启explorer进程使环境变量生效即可。

   二、加载静态库

加载静态库(C++,接口类),该静态库也是基于cocos进行开发的,最终生成一个.a文件,过程不再累述,本人首先使用的如下参数(Android.mk):

LOCAL_SRC_FILES:= $(LOCAL_PATH)\libs\libClientPublic.a

LOCAL_STATIC_LIBRARIES := cocos2dx_static

LOCAL_WHOLE_STATIC_LIBRARIES := ClientPublic

在APP类代码中继承静态库中的一个父类,在ndk编译过程中报该父类的成员函数没有实现,问题很明显是该静态库没有正确加载成功所致,经查使用如下方式即可:

在include $(CLEAR_VARS)之前,加入如下命令,生成临时静态库

LOCAL_MODULE:= ClientPublic_static

LOCAL_MODULE_FILENAME := libClientPublic_static

LOCAL_SRC_FILES:=$(LOCAL_PATH)\libs\libClientPublic.a

include $(PREBUILT_STATIC_LIBRARY)

然后在下面适当位置加入加载此临时静态库即可

LOCAL_WHOLE_STATIC_LIBRARIES += ClientPublic_static

这时编译便OK了。

三、eclipse调试运行崩溃

在调试运行过程中出现莫名的崩溃问题,cocos的代码本人只是让APP类继承了静态库中的一个父类,完全没有理由会崩溃的呀,刚开始也是由于没有怀疑cocos自己生成的代码,所以也是浪费了大量的时间啊,最后通过adb抓取crash日志看到了程序崩溃点在Cocos生成的代码HelloWorldScene.cpp文件中使用了已经废弃的接口getContentSize(),调试发现该接口返回的值为无效值,导致在程序布局时为止无效,程序崩溃。

label->setPosition(Vec2(origin.x + visibleSize.width/2,

origin.y + visibleSize.height - label->getContentSize().height));

这里的代码大家自行修改掉即可。这个接口还真是坑人啊!

下面贴出adb抓入crash日志,并通过ndk-stack查看崩溃点的方法:

1,启动adb(D:\adt-bundle-windows\sdk\platform-tools),输入 adb logcat >d:\crash.log

2,启动通过eclipse启动apk,崩溃后在adb启动的cmd中按 ctrl+c,停止输出

3,启动ndk-stack (路径 D:\android-ndk-r9d)

命令格式为: ndk-stack -dmup d:\crash.log -sym obj文件路径

obj文件路径 为COCOS自建工程目录下的proj.android\obj\local\armeabi或者armeabi-v7a

ndk-stack输出建议输出至文本文件,这样看起来比在cmd中看起来方便

命令格式为: ndk-stack -dmup d:\crash.log -sym obj文件路径 >d:\crash_debug.log

时间: 2024-08-27 16:03:57

eclipse+ADT使用第三方静态库及COCOS2d问题汇总的相关文章

Firemonkey使用iOS的第三方静态库(Link Binary With Libraries)

最近需要从内存流中直接播放音频,想到了使用第三方音频播放库bass.在windows上可以很方便的使用相应动态库(具体参考万一的博客),但在iOS上却没有相应的使用介绍,准确的说是没有用于Firemonkey上的示例.在它官方论坛找到一个用于OSX的Demo,通过分析和测试,研究出了Firemonkey在iOS开发上使用第三方静态库的流程和方法. 下面以在Delphi XE10上使用bass的静态库libbass.a为例. 1.获取要使用的静态库libbass.a文件,将libbass.a文件放

Android导入第三方静态库.a编译成动态库.so

http://ikinglai.blog.51cto.com/6220785/1324985 在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库.如果有源码的话,可以直接跟你自己的代码一去编译成动态库so,但是如果没有源码的话,你就必须在自己的动态库so里面将别人生成好的静态库导入进来一起编译了.我在编译的时候遇到了不少问题,我觉得有必要进行总结一下. 下面我以一个简单的实际例子来讲解如何在动态库中导入静态库. 静态库中的源代码有两个文件:static.h, static.

Android Studio 打包AAR和第三方静态库

需求 现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库. 方案 创建Android Studio Library  Project 创建Project时,记得添加"Include C++ Support",如果没有安装CMake,LLDB和NDK的话,记得安装一下. 项目创建好后,包括以下目录和文件(部分目录或文件是后面添加的): build.gradle配置 针对

项目中遇到的问题-2:编译第三方静态库报错、查看静态库的类型、绘制圆形

这一周比较折腾,由于项目应用涉及到和其他产品线APP的互相通信,在高层领导英(yi)明(ta)神(hu)武(tu)的战略指导下,我开始了与其他组同事的联调之旅.这几天鄙司负责产品的上级同事莅临监工,对现在的情况又提出了一些改进,作为一名程序猿,我已经奉上我的双膝... 一.集成公司其他组的.a静态库,报错:duplicate symbole for architectecture i386 XXX  查了一下报错的地方,都是指示.a的库和工程里面某些.m文件冲突,正好同事提到之前有碰到过这种情况

Xcode6 引入第三方静态库project的方法

首先.介绍一下把在当前project中引入其它依赖project的方法: 第一:把其它项目project加入到现有project做法: 定义: FPro 现有project == 父project CPro 其它project == 子project 1 准备好CPro为静态连接库.单独编译时,可以通过: 2 拖动CPro 到 FPRo中, 3 在FPRo的Build Parse中的Target decpendency中加入静态CPRo的连接库依赖: 4 在FPRo的Build Parse中的L

Xcode6 引入第三方静态库工程的方法

首先,介绍一下把在当前工程中引入其他依赖工程的方法: 第一:把其他项目工程添加到现有工程做法: 定义: FPro 现有工程 == 父工程 CPro 其他工程 == 子工程 1 准备好CPro为静态连接库,单独编译时,能够通过: 2 拖动CPro 到 FPRo中, 3 在FPRo的Build Parse中的Target decpendency中添加静态CPRo的连接库依赖: 4 在FPRo的Build Parse中的Link Binary ...中添加静态CPRo的连接库: 5 在在FPRo的Bu

android开发 NDK 编译和使用静态库、动态库 (转)

在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件 Android.mk文件: Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk. Application.mk文件: 定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库).APP_PLATFORM := android-9(使用

android开发 NDK 编译和使用静态库、动态库

在eclipse工程目录下建立一个jni的文件夹. 在jni文件夹中建立Android.mk和Application.mk文件. Android.mk文件: Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk. Application.mk文件: 定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库).APP_PLATFORM := android-9(

解决遇到动态库链接静态库

场景: 二进制Link-->动态库-->第三方静态库 Linux环境中需要动态库链接第三方的静态库 错误: /usr/bin/ld: ../../3rdpart/x64/muduo/lib/libbase.a(AsyncLogging.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC ../../3rdpart/x64/mu