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 を静的ライブラリとしてビルドした前 […]