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++ プラグインを使用するには、
Kanzi Engine プラグインをエクスポートします。
Kanzi Studio で、プラグインコードを含むプロジェクトを開きます。
例:
Quick Start ウィンドウで Examples をクリックします。Data source チュートリアルの横にある
をクリックします。
Data source チュートリアルの横にある Open をクリックし、Completed project を選択します。
Library > Build Configurations でプラグインを選択し、Properties で設定します:
デバイスのアーキテクチャに一致するように CPU Architecture
使用したい構成に Build Profile を設定します。
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でプラグインをビルドします。
ビルドされた Kanzi Engine プラグインをアプリケーションに追加します。
Kanzi Studio で File > Close All projects を選択し、Android application テンプレートを使用して Kanzi Studio プロジェクトを開くか作成します。
Android application テンプレートは、Kanzi Studio プロジェクトと Kanzi Android フレームワークベースのアプリケーションを作成します。
Library で右クリックして Kanzi Engine Plugin を選択し、Import Kanzi Engine Plugin を選択してビルドされたプラグインの dll を選択します。
例えば、
<KanziWorkspace>/Tutorials/Data sources/Completed/Application/lib/Win64/GL_vs2019_Release_DLL/XML_data_source.dllKanzi Engine プラグインを選択します。この方法で、Kanzi Engine プラグインを Kanzi Studio プロジェクトに追加します。
この Kanzi Engine プラグインを追加したいプロジェクトのファイルエクスプローラーで、このディレクトリ構造
<ProjectName>/Application/lib/Android/release/arm64-v8aを作成します。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ファイルをコピーします。<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 がそのプラグインをロードできるようになります。
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'
Kanzi Android framework (droidfw) アプリケーションでプラグインを使用します。
例えば、Kanzi Engine データソースプラグインの使用方法を学ぶには、データソースを使用する を参照してください。
Kanzi Engine C++ プラグインコードをアプリケーションプロジェクトに移動する¶
Kanzi Android framework (droidfw) アプリケーションプロジェクトに Kanzi Engine C++ プラグインを追加できます。その後、C++ プラグインコードをアプリケーションコードとマージすることができます。この方法により、プラグインとアプリケーションの両方をソースから単一のビルドでビルドすることができます。
Kanzi Engine の C++ プラグインコードを Kanzi Android framework (droidfw) アプリケーションプロジェクトに移動するには、
(オプション) これらの指示で指定された相対パスが機能することを確認するために、
<KanziWorkspace>/Projectsディレクトリに Kanzi Android framework (droidfw) アプリケーションのコピーを作成してください。プラグインの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データソースの定義方法については、チュートリアル: データソースからアプリケーションデータを取得する を参照してください。
<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()
アプリケーションのC++コードと
CMakeLists.txtファイルを<ProjectName>/Application/src/executableディレクトリに移動します。例えば、
<KanziWorkspace>/Projects/MyProject/Application/ディレクトリで、移動します:CMakeLists.txtをsrc/executableディレクトリにsrc/myproject.cppをsrc/executable/srcディレクトリに
<ProjectName>/Application/src/executable/CMakeLists.txtファイル内で:プロジェクト名のすべての出現箇所を新しい名前に置き換えてください。
たとえば、変更
project(MyProject)
終点
project(MyProject_executable)
Kanzi ビルドスクリプトへのパスを編集します。変更
include(${CMAKE_CURRENT_LIST_DIR}/cmake/kanzi-locate.cmake)
終点
include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/kanzi-locate.cmake)
プラグイン共有オブジェクトへのパスを更新します。
例:
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)
<ProjectName>/Application/ディレクトリに、プロジェクト全体で共通のCMakeLists.txtファイルを作成します。例:
cmake_minimum_required(VERSION 3.10.0) project(MyProject) add_subdirectory(src/plugin) add_subdirectory(src/executable)
<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/ディレクトリにコピーします。<ProjectName>/Application/configs/platforms/android_gradle/app/build.gradleファイル内で:以下の文字列を見つけます。
externalNativeBuild { cmake { path file("$rootDir/../../../CMakeLists.txt") } }
終点
externalNativeBuild { cmake { path file("$rootDir/../../../src/executable/CMakeLists.txt") } }
アプリケーションプロジェクトがプラグインプロジェクトに依存しているため、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()}") } }
dependenciesブロックに、プラグインプロジェクトへの依存関係を追加します。例:
dependencies { implementation project(':XML_data_source') // ... }
<ProjectName>/Application/configs/platforms/android_gradle/settings.gradleファイルに、プラグインプロジェクトの名前を含めてください。例:
rootProject.name = "myproject" include ":app" include ":XML_data_source"
今、Kanzi アプリケーションと C++ プラグインコードの両方を Android Studio で同時に編集およびビルドできます。
Kanzi Studio で更新された Kanzi Engine プラグインを使用するには、
Kanzi Engine プラグイン DLL をビルドします。テンプレートを使用してネイティブ Kanzi Engine プラグインを作成する を参照してください。
Kanzi Studio で、Kanzi Engine プラグインを更新します。プロジェクトで Kanzi Engine プラグインを更新する を参照してください。