cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题

cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题

http://www.cocoachina.com/bbs/read.php?tid=195310
当我写这篇文章的时候我是怀着激动的心情的,因为我又解决了一个技术问题。你可能对题目还一知半解,这是什么意思, 我之所以要写这篇文章就是要解决当我们在cocos2dx中使用了第三方库的时候,移植到android平台的过程中是会报错的问题,典型的例子就是我在上几篇博客中使用了编码转换的库iconv,在我移植到android平台测试的时候就出现了错误,各种各样的错误,网上搜了一下, 但是网上的方法感觉都很老了,有的也没说明白,今天通过摸索马上分享给大家,让大家也少走歪路。


如 果你还不会移植android平台,请先看我上一篇的博客,先换个其他的不包含iconv库的工程,移植成功了再来做今天的事情。今天我们不需要准备任何 工具,需要做的就是理解.mk文件的含义,知道怎么改。我们先来看一下我字体和字符编码这篇博客GBKToUTF8的头文件是怎么包含iconv库的。


?
1
2
3
4
5
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#include "iconv\iconv.h"
#else
#include "../../../../libiconv/include/iconv.h"
#endif


如果是win32平台的话就用引擎里边的第三方库,这个iconv库所在的路径是:
E:\cocos2d-x-2.2\cocos2d-x-2.2\cocos2dx\platform\third_party\win32\iconv。但如果是移植到android平台的你需要加上你android平台的库的路径,也就是说你需要先 下载好iconv的库,放到一个你的路径,这里我放到的是我引擎的根目录下,所以写的就是上边的代码,大家下去下载这个库,然后按我说的改了代码。然后我们就来看看这个.mk文件改怎么改,我们要修改的是jni目录下的.mk文件,我先截上几张图片,说说里边代码的含义。

上边的这张图片网上有不少的教程都说需要修改,但在我看来根本不是,因为当我在这里加了iconv.h的路径以后编译的时候任然报错,说找不到iconv.h这个文件。所以以后大家也不要改这里,没用的。
cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题_第1张图片
cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题_第2张图片
上 边的第一张图片看到了划线的地方了吗?这个是我加上去的,你需要改吗?答案是需要的,但是名字可以和我不一样,那名字改成什么样的呢,这得看另一个文件 了,我们等等再说。上面的第二张图片那个划线的地方也是我加上去的,你也需要修改,改成什么也需要看另一个文件。好了现在我们就来说到底看哪个文件。 这个文件就是你下载的iconv库的根目录下的Android.mk文件,我再来截张图。
cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题_第3张图片
这个是文件中的俩句话,你要和上边我说的改的那俩个地方对照起来改。好了其实就是这么简单, Android.mk文件只需要对照的改上俩个地方就可以了,程序中的那个头文件包含也要修改。现在我们就来导入到工程中构建一下工程吧。在构建的时候也会出现一个问题,我想这个问题的原因可能是因为iconv库里边实现的函数不一样吧,出现的错误的语句是这句:
?
1
-1 == iconv(iconvH, pin, &strLength, &outbuf, &outLength)

我们需要做如下的修改,就是在pin的前边加个强转,因为Android下函数需要传入的参数是char**,而我们程序中的pin是const char **类型的。


?
1
-1 == iconv(iconvH, ( char **)pin, &strLength, &outbuf, &outLength)

有了以上的这些操作问题就解决了,这里提醒一下大家,在eclipse中构建工程的时候如果可以编译通过了,但是工程中有错误提示(其实是没有错误的,也不知道这个eclipse是怎么回事),大家就重新导入工程一遍,问题就解决了,还有什么问题就给我留言吧。
本帖有小塔原创,转载请注明出处!

android 下添加iconv支持

NDK自带的iconv的 查看 android-ndk-r9d/sources/android/support/include/iconv.h

在Android.mk中加入
LOCAL_WHOLE_STATIC_LIBRARIES += android_support

$(call import-module,android/support)


如:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := mylib.cpp

LOCAL_WHOLE_STATIC_LIBRARIES += android_support
LOCAL_CXXFLAGS += -std=c++11 -fexceptions


include $(BUILD_SHARED_LIBRARY)
$(call import-module, android/support)

你可能感兴趣的:(cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题)