使用 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。

此图表展示了 Kanzi 应用程序在 Android 平台上的初始化序列。

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

将 Kanzi application framework (appfw) 添加到您的 Android 应用程序

要在现有的 Android Studio 应用程序工程中使用 Kanzi application framework (appfw):

  • 集成 Kanzi 库

  • 将 KanziView 添加到您的 Android 活动

  • 导入 Kanzi Studio 工程资产

将 Kanzi 库集成到 Android Studio 工程中

您可以将 Android Studio 工程设置为依赖预构建的 Kanzi Android 库,并将原生 Kanzi 库作为 Android 库子工程,从而将 Kanzi 添加到您的 Android 应用程序中。

要将 Kanzi 库集成到现有 Android Studio 工程中:

  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"))
    }
    

将 KanziView 添加到 Android 活动

要将 KanziView 添加到 Android 活动:

  1. 将 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" />
    
  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 工程资产添加到您的应用程序

要将 Kanzi Studio 资产添加到您的 Android 应用程序:

  1. 使用以下方式之一,将 Kanzi Studio 工程资产(例如 kzb 和 cfg 文件)导入到您的 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 目录。

      这样即可告知 Kanzi Studio 将工程的 kzb 文件导出到何处。

      备注

      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

应用程序配置参考