Android 原生脚本宿主
Android Java/JNI宿主使用sqs_map动态库内置QuickJS,保持import {map} from 'sqsmap'语法。地图、脚本、输入、资源结果和销毁在同一创建线程执行。提供地图帧、事件、脚本状态与错误回调,图层面板、导航和其它UI由应用自己实现。
NativeMapHost.open(widthPixels,heightPixels,new NativeMapHost.Listener(){
public void onFrame(int width,int height,byte[] rgba){
// 回调在地图线程;转换RGBA并通过View.post更新你的界面。
}
public void onEvents(String json){ /* 读取状态并更新你的工具 */ }
public void onScriptState(String json){ /* 初始化、回调与任务状态 */ }
public void onError(Throwable error){ /* 呈现或记录错误 */ }
},null).thenAccept(host -> host.runScript(
"import {map} from 'sqsmap';map.jumpTo({center:[105,25],zoom:4});export default {};"));
持续监听的脚本显式导出sessionMode='persistent'。runScript的Future代表会话启动,初始化完成看onScriptState;没有用延迟伪造成功。重跑释放旧会话,stopScript停止脚本但保留地图;页面销毁调用closeAsync,取消传输、执行有界remove回调、销毁地图并释放会话。回调保持简短,不在地图线程等待自身Future。
JNI输入/输出均为UTF-8 JSON或独立RGBA拷贝,C缓冲立即释放,不暴露借用指针。默认HTTP遵守动态库请求计划的超时、重试/回退和字节预算,支持no-store;最多4个传输线程/32个任务/64MiB编码响应预留,工作副本及原生/GPU解码另有开销。可注入Transport,旧代次或重复结果不能改变新地图。默认 WS/WSS 已接通;自定义协议通过应用注入的 Transport 提供。
旧open/resize保持DPR1;新增带pixelRatio重载将逻辑尺寸与高密度物理输出区分,onFrame提供实际输出尺寸。触点先从View绘制矩形映射到画面,再除以密度,见像素密度。POINTER通道发送共同触摸快照,可选AndroidTouchInput已接通单指/双指导航与共同点击,应用安装在自己的View,见触摸导航。getStyle提供层/源快照,getAttributions提供署名;应用须呈现图源要求的来源。独立地图宿主不包含桌面完整GIS应用API,需按实际能力查询选用脚本。
Java要求Android API24+;JNI桥接与动态库必须为相同ABI并使用匹配头文件,动态库须启用script特性。集成说明、Java宿主、JNI、CMake、版本与SHA。随库保留QuickJS、字体与其它第三方许可声明。
本机已验证11项JNI、18项完整宿主检查(含密度与旧resize)、同一12项脚本与真实字形像素,包括触摸、HTTP/UTF-8、尺寸、空闲和停止/销毁。最低API24 Java、ARM64 JNI与script动态库已交叉编译/链接通过,记录分别保存;Linux JVM/软件GPU验证不等于手机设备通过。实际Android设备/驱动、移动GIS应用集成、iOS和正式发行继续待验收。
动态库必须用核心的release-capi(panic unwind)构建;Android构建助手现在固定使用此配置,输出target/aarch64-linux-android/release-capi/libsqs_map.so。普通release/abort库虽能链接,高层地图创建会拒绝。宿主启动时检查ABI/持续会话版本,以及unwind/script/session三个能力位,不能把成功链接当作可运行。
自定义连续资源回传支持同代多帧和反压;默认WS/WSS传输见默认实时图源。
默认WS/WSS实时图源已在04.8c6接通;设备与系统网络安全策略独立验收。
可直接嵌入布局的地图显示与生命周期接线见 Android 地图视图。
新版帧监听器可实现 onFrame(width,height,rgba,FrameFormat)。当前高层原生宿主使用离屏读回,其格式为 SRGB_PREMULTIPLIED_RGBA,平面视图也使用此格式;旧三参数监听器继续接收帧。转给 Android Bitmap 时须先解码 sRGB,再在线性空间反预乘并重新编码,不能只交换通道或直接以字节除透明度。SqsMapView 已集中处理这一转换。对外操作队列最多32项,超出返回 RESOURCE_LIMIT;关闭不占用此预算。