Android用に ICUを Windowsで作成しています。
unicode support in android ndk Androidでglibc(6) ICU を参考にしてみました。
必要なもの
- ICUのソース(今回は 4.8を使います)
- Android NDK (NDKはr5を使います)
- cygwin
手順
AndroidNDKのインストール先を C:\android-ndk-r5 とします。
- C:\android-ndk-r5\toolchains\arm-eabi-4.4.0\prebuilt\windows\binにパスを張ります。
- Cygwin用のビルドディレクトリを作成します。
-
Cygwin用にICUをビルドします。
>sh (ICUのディレクトリ)/source/runConfigureICU Cygwin
> make
でオーケー - Android用のビルドディレクトリを作成します。
-
環境変数の設定をします
CPP=/cygdrive/c/android-ndk-r5/toolchains/arm-eabi-4.4.0/prebuilt/windows/bin/arm-eabi-cpp.exe
CPPFLAGS=-Ic:/android-ndk-r5/platforms/android-8/arch-arm/usr/include/ -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -D__STDC_INT64__
CFLAGS=-O3 -fno-short-wchar -fno-short-enums -nostdlib
CXXFLAGS=-Ic:/android-ndk-r5/sources/cxx-stl/gnu-libstdc++/include -Ic:/android-ndk-r5/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include
-
Android用のディレクトリで (ICUのディレクトリ)/source/configure を実行します。その時、以下のオプションを指定します。
--enable-extras=no --enable-strict=no --enable-static --enable-shared=no --enable-tests=no --enable-samples=no --enable-dyload=no --enable-tools=no --host=arm-eabi --with-data-packaging=archive --with-cross-build=(2.で作成したCygwin用のディレクトリ) - makeします。
-
「ucln_in.d:1: *** multiple target patterns. Stop.」というエラーが出た場合は以下のコマンドを cygwinで実行します。
for v in *.d
do
awk -f /cygdrive/c/android-ndk-r5/build/awk/convert-deps-to-cygwin.awk $v > $v.new
mv $v.new $v
done -
c:/android-ndk-r5/platforms/android-8/arch-arm/usr/include/にある util.hは (ICU)/source/common/util.hとバッティングするので名前を変更する。

