hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

Android NDK

本来ならAndroidエミュレータ上でのPDIC miniが動いていないといけない時期だが、ある問題で一週間足踏みしていた。今日やっとPDIC Unicode版の英辞郎119が検索できるようになった。ちょっとうれしいぞ。


今回遭遇した問題とは、
【現象】wcslenがどんなwchar_t文字列に対しても必ず1を返す
【理由】gcc ではwchar_tは4byteで定義されているのに、android NDKでは1バイトとしてライブラリがコンパイルされている。まぎらわしいことに、wchar.h自体は存在しているが、どのwcs*関数も正常に動かないので使ってはいけない。

sys/cdefs.h の該当箇所↓

/* our implementation of wchar_t is only 8-bit - die die non-portable code */
#undef __WCHAR_TYPE__
#define __WCHAR_TYPE__ unsigned char

【対策】wcs*関数を独自に実装する必要がある。

なお、C/C++側からGetStringChars()で取得したJava側のUnicode文字列(jchar)は2バイトなので注意!
sizeof(wchar_t)=4
sizeof(jchar)=2

今全力でAndroidに没入中なので、iPhone版の開発は中断しています。