使用 Kanzi application framework (appfw) 开发 Android 应用程序。

当您想要为多个平台创建应用程序并打算在这些平台之间共享重要的应用程序代码时,使用 Kanzi application framework (appfw)。

Kanzi application framework (appfw) 是一个用于开发跨平台应用程序的框架。您可以用 C++ 编写应用程序和插件代码,扩展 Android 特定功能需要编写 JNI glue 代码。使用 Kanzi application framework (appfw) 时,您只能在一个 Android View 上渲染一个 Kanzi 应用程序。

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 项目中。

要在您的 Android 应用程序中运行您的 Kanzi 应用程序,您可以将 KanziView 添加到现有的 Android Studio 项目中。

要将 KanziView 添加到 Android Studio 项目中:

  1. 在 Kanzi Studio 中,打开您想要作为 Kanzi 视图添加到 Android Studio 项目的项目,并选择 File > Export > Export KZB。

    ../../_images/export-kzb-binary.png
  2. 将 <ProjectName>/Application/bin 目录复制到您的 Android Studio 项目根目录。这样,您就可以在 Android 包中包含 kzb 文件。

    例如,对于名为 MyProject 的 Android Studio 项目,将 Application/bin 目录复制到 MyProject 目录。

  3. 在 Android Studio 中,打开您要添加 KanziView 的项目。

  4. 在 Android Studio 中,在 app/src/main 目录中,创建一个名为 cpp 的目录,并将 CMake 构建文件和您的 Kanzi 项目的源代码添加到该目录中:

    • 从您的 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. 将 KanziView 添加到您的 Android 应用程序内容中,并设置其布局。

      例如,在 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

应用程序配置参考