コンテンツにスキップ

Android向けビルド

ONNX RuntimeをAndroid向けにビルドする

Section titled “ONNX RuntimeをAndroid向けにビルドする”

以下の手順に従って、ONNX RuntimeをAndroid向けにビルドしてください。

  • TOCプレースホルダー

SDKおよびNDKパッケージは、Android Studioまたはsdkmanagerコマンドラインツールを介してインストールできます。

Android Studioは便利ですが、インストールサイズが大きくなります。 コマンドラインツールはサイズが小さく、使用法をスクリプト化できますが、セットアップが少し複雑です。また、Javaランタイム環境が利用可能である必要があります。

通常は、最新の安定したNDKバージョンを使用することをお勧めします。ここからは、使用するバージョンを<NDKバージョン>と呼びます。

リソース:

  1. Android Studioをインストールします。

  2. 必要に応じて、追加のSDKプラットフォームをインストールします。

    • File->Settings->Appearance & Behavior->System Settings->Android SDKで、現在インストールされているものを確認できます。
    • ORTのビルド時に--android_sdk_pathとして使用する必要があるSDKパスも、この設定ページに記載されています。
    • 最新のプラットフォームは以前のAPIレベルをターゲットにできるため、ほとんどの場合、追加のSDKプラットフォームパッケージは不要です。
  3. 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環境変数をそれに設定します。

  • sdkmanagerが機能するには、特定のディレクトリ構造が必要です。まず、Androidインフラストラクチャのトップレベルディレクトリを作成します。

    • この例では、これを.../Android/と呼びます。
  • https://developer.android.com/studio の下部にある’Command line tools only’セクションからコマンドラインツールをダウンロードします。

  • トップレベルディレクトリの下に’cmdline-tools’というディレクトリを作成します。

    • これにより.../Android/cmdline-toolsができます。
  • コマンドラインツールのzipファイルから’tools’ディレクトリをこのディレクトリに展開します。

  • これで、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パスは、このトップレベルディレクトリです。
  • NDKをインストールします。

    • sdkmanager --listを実行して、利用可能なNDKバージョンを見つけます。
    • インストール
      • 希望のバージョンをインストールします。例:sdkmanager --install "ndk;<NDKバージョン>"
      • このインストールでのNDKパスは、この例では.../Android/ndk/<NDKバージョン>になります。

Visual StudioジェネレータはAndroidをサポートしていないため、WindowsでビルドするにはNinjaジェネレータを使用する必要があります。

Terminal window
./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 Ninja

LinuxおよびmacOSでのクロスコンパイル

Section titled “LinuxおよびmacOSでのクロスコンパイル”
Terminal window
./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 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実行プロバイダを使用したい場合は、NNAPI実行プロバイダを参照してください。

Android NNAPI実行プロバイダは、Androidビルド手順のビルドコマンドに--use_nnapiを追加することでビルドできます。

お使いのデバイスにサポートされている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パッケージに関するセクションをご覧ください。