要创建面向 Android 系统的 Kanzi 应用程序,您可以使用 Android Studio、Clang 工具链和 Gradle 构建系统。
在将 Kanzi 应用程序部署到 Android 设备前,需要设置您的构建环境。请参阅 部署 Kanzi 应用程序到 Android。
要使用 KanziAndroid 平台软件包构建 Kanzi 应用程序并部署到 Android 设备,您需要:
Kanzi 支持 Android API 等级 21(Android 5.0 版本)及更新版本。
Kanzi 在 Android 系统中不支持 JavaScript 脚本编写功能。
此图表展示出 Kanzi 构建 Android 包所需要的流程。
Android 生命周期事件设置 Kanzi 应用程序在活动状态更改时的行为方式。每个事件映射到一个 Android 活动回调方法。一个 Kanzi 应用程序会使用以下生命周期活动:
Lifecycle.Event.ON_CREATE
//加载提供 Kanzi 功能的原生库, //初始化上下文,以及分配用于渲染的 KanziView 的本机库。 //此函数调用 KanziNativeLibrary.createApplication() 函数 //加载 Kanzi 工程。 KanziView.createNativeApplication();
Lifecycle.Event.ON_DESTROY
//停止并销毁 Kanzi 应用程序。
//此函数调用 KanziNativeLibrary.haltApplication() 和
// KanziNativeLibrary.destroyApplication() 函数。
KanziView.destroyNativeApplication();
SurfaceHolder.Callback.surfaceCreated
//创建应用程序图面时,运行 Kanzi 应用程序。
KanziNativeLibrary.runApplication(holder.getSurface());
SurfaceHolder.Callback.surfaceDestroyed
//销毁 Kanzi 应用程序图面时,暂停渲染。
KanziNativeLibrary.haltApplication();
SurfaceHolder.Callback.surfaceChanged
//当 Kanzi 应用程序图面格式或大小更改时,
//调整应用程序图面的大小。
// @param width: 图面的新宽度。
// @param height: 图面的新高度。
KanziNativeLibrary.resizeEvent(width, height);
Kanzi 不使用 LifeCycle.Event.ON_PAUSE
和 Lifecycle.Event.ON_RESUME
事件,因为这两个事件不告知应用程序图面是否准备好渲染。KanziView
分别使用 SurfaceHolder.Callback
surfaceCreated()
和 surfaceDestroyed()
函数,来暂停和恢复渲染。
请参阅 https://developer.android.com/reference/androidx/lifecycle/Lifecycle.Event.html 和 https://developer.android.com/reference/android/view/SurfaceHolder.Callback。
此图表展示了一个 Kanzi 应用程序在 Android 平台上的初始化序列。
要在您的 Android 应用程序中运行 Kanzi 应用程序,您可以向现有的 Android Studio 工程添加一个 KanziView。
要向 Android Studio 工程添加 KanziView,请执行以下操作:
apply plugin: 'com.rightware.gradle.kanzi'
Configuration
和 KanziView
类。import android.content.res.Configuration;
import com.rightware.kanzi.KanziView;
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);
}
}
buildscript { apply from: 'getkanzi.gradle' repositories { google() jcenter() flatDir { dirs getKanziPlugins().toString() } } dependencies { classpath 'com.android.tools.build:gradle:4.1.0' classpath 'com.rightware.gradle:kanzi:0.6.1' } ...
<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" />
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") } } }