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 ライフサイクルイベント

Androidのライフサイクルイベントは、アクティビティの状態が変化したときに Kanzi アプリケーションがどのように動作するかを設定します。各イベントは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 イベントを使用しません。レンダリングを一時停止および再開するために、KanziView はこれらの関数を使用します。

https://developer.android.com/reference/androidx/lifecycle/Lifecycle.Event.html および https://developer.android.com/reference/android/view/SurfaceHolder.Callback を参照してください。

この図は、Android プラットフォーム上での Kanzi アプリケーションの初期化シーケンスを示しています。

../../_images/android-initialization-sequence.svg

KanziView を Android Studio プロジェクトに追加する

Kanzi アプリケーションをAndroidアプリケーションで実行するには、既存のAndroid Studioプロジェクトに KanziView を追加することができます。

Android Studioプロジェクトに KanziView を追加するには:

  1. Kanzi Studio で、Android Studioプロジェクトに Kanzi ビューとして追加したいプロジェクトを開き、File > Export > Export KZB を選択します。

    ../../_images/export-kzb-binary.png
  2. <ProjectName>/Application/bin ディレクトリを Android Studio プロジェクトのルートディレクトリにコピーします。これにより、kzb ファイルが Android パッケージに含まれます。

    例えば、MyProject という名前の Android Studio プロジェクトの場合、Application/bin ディレクトリを MyProject ディレクトリにコピーします。

  3. Android Studioで、KanziView を追加したいプロジェクトを開きます。

  4. Android Studioで、app/src/main ディレクトリ内に cpp というディレクトリを作成し、そのディレクトリに Kanzi プロジェクトのCMakeビルドファイルとソースコードを追加します。

    • Kanzi プロジェクトの <ProjectName>/Application ディレクトリから CMakeLists.txt ファイルを cpp ディレクトリにコピーします。

    • Kanzi プロジェクトの <ProjectName>/Application/src ディレクトリから <project_name>.cpp ファイルを cpp ディレクトリにコピーします。

  5. <KanziWorkspace>/Templates/Basic_application/Application/configs/platforms/android_gradle から、getkanzi.gradle ファイルを Android プロジェクトディレクトリにコピーします。

    Gradleは getkanzi.gradle スクリプトを使用して Kanzi Engine および Kanzi Gradleプラグインを見つけます。

  6. Android Studioで、Kanzi をプロジェクトに追加します。

    1. app/build.gradle ファイルで、Kanzi を Android プロジェクトに追加します。

      apply plugin: 'com.rightware.gradle.kanzi'
      
    2. Javaアクティビティに Configuration クラスと KanziView クラスをインポートします。

      例えば、app/src/main/java/com/rightware/<projectname>/MainActivity.java に追加します:

      import android.content.res.Configuration;
      import com.rightware.kanzi.KanziView;
      
    3. 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);
          }
      }
      
    4. Androidプロジェクトのルートディレクトリで、build.gradle ファイル内の Kanzi Gradleプラグインを取得し、Kanzi を依存関係として追加します。

      buildscript {
          apply from: 'getkanzi.gradle'
      
          repositories {
              google()
              jcenter()
      
              flatDir { dirs getKanziPlugins().toString() }
          }
          dependencies {
              classpath 'com.android.tools.build:gradle:7.4.2'
              classpath 'com.rightware.gradle:kanzi:0.8.1'
          }
      ...
      
    5. 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" />
      
    6. app/build.gradle ファイルで、設定します:

      • Android プロジェクトのアセットディレクトリを、kzb ファイルが入っているディレクトリに設定します。

      • パスを Cmake ビルドファイルに設定します。

      apply plugin: 'com.android.application'
      apply plugin: 'com.rightware.gradle.kanzi'
      
      android {
      
      ...
      
              sourceSets {
                  main {
                      assets.srcDirs = [new File(rootDir, "bin")]
                  }
              }
          }
      
      ...
      
          externalNativeBuild {
              cmake {
                  path file("$projectDir/src/main/cpp/CMakeLists.txt")
              }
          }
      }
      
  7. Android Studio のメインメニューで、Build > Make Project を選択します。

    Android Studio により、アプリケーションパッケージがビルドされます。

    ../../_images/make-project.png

関連項目

Kanzi Android アプリケーションフレームワーク API リファレンス

Kanzi アプリケーションをAndroidにデプロイする

アプリケーション構成リファレンス