跳转到内容

CHelper 安卓接口 / Java 接口文档

如果有不明白的地方,可以直接参考CHelper 安卓版的内核对接方式。

编译内核(可选)

CHelper 内核文档中已经包含了内核的编译步骤,你甚至可以根据需求定制化内核再进行编译。如果嫌麻烦或者实在不会编译,你也可以直接使用编译好的内核

build.gradle.kts中添加以下内容:

kt
sourceSets.all {
    jniLibs.srcDirs("libs")
}

然后在libs的目录下对应的架构目录添加编译好的动态库文件。

资源包生成(可选)

通过运行代码可以读取 json 文件生成更加利于程序读写的二进制文件资源包。如果嫌麻烦或者不会生成,你也可以直接使用生成好的资源包

与 java 代码交互

你可以直接使用 CHelper-Android 项目的内核交互相关代码:https://github.com/Yancey2023/CHelper/tree/master/CHelper-Android/app/src/main/kotlin/yancey/chelper/core

内核本身不保存任何文本和光标状态,所有的命令相关功能都在CommandContext上执行。通过createContext(command)把命令文本解析成AST生成独立的命令上下文,然后在没有可变状态的CommandContext上执行各种只读操作:

kt
CHelperCore.fromAssets(assetManager, cpackPath).use { core ->
    core.createContext("give @s stone 12 1").use { context ->
        println(context.structure)
        println(context.getParamHint(8))
        println(context.getSuggestions(context.command!!.length)?.size)
        println(context.syntaxToken?.contentToString())
    }
}

由于CommandContext没有可变状态,同一条命令解析一次后,可以被多个线程同时读取;也可以基于同一个内核为多条命令创建多个CommandContext并行工作。CommandContext持有资源包的共享引用,即使CHelperCore先被close()CommandContext依然可用。

需要注意的是,如果你开启了代码混淆,那么你需要在代码混淆配置文件中添加以下内容:

plain
-keep class yancey.chelper.core.Suggestion{ *; }
-keep class yancey.chelper.core.ErrorReason{ *; }
-keep class yancey.chelper.core.ClickSuggestionResult{ *; }