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