Macでiconvを使わないlibxmlをNDKでビルドする
Android NDK で iconv を含まない libxml を自前でビルドしたときのログです。
検索してもあまり情報が出てこなかったので、まとめておきます。
[環境]
・Mac OS X 10.10.4 Yosemite
・Android NDK r10e
・libxml2-2.9.1
1. ndk-build の設定
libxml2-2.9.1 フォルダ直下に “jni" フォルダを追加します。
2. Android.mk および Application.mk の追加
作成した “jni" フォルダ内に、Android.mk および Application.mk を作成します。
それぞれ、中身は以下のようにしました。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
    ../buf.c \
    ../SAX.c \
    ../entities.c \
    ../encoding.c \
    ../error.c \
    ../parserInternals.c \
    ../parser.c \
    ../tree.c \
    ../hash.c \
    ../list.c \
    ../xmlIO.c \
    ../xmlmemory.c \
    ../uri.c \
    ../valid.c \
    ../xlink.c \
    ../HTMLparser.c \
    ../HTMLtree.c \
    ../debugXML.c \
    ../xpath.c \
    ../xpointer.c \
    ../xinclude.c \
    ../nanohttp.c \
    ../nanoftp.c \
    ../DOCBparser.c \
    ../catalog.c \
    ../globals.c \
    ../threads.c \
    ../c14n.c \
    ../xmlstring.c \
    ../xmlregexp.c \
    ../xmlschemas.c \
    ../xmlschemastypes.c \
    ../xmlunicode.c \
    ../xmlreader.c \
    ../relaxng.c \
    ../dict.c \
    ../SAX2.c \
    ../legacy.c \
    ../chvalid.c \
    ../pattern.c \
    ../xmlsave.c \
    ../xmlmodule.c \
    ../xmlwriter.c \
    ../schematron.c\
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../include
LOCAL_MODULE:= libxml
include $(BUILD_STATIC_LIBRARY)
APP_MODULES := libxml APP_ABI := all
3. libxml のビルド設定
Andrdoid の場合、ビルド設定ファイルを作成します。
libxml2-2.9.1/include/libxml/ にある “xmlversion.h.in" のコピーを作成します。
コピーしたファイルのファイル名を “xmlversion.h" に変更します。
xmlversion.h は、各種機能の設定フラグになっているので、このファイル内の宣言を変更することで libxml の機能を選択できます。
設定を書き込む必要がある箇所は “@" で囲まれた文字列になっています。
ほぼすべて変更しないとビルドエラーになるので、手間ですがひとつずつ修正します。
xmlversion.h は行数が多いので、以下に設定した内容を記載します。
0 で無効, 1 で有効になります。左の数字は xmlversion.h 内での行番号です。
iconv を外したいので、@WITH_ICONV@ の部分を “0" に設定します。
その他は適当、ヘッダとの関連を調べてみましたが、よくわかりません。
| 行番号 | 変更箇所 | 変更後 | 
|---|---|---|
| 32 | @VERSION@ | 2.9.1 | 
| 39 | @LIBXML_VERSION_NUMBER@ | 20901 | 
| 46 | @LIBXML_VERSION_NUMBER@ | 20901 | 
| 53 | @LIBXML_VERSION_EXTRA@ | そのまま | 
| 61 | @LIBXML_VERSION_NUMBER@ | 20901 | 
| 64 | @WITH_TRIO@ | 0 | 
| 93 | @WITH_THREADS@ | 0 | 
| 105 | @WITH_THREAD_ALLOC@ | 0 | 
| 114 | @WITH_TREE@ | 1 | 
| 123 | @WITH_OUTPUT@ | 1 | 
| 132 | @WITH_PUSH@ | 1 | 
| 141 | @WITH_READER@ | 1 | 
| 150 | @WITH_PATTERN@ | 0 | 
| 159 | @WITH_WRITER@ | 1 | 
| 168 | @WITH_SAX1@ | 1 | 
| 177 | @WITH_FTP@ | 0 | 
| 186 | @WITH_HTTP@ | 0 | 
| 195 | @WITH_VALID@ | 0 | 
| 204 | @WITH_HTML@ | 1 | 
| 213 | @WITH_LEGACY@ | 0 | 
| 222 | @WITH_C14N@ | 0 | 
| 231 | @WITH_CATALOG@ | 0 | 
| 240 | @WITH_DOCB@ | 0 | 
| 249 | @WITH_XPATH@ | 1 | 
| 258 | @WITH_XPTR@ | 1 | 
| 267 | @WITH_XINCLUDE@ | 0 | 
| 276 | @WITH_ICONV@ | 0 | 
| 285 | @WITH_ICU@ | 0 | 
| 294 | @WITH_ISO8859X@ | 1 | 
| 303 | @WITH_DEBUG@ | 0 | 
| 312 | @WITH_MEM_DEBUG@ | 0 | 
| 321 | @WITH_RUN_DEBUG@ | 0 | 
| 330 | @WITH_REGEXPS@ | 0 | 
| 339 | @WITH_REGEXPS@ | 0 | 
| 348 | @WITH_REGEXPS@ | 1 | 
| 357 | @WITH_SCHEMAS@ | 0 | 
| 366 | @WITH_SCHEMAS@ | 0 | 
| 375 | @WITH_SCHEMATRON@ | 0 | 
| 384 | @WITH_MODULES@ | 1 | 
| 399 | @WITH_ZLIB@ | 0 | 
| 408 | @WITH_LZMA@ | 0 | 
4. ndk-build
ターミナルで libxml2-2.9.1 直下のディレクトリに移動して、ndk-build を行います。
ファイルは、libxm2-2.9.1/obj/local/ 以下に Application.mk で指定したアーキテクチャごとに出力されます。 
おしまい。


ディスカッション
ピンバック & トラックバック一覧
[…] 以前ビルドした ndk-build 版 libxml ですが、ndk-build するプロジェクト内で読み込む場合の Android.mk の書き方について、まとめておきます。 以降、libxml を静的ライブラリとしてビルドした前 […]