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 は以下の関数を使用します。

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

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 ライブラリを統合するには、以下のようにします。

  1. <KanziWorkspace>/Templates/Android_library ディレクトリから、以下を Android プロジェクトのルートにコピーします。

    • getkanzi.gradle ファイル

    • kanzinative ディレクトリ

  2. <AndroidProject>/kanzinative/src/main/cpp ディレクトリの内容を削除します。

  3. Kanzi プロジェクトの <ProjectName>/Application ディレクトリから、以下を <AndroidProject>/kanzinative/src/main/cpp ディレクトリにコピーします:

    • CMakeLists.txt ファイル

    • cmake および src ディレクトリ

  4. プロジェクトの 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 ライブラリをインクルードする

  5. kanzinative をサブプロジェクトとしてインクルードするには、プロジェクトの settings.gradle または settings.gradle.kts ファイルに以下を追加します:

    include ':kanzinative'
    
    include(":kanzinative")
    
  6. アプリケーションがビルド済みの 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 を追加するには:

  1. 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" />
    
  2. Configuration クラスと KanziView クラスを Android アクティビティにインポートします。

    例えば、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);
        }
    }
    

Kanzi Studio プロジェクトのアセットをアプリケーションに追加する

Android アプリケーションに Kanzi Studio のアセットを追加するには:

  1. 以下のいずれかの方法で、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 ディレクトリに手動でコピーしてください。

  2. 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 リファレンス

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

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