NDKには、Android用のライブラリの構築に加えて、他の便利な機能があります。 たとえば、CおよびC ++でモバイルアプリケーションを作成するために使用できます。また、ビルドファイルの自動作成やプロジェクト構造の操作など、多くのユーティリティ機能もサポートしています。
Android用のライブラリを作成するには、多くの方法があります。 たとえば、NDK自動ビルドシステムを使用します。 もう1つのオプションは、Cygwinのクロスコンパイルツールと別のNDKツールセットです。
ここでは、x86プラットフォームをサポートするAndroidのライブラリのリストを見つけることができます。 この記事では、 Eclipse IDEを使用して、FreeTypeライブラリの自動NDKアセンブリを編成する方法を説明します。
プロジェクトのセットアップとライブラリの構築
Eclipseで新しいAndroidアプリケーションプロジェクトを作成し、jniフォルダーを追加します。
新しいAndroidアプリプロジェクトのJniフォルダー
次に、 FreeTypeライブラリのコードを含むアーカイブをダウンロードします。 私たちの場合、これはバージョン2.6です。 アーカイブをjniフォルダーに解凍します。
jniフォルダーのFreeTypeソースコード
次に、Android.mkファイルとApplication.mkファイルをアプリケーションプロジェクトに追加します。 これらのファイルはjniフォルダーに配置する必要があります。 Adroid.mkは、ビルドシステムが処理するGNU makefileです。 このファイルには、アプリケーションのソースコードを含むファイルに関する情報と、プロジェクトのビルドに必要な外部ライブラリに関する情報が含まれています。
ここでは、Android.mkの構文と、CおよびC ++で記述されたAndroidアプリケーションのアセンブリの機能に関する詳細を見つけることができます。 このファイルをjniフォルダーに作成します。これは、サポートされているすべてのフォント形式でFreeTypeライブラリを構築するように設計されています。
Android.mkファイル
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) FREETYPE_SRC_PATH := LOCAL_MODULE := freetype LOCAL_CFLAGS := -DANDROID_NDK \ -DFT2_BUILD_LIBRARY=1 LOCAL_C_INCLUDES := $(LOCAL_PATH)/include_all \ $(FREETYPE_SRC_PATH)include \ $(FREETYPE_SRC_PATH)src LOCAL_SRC_FILES := \ $(FREETYPE_SRC_PATH)src/autofit/autofit.c \ $(FREETYPE_SRC_PATH)src/base/basepic.c \ $(FREETYPE_SRC_PATH)src/base/ftapi.c \ $(FREETYPE_SRC_PATH)src/base/ftbase.c \ $(FREETYPE_SRC_PATH)src/base/ftbbox.c \ $(FREETYPE_SRC_PATH)src/base/ftbitmap.c \ $(FREETYPE_SRC_PATH)src/base/ftdbgmem.c \ $(FREETYPE_SRC_PATH)src/base/ftdebug.c \ $(FREETYPE_SRC_PATH)src/base/ftglyph.c \ $(FREETYPE_SRC_PATH)src/base/ftinit.c \ $(FREETYPE_SRC_PATH)src/base/ftpic.c \ $(FREETYPE_SRC_PATH)src/base/ftstroke.c \ $(FREETYPE_SRC_PATH)src/base/ftsynth.c \ $(FREETYPE_SRC_PATH)src/base/ftsystem.c \ $(FREETYPE_SRC_PATH)src/cff/cff.c \ $(FREETYPE_SRC_PATH)src/pshinter/pshinter.c \ $(FREETYPE_SRC_PATH)src/pshinter/pshglob.c \ $(FREETYPE_SRC_PATH)src/pshinter/pshpic.c \ $(FREETYPE_SRC_PATH)src/pshinter/pshrec.c \ $(FREETYPE_SRC_PATH)src/psnames/psnames.c \ $(FREETYPE_SRC_PATH)src/psnames/pspic.c \ $(FREETYPE_SRC_PATH)src/raster/raster.c \ $(FREETYPE_SRC_PATH)src/raster/rastpic.c \ $(FREETYPE_SRC_PATH)src/sfnt/pngshim.c \ $(FREETYPE_SRC_PATH)src/sfnt/sfntpic.c \ $(FREETYPE_SRC_PATH)src/sfnt/ttbdf.c \ $(FREETYPE_SRC_PATH)src/sfnt/ttkern.c \ $(FREETYPE_SRC_PATH)src/sfnt/ttload.c \ $(FREETYPE_SRC_PATH)src/sfnt/ttmtx.c \ $(FREETYPE_SRC_PATH)src/sfnt/ttpost.c \ $(FREETYPE_SRC_PATH)src/sfnt/ttsbit.c \ $(FREETYPE_SRC_PATH)src/sfnt/sfobjs.c \ $(FREETYPE_SRC_PATH)src/sfnt/ttcmap.c \ $(FREETYPE_SRC_PATH)src/sfnt/sfdriver.c \ $(FREETYPE_SRC_PATH)src/smooth/smooth.c \ $(FREETYPE_SRC_PATH)src/smooth/ftspic.c \ $(FREETYPE_SRC_PATH)src/truetype/truetype.c \ $(FREETYPE_SRC_PATH)src/type1/t1driver.c \ $(FREETYPE_SRC_PATH)src/cid/cidgload.c \ $(FREETYPE_SRC_PATH)src/cid/cidload.c \ $(FREETYPE_SRC_PATH)src/cid/cidobjs.c \ $(FREETYPE_SRC_PATH)src/cid/cidparse.c \ $(FREETYPE_SRC_PATH)src/cid/cidriver.c \ $(FREETYPE_SRC_PATH)src/pfr/pfr.c \ $(FREETYPE_SRC_PATH)src/pfr/pfrgload.c \ $(FREETYPE_SRC_PATH)src/pfr/pfrload.c \ $(FREETYPE_SRC_PATH)src/pfr/pfrobjs.c \ $(FREETYPE_SRC_PATH)src/pfr/pfrsbit.c \ $(FREETYPE_SRC_PATH)src/type42/t42objs.c \ $(FREETYPE_SRC_PATH)src/type42/t42parse.c \ $(FREETYPE_SRC_PATH)src/type42/type42.c \ $(FREETYPE_SRC_PATH)src/winfonts/winfnt.c \ $(FREETYPE_SRC_PATH)src/pcf/pcfread.c \ $(FREETYPE_SRC_PATH)src/pcf/pcfutil.c \ $(FREETYPE_SRC_PATH)src/pcf/pcfdrivr.c \ $(FREETYPE_SRC_PATH)src/psaux/afmparse.c \ $(FREETYPE_SRC_PATH)src/psaux/psaux.c \ $(FREETYPE_SRC_PATH)src/psaux/psconv.c \ $(FREETYPE_SRC_PATH)src/psaux/psobjs.c \ $(FREETYPE_SRC_PATH)src/psaux/t1decode.c \ $(FREETYPE_SRC_PATH)src/tools/apinames.c \ $(FREETYPE_SRC_PATH)src/type1/t1afm.c \ $(FREETYPE_SRC_PATH)src/type1/t1gload.c \ $(FREETYPE_SRC_PATH)src/type1/t1load.c \ $(FREETYPE_SRC_PATH)src/type1/t1objs.c \ $(FREETYPE_SRC_PATH)src/type1/t1parse.c\ $(FREETYPE_SRC_PATH)src/bdf/bdfdrivr.c\ $(FREETYPE_SRC_PATH)src/bdf/bdflib.c\ $(FREETYPE_SRC_PATH)src/gzip/ftgzip.c\ $(FREETYPE_SRC_PATH)src/lzw/ftlzw.c \ LOCAL_LDLIBS := -ldl -llog include $(BUILD_SHARED_LIBRARY)
デフォルトでは、NDKビルドシステムはarmeabiアーキテクチャのマシンコードを生成します。 Intelアーキテクチャのサポートを追加するには、同じjniフォルダーにあるApplication.mkファイルを構成する必要があります。 つまり、変数APP_ABIに「x86」を追加します。 組み立ては複数のプラットフォームで同時に実行でき、それらの識別子はスペースで示されます。
2つのターゲットアーキテクチャ用に構成されたAPP_ABI変数は次のとおりです。
APP_ABI := armeabi-v7a x86 # : x86_64, armeabi, arm64-v8a, mips, mips64
利用可能なすべての命令セットのマシンコードを生成するには、次の設定を使用できます。
APP_ABI := all # all32 all64
変数APP_PLATFORMには、ターゲットAndroidプラットフォームの名前が含まれています。 Application.mkは非常にシンプルであることがわかりました。
APP_ABI :=all APP_PLATFORM := android-20
コードエディタでは次のようになります。
Application.mkファイルでのAPP_ABIの構成
準備が完了しました。NDKを使用してプロジェクトの自動アセンブリを構成します。 これを行うには、まずプロジェクトのビルダーのリストを構成し、次にライブラリを準備するときに使用する必要がある特定のコレクターを選択します。
これを行うには、Androidプロジェクトを右クリックして、メニューから[プロパティ]を選択します。 リストに新しいビルドシステムを追加するには、表示されるウィンドウの左側の[ビルダー]タブに移動し、右側の[新規]ボタンをクリックする必要があります。
プロジェクトのプロパティ
構成タイプ選択ウィンドウのリストから、「プログラム」を選択します。 このオプションを使用すると、外部ツールの場所と、アセンブリを実行するスクリプトの実行方法を正確に指定できます。
構成設定
表示されるウィンドウで、次のフィールドを構成します。
- 名前:新しいコレクターの名前
- 場所:ndk-build.cmdへのパス
- 作業ディレクトリ:プロジェクトフォルダーへのパス
NDKを構成する
上記の設定が完了したら、プロジェクトのアセンブリを実行します。 このプロセスが成功すると、/ lib / <APP_ABI>スキームに従って名前が作成されたフォルダーで、Application.mkで指定されたプラットフォームのライブラリアセンブリを見つけることができます。 特に、x86およびx86_64フォルダーに関心があります。
x86ベースのAndroidデバイス用のLibfreetype.soファイル
まとめ
FreeTypeライブラリがコンパイルされ、独自のAndroidアプリケーションで使用できるようになりました。