新建HelloKanzi工程
拷贝kzb等文件到assets目录
/.../app/src/main/assets$ tree -l
.
├── a55testapplication.kzb
├── application.cfg
├── data.xml
├── tsview.kzb.cfg
└── tsview.kzb.txt
其中data.xml文件的接口描述文件:
assets$ cat data.xml
<speed type = "int">1</speed>
引入Kanzi依赖库
拷贝文件:
app/src/main/libs$ tree -l
.
├── AndroidDataSource.jar
├── kanzi_engine.jar
└── arm64-v8a
├── libc++_shared.so
├── libkanzi.so
├── libkzandroiddatasource.so
├── libkzappmanager.so
├── libkzcore.so
├── libkzcoreui.so
├── libkzparticlesystem.so
└── libkzui.so
在build.gradle中引入依赖:
android {
defaultConfig {
...
ndk {
abiFilters 'arm64-v8a' //只生成armv8的so
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
aaptOptions {
noCompress "cfg","kzb"
}
}
dependencies {
...
implementation files('libs/AndroidDataSource.jar')
implementation files('libs/kanzi_engine.jar')
...
}
修改MainAcitivity代码
package com.xxx.hellokanzi;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import com.rightware.kanzi.KanziActivity;
import com.rightware.kanzi.androiddatasource.AndroidDataSourceManager;
import com.rightware.kanzi.androiddatasource.BaseManager;
import com.rightware.kanzi.androiddatasource.SharedData;
import com.rightware.kanzi.androiddatasource.kzDataTypeInt;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends KanziActivity {
private static final String TAG = "KanziActivity";
AndroidDataSourceManager mDataFeeder;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
String kanziConfigPath = getFilesDir().getAbsolutePath();
copyAssetsToDst(this, "data.xml", kanziConfigPath + File.separator + "data.xml");
mDataFeeder = new AndroidDataSourceManager("AndroidDataSourceManager");
SharedData.get().addManager((BaseManager) mDataFeeder);
try {
mDataFeeder.setXMLPath(kanziConfigPath + File.separator);
} catch (Exception exception) {
Log.e(TAG, exception.toString());
}
queueEvent(new Runnable() {
@Override
public void run() {
if (mDataFeeder == null) {
return;
}
kzDataTypeInt intDataType = new kzDataTypeInt("speed");
mDataFeeder.getKanziController().setDataObjectValue(intDataType, 100);
}
});
}
private void copyAssetsToDst(Context context, String srcPath, String dstPath) {
try {
InputStream is = context.getAssets().open(srcPath);
FileOutputStream fos = new FileOutputStream(new File(dstPath));
byte[] buffer = new byte[1024];
int byteCount;
while ((byteCount = is.read(buffer)) != -1) {
fos.write(buffer, 0, byteCount);
}
fos.flush();
is.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mDataFeeder == null) {
return;
}
SharedData.get().removeManager();
mDataFeeder.delete();
}
}