Kanzi application framework (appfw) を使用した Android 向け開発¶
Kanzi application framework (appfw) を使用すると、複数のプラットフォーム向けにアプリケーションを作成し、プラットフォーム間で重要なアプリケーションコードを共有することができます。
Kanzi application framework (appfw) は、クロスプラットフォームアプリケーションを開発するためのフレームワークです。アプリケーションとプラグインのコードはC++で記述し、Android固有の機能を拡張するにはJNIグルーコードを書く必要があります。Kanzi application framework (appfw) を使用する場合、Kanzi アプリケーションを一度に1つのAndroid Viewにのみレンダリングできます。
Kanzi アプリケーションにおける Android ライフサイクルイベント¶
アクティビティの状態の変化に応じた Kanzi アプリケーションの動作は、Android ライフサイクルイベントによって設定されます。各イベントは Android アクティビティのコールバックメソッドに対応しています。Kanzi アプリケーションは、以下のライフサイクルイベントを使用します。
Lifecycle.Event.ON_CREATE// Load the native library that provides Kanzi functionality, // initialize the context, and assign the KanziView for rendering. // This function calls the KanziNativeLibrary.createApplication() function, // which loads the Kanzi project. KanziView.createNativeApplication();
Lifecycle.Event.ON_DESTROY// Halt and destroy the Kanzi application. // This function calls the KanziNativeLibrary.haltApplication() and // KanziNativeLibrary.destroyApplication() functions. KanziView.destroyNativeApplication();
SurfaceHolder.Callback.surfaceCreated(KanziView.surfaceCreated)// When the application surface is created, run the Kanzi application. KanziNativeLibrary.runApplication(holder.getSurface());
SurfaceHolder.Callback.surfaceDestroyed(KanziView.surfaceDestroyed)// When the Kanzi application surface is destroyed, pause rendering. KanziNativeLibrary.haltApplication();
SurfaceHolder.Callback.surfaceChanged(KanziView.surfaceChanged)// When the format or size of the Kanzi application surface changes, // resize the application surface. // @param width: The new width of the surface. // @param height: The new height of the surface. KanziNativeLibrary.resizeEvent(width, height);
Kanzi では LifeCycle.Event.ON_PAUSE イベントと Lifecycle.Event.ON_RESUME イベントを使用しません。これらのイベントは、アプリケーションサーフェス (Application Surface) がレンダリングに対応可能な状態になったかどうかを通知しないためです。レンダリングを一時停止および再開するために、KanziView は以下の関数を使用します。
SurfaceHolder.Callback.surfaceCreated(KanziView.surfaceCreated)SurfaceHolder.Callback.surfaceDestroyed(KanziView.surfaceDestroyed)
https://developer.android.com/reference/androidx/lifecycle/Lifecycle.Event.html および https://developer.android.com/reference/android/view/SurfaceHolder.Callback を参照してください。
この図は、Android プラットフォーム上での Kanzi アプリケーションの初期化シーケンスを示しています。
Android アプリケーションへの Kanzi application framework (appfw) の追加¶
既存の Android Studio アプリケーションプロジェクトで Kanzi application framework (appfw) を使用するには、以下のようにします。
Kanzi ライブラリを統合します
Android アクティビティに
KanziViewを追加しますKanzi Studio プロジェクトのアセットをインポートします
Android Studio プロジェクトへの Kanzi ライブラリの統合¶
Android Studio プロジェクトを、ビルド済みの Kanzi Android ライブラリと、Android ライブラリのサブプロジェクトとしてのネイティブ Kanzi ライブラリに依存させることで、Android アプリケーションに Kanzi を追加できます。
既存の Android Studio プロジェクトに Kanzi ライブラリを統合するには、以下のようにします。
<KanziWorkspace>/Templates/Android_libraryディレクトリから、以下を Android プロジェクトのルートにコピーします。getkanzi.gradleファイルkanzinativeディレクトリ
<AndroidProject>/kanzinative/src/main/cppディレクトリの内容を削除します。Kanzi プロジェクトの
<ProjectName>/Applicationディレクトリから、以下を<AndroidProject>/kanzinative/src/main/cppディレクトリにコピーします:CMakeLists.txtファイルcmakeおよびsrcディレクトリ
プロジェクトの
settings.gradleまたはsettings.gradle.ktsファイルに、以下を追加します:dependencyResolutionManagement { repositories { flatDir { apply from: 'getkanzi.gradle' dirs getKanziAndroidLibrariesPath() } } }
dependencyResolutionManagement { repositories { flatDir { apply(from ="getkanzi.gradle") dirs(extra.get("getKanziAndroidLibrariesPath")) } } }
このユーティリティにより、プロジェクトはローカルの Kanzi インストールまたはプラットフォームパッケージから Kanzi ライブラリを見つけられるようになります。
次のいずれかを選択できます。
プロジェクトを Kanzi ワークスペースディレクトリ内に置く
KANZI_HOME環境変数が Kanzi ワークスペースを指すように設定するプロジェクトの
local.propertiesで、kanzi.homeプロパティを Kanzi ワークスペースまたはプラットフォームパッケージに設定する独自の場所またはリポジトリから Kanzi ライブラリをインクルードする
kanzinativeをサブプロジェクトとしてインクルードするには、プロジェクトのsettings.gradleまたはsettings.gradle.ktsファイルに以下を追加します:include ':kanzinative'
include(":kanzinative")
アプリケーションがビルド済みの Kanzi Android ライブラリと
kanzinativeサブプロジェクトに依存するようにするには、プロジェクトのapp/build.gradleまたはapp/build.gradle.ktsファイルに以下を追加します:dependencies { implementation 'com.rightware.kanzi:kanziruntime@aar' implementation project(':kanzinative') }
dependencies { implementation("com.rightware.kanzi:kanziruntime@aar") implementation(project(":kanzinative")) }
Android アクティビティに KanziView を追加する¶
Android アクティビティに KanziView を追加するには:
Androidアプリケーションコンテンツに
KanziViewを追加し、そのレイアウトを設定します。例えば、
app/src/main/res/layout/content_main.xmlに追加します。<com.rightware.kanzi.KanziView android:id="@+id/kanzicontent" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="24dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" />
ConfigurationクラスとKanziViewクラスを Android アクティビティにインポートします。例えば、
app/src/main/java/com/rightware/<projectname>/MainActivity.javaに追加します:import android.content.res.Configuration; import com.rightware.kanzi.KanziView;
MainActivity.javaファイルで、Kanzi ビューをMainActivityクラスに追加します。public class MainActivity extends AppCompatActivity { private KanziView mView = null; @Override protected void onCreate(Bundle savedInstanceState) { ... mView = findViewById(R.id.kanzicontent); mView.registerLifecycle(getLifecycle()); } ... @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mView.setOrientation(newConfig.orientation); } }
Kanzi Studio プロジェクトのアセットをアプリケーションに追加する¶
Android アプリケーションに Kanzi Studio のアセットを追加するには:
以下のいずれかの方法で、kzb ファイルや cfg ファイルなどの Kanzi Studio プロジェクトのアセットを Android Studio プロジェクトにインポートします:
Android Studio プロジェクトの
app/build.gradleまたはapp/build.gradle.ktsで、Kanzi Studio プロジェクトの<ProjectName>/Application/binディレクトリへのパスを設定します:android { defaultConfig { sourceSets { main { assets.srcDirs = "<ProjectName>/Application/bin" } } } }
android { defaultConfig { sourceSets.named("main") { assets.srcDirs("<ProjectName>/Application/bin") } } }
Kanzi Studio プロジェクトの
<ProjectName>/Application/binディレクトリの内容を、Android Studio プロジェクトのapp/src/main/assetsディレクトリにコピーします。Kanzi Studio の Project > Properties で、Kanzi Studio プロジェクトの Binary Export Directory プロパティを Android Studio プロジェクトの
app/src/main/assetsディレクトリに設定します。これにより、プロジェクトの kzb ファイルのエクスポート先を Kanzi Studio に指定します。
注釈
Kanzi Studio は
application.cfgファイルをエクスポートしません。このファイルは、Android Studio プロジェクトのapp/src/main/assetsディレクトリに手動でコピーしてください。
Kanzi Engine が読み込めるように、インポートするアセットファイルの圧縮を無効にします。プロジェクトの
app/build.gradleまたはapp/build.gradle.ktsファイルに以下を追加します:android { aaptOptions { noCompress "kzb", "cfg", "json" } }
android { androidResources { noCompress += listOf("kzb", "cfg", "json") } }
関連項目¶
Kanzi Android アプリケーションフレームワーク API リファレンス