當(dāng)我寫這篇文章的時(shí)候我是懷著激動(dòng)的心情的,因?yàn)槲矣纸鉀Q了一個(gè)技術(shù)問題。你可能對(duì)題目還一知半解,這是什么意思,
我之所以要寫這篇文章就是要解決當(dāng)我們?cè)赾ocos2dx中使用了第三方庫的時(shí)候,移植到android平臺(tái)的過程中是會(huì)報(bào)錯(cuò)的問題,典型的例子就是我在上幾篇博客中使用了編碼轉(zhuǎn)換的庫iconv,在我移植到android平臺(tái)測(cè)試的時(shí)候就出現(xiàn)了錯(cuò)誤,各種各樣的錯(cuò)誤,網(wǎng)上搜了一下,
但是網(wǎng)上的方法感覺都很老了,有的也沒說明白,今天通過摸索馬上分享給大家,讓大家也少走歪路。如 果你還不會(huì)移植android平臺(tái),請(qǐng)先看我上一篇的博客,先換個(gè)其他的不包含iconv庫的工程,移植成功了再來做今天的事情。今天我們不需要準(zhǔn)備任何 工具,需要做的就是理解.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平臺(tái)的話就用引擎里邊的第三方庫,這個(gè)iconv庫所在的路徑是:
E:\cocos2d-x-2.2\cocos2d-x-2.2\cocos2dx\platform\third_party\win32\iconv。但如果是移植到android平臺(tái)的你需要加上你android平臺(tái)的庫的路徑,也就是說你需要先
下載好iconv的庫,放到一個(gè)你的路徑,這里我放到的是我引擎的根目錄下,所以寫的就是上邊的代碼,大家下去下載這個(gè)庫,然后按我說的改了代碼。然后我們就來看看這個(gè).mk文件改怎么改,我們要修改的是jni目錄下的.mk文件,我先截上幾張圖片,說說里邊代碼的含義。

上邊的這張圖片網(wǎng)上有不少的教程都說需要修改,但在我看來根本不是,因?yàn)楫?dāng)我在這里加了iconv.h的路徑以后編譯的時(shí)候任然報(bào)錯(cuò),說找不到iconv.h這個(gè)文件。所以以后大家也不要改這里,沒用的。


上 邊的第一張圖片看到了劃線的地方了嗎?這個(gè)是我加上去的,你需要改嗎?答案是需要的,但是名字可以和我不一樣,那名字改成什么樣的呢,這得看另一個(gè)文件 了,我們等等再說。上面的第二張圖片那個(gè)劃線的地方也是我加上去的,你也需要修改,改成什么也需要看另一個(gè)文件。好了現(xiàn)在我們就來說到底看哪個(gè)文件。
這個(gè)文件就是你下載的iconv庫的根目錄下的Android.mk文件,我再來截張圖。

這個(gè)是文件中的倆句話,你要和上邊我說的改的那倆個(gè)地方對(duì)照起來改。好了其實(shí)就是這么簡(jiǎn)單,
Android.mk文件只需要對(duì)照的改上倆個(gè)地方就可以了,程序中的那個(gè)頭文件包含也要修改。現(xiàn)在我們就來導(dǎo)入到工程中構(gòu)建一下工程吧。在構(gòu)建的時(shí)候也會(huì)出現(xiàn)一個(gè)問題,我想這個(gè)問題的原因可能是因?yàn)閕conv庫里邊實(shí)現(xiàn)的函數(shù)不一樣吧,出現(xiàn)的錯(cuò)誤的語句是這句:
1 | -1 == iconv(iconvH, pin, &strLength, &outbuf, &outLength)
|
我們需要做如下的修改,就是在pin的前邊加個(gè)強(qiáng)轉(zhuǎn),因?yàn)锳ndroid下函數(shù)需要傳入的參數(shù)是char**,而我們程序中的pin是const char **類型的。
1 | -1 == iconv(iconvH, (char **)pin, &strLength, &outbuf, &outLength)
|
有了以上的這些操作問題就解決了,這里提醒一下大家,在eclipse中構(gòu)建工程的時(shí)候如果可以編譯通過了,但是工程中有錯(cuò)誤提示(其實(shí)是沒有錯(cuò)誤的,也不知道這個(gè)eclipse是怎么回事),大家就重新導(dǎo)入工程一遍,問題就解決了,還有什么問題就給我留言吧。
本帖有小塔原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處!