Colin-Liao 个人原创,欢迎转载,转载请注明地址。Colin-Liao的专栏地址http://blog.csdn.net/focusdeveloper

之前已经写了如何创建android项目,然后导入到ADT中运行。

现在要将自己的项目运行到android中,总结下遇到的问题。先把所有要用到的头文件原文件都拷贝到proj.adroid/classes文件夹中。然后用终端编译build_native.sh。这里就出问题了:

1. HelloWorldScene.h: No such file or directory. 因为我之前已经把classes文件夹中的删除然后加入了自己的文件,而在jin/hellocpp文件夹中的main.cpp中却包含了

#include "HelloWorldScene.h"这个头文件,把他改为你将运行的第一个场景,也就是appdelegate.cpp中run的第一个场景。我这里改为#include "WaitScene.h"。

2.这里因为我们要编译所有classes中的文件,不可能一个一个去加入原文件。更改jin文件夹下面的android.mk,改为
LOCAL_PATH := $(call my-dir)    include $(CLEAR_VARS)    LOCAL_MODULE := game_shared    LOCAL_MODULE_FILENAME := libgame                       FILE_LIST := hellocpp/main.cpp  FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp) FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.h) LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)  LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes  LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static            include $(BUILD_SHARED_LIBRARY)$(call import-module,CocosDenshion/android) \$(call import-module,cocos2dx) \$(call import-module,extensions)
这里把所有classes中的头文件原文件全部参与编译。改好之后重新编译

3.iconv.h: No such file or directory.这里是找不到icon这个库(这一步比较麻烦)首先去官网http://ftp.gnu.org/pub/gnu/libiconv/下载icovn库.我把他放到了和COCOS2DX_ROOT同一级的目录下。并将其名字改为iconv文件夹。然后在iconv文件夹中新建一个Android.mk文件,内容为:

LOCAL_PATH:= $(call my-dir)#libiconv.soinclude $(CLEAR_VARS)LOCAL_MODULE := libiconvLOCAL_CFLAGS := \  -Wno-multichar \  -DAndroid \  -DLIBDIR="c" \  -DBUILDING_LIBICONV \  -DIN_LIBRARYLOCAL_SRC_FILES := \  libcharset/lib/localcharset.c \  lib/iconv.c \  lib/relocatable.cLOCAL_C_INCLUDES += \  $(LOCAL_PATH)/include \  $(LOCAL_PATH)/libcharset \  $(LOCAL_PATH)/lib \  $(LOCAL_PATH)/libcharset/include \  $(LOCAL_PATH)/srclibinclude $(BUILD_STATIC_LIBRARY)
现在要更改jin下的android.mk文件与问题2中的mk相比
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \LOCAL_C_INCLUDES += \$(LOCAL_PATH) /../../../iconv/include \$(LOCAL_PATH) /../../../iconv/libcharset \$(LOCAL_PATH) /../../../iconv/lib \$(LOCAL_PATH) /../../../iconv/libcharset/include \$(LOCAL_PATH) /../../../iconv/srclib \$(LOCAL_PATH) /../../../iconv  LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static iconv_staticLOCAL_WHOLE_STATIC_LIBRARIES += libiconv            include $(BUILD_SHARED_LIBRARY)$(call import-module,CocosDenshion/android) \$(call import-module,cocos2dx) \$(call import-module,extensions) \$(call import-module,iconv)
完成之后把你的文件中的#include 更改为#include "../../iconv/include/iconv.h"意思就是去包含到iconv.h这个头文件。继续编译。

4.exception handling disabled, use -fexceptions to enable和'...' handler must be the last handler for its try block [-fpermissive]意思是没有开启异常处理。在jin文件下android.mk和Application.mk中分别加入LOCAL_CPPFLAGS += -fexceptions这句话。继续编译。

5.fatal error: curl.h: No such file or directory 这个文件找不到。在iOS工程项目下libs下的cocos2dx文件拷贝到android项目的libs文件夹下(这个文件自由放置,只要代码能够找到)然后在文件中将#include 更改为#include "../proj.android/libs/cocos2dx/platform/third_party/ios/curl/curl.h"。继续编译

6.把项目导入然后运行到手机上之后发现不能联网,但是wifi是打开的。找到android项目上的AndroidManifest.xml文件,然后选中permissions,add一个uses permission,name为android.permission.INTERNET。重新运行能够联网

7.我们的资源文件都是导入到assets这个文件夹下面,而每次编译build_native.sh的时候加入的文件又不见了,这里需要更改build_native.sh文件,将其中

# make sure assets is exist#if [ -d "$APP_ANDROID_ROOT"/assets ]; then#    rm -rf "$APP_ANDROID_ROOT"/assets#fi
这段话注释起来。

8.在android上文件调用是没有问题的,只要把文件放入到了assets文件夹下,同样可以放入多层文件夹,只要调用路径正确。但是像xml.ini这样的文件一定是会出错的。必须先用CCFileUtils::sharedFileUtils()->fullPathForFilename(), 获取正确路径; CCFileUtils::sharedFileUtils()->getFileData(),解压,将文件读出到内存,程序直接处理这个返回值。若用fstream在android中是无法打开 zip文件的。我的实现为

  unsigned long a = 0;    std::string str =  CCFileUtils::sharedFileUtils()->fullPathForFilename(ch);    unsigned char* ch1 = CCFileUtils::sharedFileUtils()->getFileData(str.c_str(), "r", &a);    std::string str1;    char* ch2 = (char*)ch1;    str1.assign(ch2);    std::istringstream fs(str1);    string s;    int horizontal = 0;    while (std::getline(fs, s,'\n'))    {    }
然后这就是在其中遇到的问题,之后还有问题再补充上。

如果想要在android项目下调用CCFileUtils::sharedFileUtils() ->getWritablePath();此路径,那么必须在主线程中调用,在子线程中调用将得不到路径。

cocos2dx的其他跨平台问题可以http://iskyc.com查找。


更多相关文章

  1. Qt平台下OpenCV for Android库的顺序
  2. 剖析andriod联系人
  3. Android加载SVG实现交互式地图绘制
  4. Android(安卓)截图实现(2)
  5. 经典Android试题及答案
  6. Android(安卓)发送HTTP GET POST 请求以及通过 MultipartEntityB
  7. android中apk反编译
  8. Android将多个视频文件拼接为一个文件
  9. [Android] 单独编译生成boot.img时mkbootfs: No such file or di

随机推荐

  1. Android(安卓)用自定义PopupWindow实现自
  2. android aidl详解
  3. [置顶] 推翻自己和过往,重学自定义View
  4. Android之RemoteViews篇下————Remote
  5. android 键盘快捷指令
  6. android弹出框
  7. 安卓(Android)x86 4.4 VMware虚拟机安装
  8. Android(安卓)开发资料总结--依赖注入框
  9. Android原生代码调用H5 Web网页中的Javas
  10. Android(安卓)Animation