Kanzi Android framework (droidfw) でプラグインを使用する

Kanzi Engine Java プラグインの使用

Kanzi Engine Java プラグインの作成について学ぶには、Kanzi Engine Java プラグインの作成 を参照してください。

Androidアプリケーションでプラグインを使用するには、次のいずれかを行います。

  • アクティビティの初期化中にプラグインをロードします。

    @Override
    protected void onCreate(Bundle icicle)
    {
        ...
    
        KanziRuntime.Reference runtimeRef = KanziRuntime.acquire(this);
        runtimeRef.get().getDomain().registerPlugin(new MyPlugin());
    
        ...
    }
    
    override fun onCreate(icicle: Bundle) {
        ...
    
        val runtimeRef = KanziRuntime.acquire(this)
        runtimeRef.get().domain.registerPlugin(new MyPlugin());
    
        ...
    }
    
  • アプリケーションがプラグインを使用する Kanzi ビューをアタッチするときに、プラグインをロードします。

    view.addListener(new KanziViewListener() {
       ...
    
       @Override
       public void onAttachedToWindow(View view, Domain domain)
       {
             domain.registerPlugin(new MyPlugin());
    
             ...
       }
       ...
    }
    
    view.addListener(object : KanziViewListener {
       ...
    
       override fun onAttachedToWindow(view: View, domain: Domain) {
             domain.registerPlugin(MyPlugin())
    
             ...
       }
       ...
    }
    

Kanzi Studio で生成されたプラグインを使用する

Kanzi Studio は、コードビハインドなどのいくつかの機能のためにプラグインを自動生成し、これらのプラグインの登録を KanziGenerated.java ファイルに追加します。

これらのプラグインを使用するには、アクティビティの初期化時や Kanzi ビューのアタッチ時に、KanziGenerated.registerPlugins(domain) を呼び出します。これは、Kanzi Engine Java プラグインの使用 で個々のプラグインを登録するのと似ています。

Kanzi Engine C++ プラグインの使用

Kanzi Engine C++ プラグインを使用するには、

  1. Kanzi Engine プラグインをエクスポートします。

    1. Kanzi Studio で、プラグインコードを含むプロジェクトを開きます。

      例:

      1. Quick Start ウィンドウで Examples をクリックします。Data source チュートリアルの横にある ダウンロード をクリックします。

      2. Data source チュートリアルの横にある Open をクリックし、Completed project を選択します。

    2. Library > Build Configurations でプラグインを選択し、Properties で設定します:

      • デバイスのアーキテクチャに一致するように CPU Architecture

      • 使用したい構成に Build Profile を設定します。

      ../../../_images/library-build-configurations.png ../../../_images/properties-build-configuration.png
    3. File > Export > Build Android Package を選択します。

      Kanzi Studio は <ProjectName>/Application/output/cmake/<PluginProjectName>/cmake/release/arm64-v8a/lib<PluginProjectName>.so で Kanzi Engine プラグインをビルドします。

      例えば、XMLデータソースプラグインを使用する場合、Kanzi Studio は <KanziWorkspace>/Tutorials/Data sources/Completed/Application/output/cmake/XML_data_source/cmake/release/arm64-v8a/libXML_data_source.so でプラグインをビルドします。

      ../../../_images/export-build-android-package.png
  2. ビルドされた Kanzi Engine プラグインをアプリケーションに追加します。

    1. Kanzi Studio で File > Close All projects を選択し、Android application テンプレートを使用して Kanzi Studio プロジェクトを開くか作成します。

      Android application テンプレートは、Kanzi Studio プロジェクトと Kanzi Android フレームワークベースのアプリケーションを作成します。

      ../../../_images/close-all-projects.png ../../../_images/new-project-android-application.png
    2. Library で右クリックして Kanzi Engine Plugin を選択し、Import Kanzi Engine Plugin を選択してビルドされたプラグインの dll を選択します。

      例えば、<KanziWorkspace>/Tutorials/Data sources/Completed/Application/lib/Win64/GL_vs2019_Release_DLL/XML_data_source.dll Kanzi Engine プラグインを選択します。

      この方法で、Kanzi Engine プラグインを Kanzi Studio プロジェクトに追加します。

      ../../../_images/import-kanzi-engine-plugin.png
    3. この Kanzi Engine プラグインを追加したいプロジェクトのファイルエクスプローラーで、このディレクトリ構造 <ProjectName>/Application/lib/Android/release/arm64-v8a を作成します。

    4. Kanzi Engine の so プラグインファイルを <ProjectName>/Application/output/cmake/<PluginProjectName>/cmake/release/arm64-v8a/lib<PluginProjectName>.so から <ProjectName>/Application/lib/Android/release/arm64-v8a ディレクトリにコピーします。

      例えば、<KanziWorkspace>/Tutorials/Data sources/Completed/Application/output/cmake/XML_data_source/cmake/release/arm64-v8a/libXML_data_source.so ファイルをコピーします。

    5. <ProjectName>/Application/CMakeLists.txt ファイルを編集して、Kanzi Engine プラグインをインポートされたライブラリの依存関係として追加します。

      add_library(<PluginProjectName> SHARED IMPORTED)
      set_target_properties(<PluginProjectName> PROPERTIES IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/lib/Android/release/${ANDROID_ABI}/lib<PluginProjectName>.so")
      target_link_libraries(<ProjectName> <PluginProjectName>)
      

      例えば、XML data source プラグインを追加するには、次を使用します。

      add_library(XML_data_source SHARED IMPORTED)
      set_target_properties(XML_data_source PROPERTIES IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/lib/Android/release/${ANDROID_ABI}/libXML_data_source.so")
      target_link_libraries(<ProjectName> XML_data_source)
      

      こうすると、ビルドされたネイティブ Kanzi Engine プラグインを Android アプリケーションに追加できます。

      このCMake構成を使用すると、ビルド時に動的にリンクされた Kanzi Engine プラグインをAndroidアプリケーションにリンクします。これにより、プラグイン依存関係を持つkzbファイルをアプリケーションに追加したときに、Kanzi がそのプラグインをロードできるようになります。

  3. Kanzi Studio で File > Export > Build Android Package を選択します。

    Kanzi Studio は、アプリケーションを Android デバイスにビルドしてデプロイします。アプリケーションが Android デバイス上で実行を開始すると、logcat でアプリケーションがプラグインをロードするタイミングを確認できます。

    例えば、XML data source プラグインを使用すると、logcatには次のように表示されます:

    I/Kanzi: [info:generic] Loading plugin 'libXML_data_source.so'
    
    ../../../_images/export-build-android-package.png
  4. Kanzi Android framework (droidfw) アプリケーションでプラグインを使用します。

    例えば、Kanzi Engine データソースプラグインの使用方法を学ぶには、データソースを使用する を参照してください。

Kanzi Engine C++ プラグインコードをアプリケーションプロジェクトに移動する

Kanzi Android framework (droidfw) アプリケーションプロジェクトに Kanzi Engine C++ プラグインを追加できます。その後、C++ プラグインコードをアプリケーションコードとマージすることができます。この方法により、プラグインとアプリケーションの両方をソースから単一のビルドでビルドすることができます。

Kanzi Engine の C++ プラグインコードを Kanzi Android framework (droidfw) アプリケーションプロジェクトに移動するには、

  1. (オプション) これらの指示で指定された相対パスが機能することを確認するために、<KanziWorkspace>/Projects ディレクトリに Kanzi Android framework (droidfw) アプリケーションのコピーを作成してください。

  2. プラグインのC++コードとその CMakeLists.txt を <ProjectName>/Application/src/plugin ディレクトリにコピーします。

    例えば、XMLデータソースプラグインコードをプロジェクトに追加するには、<KanziWorkspace>/Tutorials/Data sources/Completed/Application/src/plugin ディレクトリの内容を <KanziWorkspace>/Projects/MyProject/Application/src/plugin ディレクトリにコピーします。

    XMLデータソースプラグインは、Kanzi アプリケーションがXMLファイルからデータを利用できるようにします。XMLデータソースの定義方法については、チュートリアル: データソースからアプリケーションデータを取得する を参照してください。

  3. <ProjectName>/Application/src/plugin/CMakeLists.txt ファイルで、Kanzi ビルドスクリプトへのパスを変更してください。

    たとえば、変更

    if(NOT KANZI_ENGINE_BUILD)
          find_package(Kanzi REQUIRED CONFIG CMAKE_FIND_ROOT_PATH_BOTH
             HINTS "../../../../../../Engine/lib/cmake/Kanzi")
    endif()
    

    終点

    if(NOT KANZI_ENGINE_BUILD)
          find_package(Kanzi REQUIRED CONFIG CMAKE_FIND_ROOT_PATH_BOTH
             HINTS "../../../../../Engine/lib/cmake/Kanzi")
    endif()
    
  4. アプリケーションのC++コードと CMakeLists.txt ファイルを <ProjectName>/Application/src/executable ディレクトリに移動します。

    例えば、<KanziWorkspace>/Projects/MyProject/Application/ ディレクトリで、移動します:

    • CMakeLists.txt を src/executable ディレクトリに

    • src/myproject.cpp を src/executable/src ディレクトリに

  5. <ProjectName>/Application/src/executable/CMakeLists.txt ファイル内で:

    1. プロジェクト名のすべての出現箇所を新しい名前に置き換えてください。

      たとえば、変更

      project(MyProject)
      

      終点

      project(MyProject_executable)
      
    2. Kanzi ビルドスクリプトへのパスを編集します。変更

      include(${CMAKE_CURRENT_LIST_DIR}/cmake/kanzi-locate.cmake)
      

      終点

      include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/kanzi-locate.cmake)
      
    3. プラグイン共有オブジェクトへのパスを更新します。

      例:

      add_library(XML_data_source SHARED IMPORTED)
      set_target_properties(XML_data_source PROPERTIES IMPORTED_LOCATION
         "${CMAKE_CURRENT_LIST_DIR}/../../lib/android/${CMAKE_BUILD_TYPE}/${ANDROID_ABI}/libXML_data_source.so")
      target_link_libraries(MyProject_executable XML_data_source)
      
  6. <ProjectName>/Application/ ディレクトリに、プロジェクト全体で共通の CMakeLists.txt ファイルを作成します。

    例:

    cmake_minimum_required(VERSION 3.10.0)
    project(MyProject)
    
    add_subdirectory(src/plugin)
    add_subdirectory(src/executable)
    
  7. <ProjectName>/Application/configs/platforms/android_gradle/ ディレクトリ内に、プラグインプロジェクト用のディレクトリを作成します。

    例えば、<KanziWorkspace>/Tutorials/Data sources/Completed/Application/configs/platforms/android_gradle/XML_data_source ディレクトリを <KanziWorkspace>/Projects/MyProject/Application/configs/platforms/android_gradle/ ディレクトリにコピーします。

  8. <ProjectName>/Application/configs/platforms/android_gradle/app/build.gradle ファイル内で:

    1. 以下の文字列を見つけます。

      externalNativeBuild {
          cmake {
              path file("$rootDir/../../../CMakeLists.txt")
          }
      }
      

      終点

      externalNativeBuild {
          cmake {
              path file("$rootDir/../../../src/executable/CMakeLists.txt")
          }
      }
      
    2. アプリケーションプロジェクトがプラグインプロジェクトに依存しているため、CMakeは最初にプラグインコードをビルドする必要があります。ビルド順序を設定するには、afterEvaluate ブロックを追加してください。

      例:

      afterEvaluate {
          // Make the CMake configuration task of this app depend on the build results of the
          // plugin project.
          tasks.withType(com.android.build.gradle.tasks.ExternalNativeBuildJsonTask).every { task ->
              // This example dependency assumes that the plugin project and application
              // project have the same build variant types available.
              // For example, :app:Debug -> :XML_data_source:Debug.
              task.dependsOn(":XML_data_source:externalNativeBuild${task.variantName.capitalize()}")
          }
      }
      
    3. dependencies ブロックに、プラグインプロジェクトへの依存関係を追加します。

      例:

      dependencies {
         implementation project(':XML_data_source')
         // ...
      }
      
  9. <ProjectName>/Application/configs/platforms/android_gradle/settings.gradle ファイルに、プラグインプロジェクトの名前を含めてください。

    例:

    rootProject.name = "myproject"
    include ":app"
    include ":XML_data_source"
    

今、Kanzi アプリケーションと C++ プラグインコードの両方を Android Studio で同時に編集およびビルドできます。

../../../_images/android-studio-project-droidfw-cpp-plugin-code.png

Kanzi Studio で更新された Kanzi Engine プラグインを使用するには、

関連項目

Kanzi Engine プラグイン

データソース (Data Sources)

チュートリアル: データソースからアプリケーションデータを取得する