Android向けビルド
ONNX RuntimeをAndroid向けにビルドする
Section titled “ONNX RuntimeをAndroid向けにビルドする”以下の手順に従って、ONNX RuntimeをAndroid向けにビルドしてください。
- TOCプレースホルダー
SDKおよびNDKパッケージは、Android Studioまたはsdkmanagerコマンドラインツールを介してインストールできます。
Android Studioは便利ですが、インストールサイズが大きくなります。 コマンドラインツールはサイズが小さく、使用法をスクリプト化できますが、セットアップが少し複雑です。また、Javaランタイム環境が利用可能である必要があります。
通常は、最新の安定したNDKバージョンを使用することをお勧めします。ここからは、使用するバージョンを<NDKバージョン>と呼びます。
リソース:
Android Studio
Section titled “Android Studio”-
Android Studioをインストールします。
-
必要に応じて、追加のSDKプラットフォームをインストールします。
- File->Settings->Appearance & Behavior->System Settings->Android SDKで、現在インストールされているものを確認できます。
- ORTのビルド時に
--android_sdk_pathとして使用する必要があるSDKパスも、この設定ページに記載されています。 - 最新のプラットフォームは以前のAPIレベルをターゲットにできるため、ほとんどの場合、追加のSDKプラットフォームパッケージは不要です。
-
NDKバージョンをインストールします。
- File->Settings->Appearance & Behavior->System Settings->Android SDK
- ‘SDK Tools’タブ
- 特定のバージョンを確認するには、下部にある’Show package details’チェックボックスを選択します。デフォルトでは最新版がインストールされますが、それで問題ありません。
- NDKパスは、表示されているSDKパスの
ndk/<NDKバージョン>サブディレクトリになります。
コマンドラインツールからのsdkmanager
Section titled “コマンドラインツールからのsdkmanager”-
必要に応じてJavaランタイム環境をインストールし、JAVA_HOME環境変数をそれに設定します。
- https://www.java.com/en/download/
- Windowsに関する注意:64ビット版をインストールする必要があります(https://www.java.com/en/download/manual.jsp)。そうしないと、sdkmanagerはx86パッケージしかリストせず、最新のNDKはx64のみです。
-
sdkmanagerが機能するには、特定のディレクトリ構造が必要です。まず、Androidインフラストラクチャのトップレベルディレクトリを作成します。
- この例では、これを
.../Android/と呼びます。
- この例では、これを
-
https://developer.android.com/studio の下部にある’Command line tools only’セクションからコマンドラインツールをダウンロードします。
-
トップレベルディレクトリの下に’cmdline-tools’というディレクトリを作成します。
- これにより
.../Android/cmdline-toolsができます。
- これにより
-
コマンドラインツールのzipファイルから’tools’ディレクトリをこのディレクトリに展開します。
- これにより
.../Android/cmdline-tools/toolsができます。 - Windowsに関する注意:できれば7-zipを使用して展開してください。Windowsに組み込まれているzip展開ツールを使用する場合は、
tools\lib\_からtools\libにjarファイルを移動してディレクトリ構造を修正する必要があります。
- これにより
-
これで、
Android/cmdline-tools/bin/sdkmanager[.bat]を正常に実行できるはずです。- 設定を保存できないというエラーとsdkmanagerのヘルプテキストが表示される場合は、ディレクトリ構造が正しくありません。
- この回答の最後の手順を再確認してください:https://stackoverflow.com/a/61176718
-
.../Android/cmdline-tools/bin/sdkmanager --listを実行して、利用可能なパッケージを確認します。 -
SDKプラットフォームをインストールします。
- 通常は最新版をインストールすれば問題ありません。コードをコンパイルするときにAPIレベルを選択し、最新のプラットフォームは最近の多くのAPIレベルをサポートします。例:
Terminal window sdkmanager --install "platforms;android-29" - これにより、この例では
Androidディレクトリであるトップレベルディレクトリの’platforms’ディレクトリにインストールされます。 - ビルド時に
--android_sdk_pathとして使用するSDKパスは、このトップレベルディレクトリです。
- 通常は最新版をインストールすれば問題ありません。コードをコンパイルするときにAPIレベルを選択し、最新のプラットフォームは最近の多くのAPIレベルをサポートします。例:
-
NDKをインストールします。
sdkmanager --listを実行して、利用可能なNDKバージョンを見つけます。- インストール
- 希望のバージョンをインストールします。例:
sdkmanager --install "ndk;<NDKバージョン>" - このインストールでのNDKパスは、この例では
.../Android/ndk/<NDKバージョン>になります。
- 希望のバージョンをインストールします。例:
Androidビルド手順
Section titled “Androidビルド手順”Windowsでのクロスコンパイル
Section titled “Windowsでのクロスコンパイル”Visual StudioジェネレータはAndroidをサポートしていないため、WindowsでビルドするにはNinjaジェネレータを使用する必要があります。
./build.bat --android --android_sdk_path <Android SDKパス> --android_ndk_path <Android NDKパス> --android_abi <Android ABI、例:arm64-v8a(デフォルト)またはarmeabi-v7a> --android_api <Android APIレベル、例:27(デフォルト)> --cmake_generator Ninja例:この例のパスを使用する場合
./build.bat --android --android_sdk_path .../Android --android_ndk_path .../Android/ndk/<NDKバージョン> --android_abi arm64-v8a --android_api 27 --cmake_generator NinjaLinuxおよびmacOSでのクロスコンパイル
Section titled “LinuxおよびmacOSでのクロスコンパイル”./build.sh --android --android_sdk_path <Android SDKパス> --android_ndk_path <Android NDKパス> --android_abi <Android ABI、例:arm64-v8a(デフォルト)またはarmeabi-v7a> --android_api <Android APIレベル、例:27(デフォルト)>Android Archive(AAR)のビルド
Section titled “Android Archive(AAR)のビルド”Android Studioで直接インポートできるAndroid Archive(AAR)ファイルは、上記のビルドコマンドに--build_javaを追加することで、your_build_dir/java/build/android/outputs/aarに生成されます。
--build_javaを有効にしてWindowsでビルドするには、以下も必要です。
- JAVA_HOMEをJDKインストールのパスに設定します。
- これはAndroid StudioのJDK、またはスタンドアロンのJDKインストールのどちらでもかまいません。
- 例:Powershell:
$env:JAVA_HOME="C:\Program Files\Java\jdk-15"CMD:set JAVA_HOME=C:\Program Files\Java\jdk-15
- 管理者ウィンドウからビルドを実行します。
- Javaビルドにはシンボリックリンクを作成するための権限が必要であり、それには管理者ウィンドウが必要です。
注意:R8最小化Androidアプリビルドを機能させるためのProguardルール
Section titled “注意:R8最小化Androidアプリビルドを機能させるためのProguardルール”R8で最小化されたビルドでライブラリを使用するAndroidコンシューマは、ランタイムクラッシュを避けるために、Androidプロジェクト内のproguard-rules.proファイルに以下の行を追加してパッケージcom.microsoft.onnxruntime:onnxruntime-androidを使用する必要があります。
-keep class ai.onnxruntime.** { *; }*同様の問題への参照:
protobuf GithubプロジェクトおよびR8には、これに関する同様の未解決の問題があります。
Android NNAPI実行プロバイダ
Section titled “Android NNAPI実行プロバイダ”AndroidでNNAPI実行プロバイダを使用したい場合は、NNAPI実行プロバイダを参照してください。
Android NNAPI実行プロバイダは、Androidビルド手順のビルドコマンドに--use_nnapiを追加することでビルドできます。
QNN実行プロバイダ
Section titled “QNN実行プロバイダ”お使いのデバイスにサポートされているQualcomm Snapdragon SOCが搭載されており、AndroidでQNN実行プロバイダを使用したい場合は、QNN実行プロバイダを参照してください。
Qualcomm AI Engine Direct SDKをダウンロードしてインストールします。
QNN実行プロバイダは、Androidビルド手順のビルドコマンドに--use_qnn static_lib --qnn_home [QNN_SDKパス]を追加することでビルドできます。
エミュレータを使用したAndroidの変更のテスト(QNN実行プロバイダには適用されません)
Section titled “エミュレータを使用したAndroidの変更のテスト(QNN実行プロバイダには適用されません)”エミュレータを使用したAndroidの変更のテストを参照してください。
カスタムAndroidパッケージのビルド
Section titled “カスタムAndroidパッケージのビルド”カスタムビルドのドキュメントを参照してください。特に、Androidパッケージに関するセクションをご覧ください。