使用 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 使用以下函数:
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 应用程序的初始化顺序。
将 KanziView 添加到 Android Studio 项目中。¶
要在您的 Android 应用程序中运行您的 Kanzi 应用程序,您可以将 KanziView 添加到现有的 Android Studio 项目中。
要将 KanziView 添加到 Android Studio 项目中:
在 Kanzi Studio 中,打开您想要作为 Kanzi 视图添加到 Android Studio 项目的项目,并选择 File > Export > Export KZB。
将
<ProjectName>/Application/bin目录复制到您的 Android Studio 项目根目录。这样,您就可以在 Android 包中包含 kzb 文件。例如,对于名为
MyProject的 Android Studio 项目,将Application/bin目录复制到MyProject目录。在 Android Studio 中,打开您要添加
KanziView的项目。在 Android Studio 中,在
app/src/main目录中,创建一个名为cpp的目录,并将 CMake 构建文件和您的 Kanzi 项目的源代码添加到该目录中:从您的 Kanzi 项目的
<ProjectName>/Application目录中将CMakeLists.txt文件复制到cpp目录。从您的 Kanzi 项目的
<ProjectName>/Application/src目录中,将<project_name>.cpp文件复制到cpp目录。
从
<KanziWorkspace>/Templates/Basic_application/Application/configs/platforms/android_gradle复制getkanzi.gradle文件到您的 Android 项目目录。Gradle 使用
getkanzi.gradle脚本来找到 Kanzi Engine 和 Kanzi Gradle 插件。在 Android Studio 中,将 Kanzi 添加到您的项目中:
在
app/build.gradle文件中,将 Kanzi 添加到您的 Android 项目中:apply plugin: 'com.rightware.gradle.kanzi'
在 Java 活动中导入
Configuration和KanziView类。例如,在
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); } }
在 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' } ...
将
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" />
在
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") } } }
在 Android Studio 中,在主菜单中,选择 Build > Make Project。
Android Studio 生成应用程序包。