From cdd92303b8a9612f8bb03a7cae62a5ec48df7685 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 15 Apr 2024 15:20:27 +0800 Subject: [PATCH] refactor android ffi --- .../com/carriez/flutter_hbb/MainService.kt | 20 ++----------------- flutter/android/app/src/main/kotlin/ffi.kt | 19 ++++++++++++++++++ src/flutter_ffi.rs | 8 ++++---- 3 files changed, 25 insertions(+), 22 deletions(-) create mode 100644 flutter/android/app/src/main/kotlin/ffi.kt diff --git a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt index edec8c42d..1730e3527 100644 --- a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt +++ b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt @@ -1,5 +1,7 @@ package com.carriez.flutter_hbb +import ffi.* + /** * Capture screen,get video and audio,send to rust. * Dispatch notifications @@ -64,10 +66,6 @@ const val AUDIO_CHANNEL_MASK = AudioFormat.CHANNEL_IN_STEREO class MainService : Service() { - init { - System.loadLibrary("rustdesk") - } - @Keep @RequiresApi(Build.VERSION_CODES.N) fun rustPointerInput(kind: String, mask: Int, x: Int, y: Int) { @@ -156,20 +154,6 @@ class MainService : Service() { private val powerManager: PowerManager by lazy { applicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager } private val wakeLock: PowerManager.WakeLock by lazy { powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP or PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "rustdesk:wakelock")} - // jvm call rust - private external fun init(ctx: Context) - - /// When app start on boot, app_dir will not be passed from flutter - /// so pass a app_dir here to rust server - private external fun startServer(app_dir: String) - private external fun startService() - private external fun onVideoFrameUpdate(buf: ByteBuffer) - private external fun onAudioFrameUpdate(buf: ByteBuffer) - private external fun translateLocale(localeName: String, input: String): String - private external fun refreshScreen() - private external fun setFrameRawEnable(name: String, value: Boolean) - // private external fun sendVp9(data: ByteArray) - private fun translate(input: String): String { Log.d(logTag, "translate:$LOCAL_NAME") return translateLocale(LOCAL_NAME, input) diff --git a/flutter/android/app/src/main/kotlin/ffi.kt b/flutter/android/app/src/main/kotlin/ffi.kt new file mode 100644 index 000000000..e2382c647 --- /dev/null +++ b/flutter/android/app/src/main/kotlin/ffi.kt @@ -0,0 +1,19 @@ +// ffi.kt + +package ffi + +import android.content.Context +import java.nio.ByteBuffer + +init { + System.loadLibrary("rustdesk") +} + +external fun init(ctx: Context) +external fun startServer(app_dir: String) +external fun startService() +external fun onVideoFrameUpdate(buf: ByteBuffer) +external fun onAudioFrameUpdate(buf: ByteBuffer) +external fun translateLocale(localeName: String, input: String): String +external fun refreshScreen() +external fun setFrameRawEnable(name: String, value: Boolean) \ No newline at end of file diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 1c9e39c13..57919bd6e 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -2108,7 +2108,7 @@ pub mod server_side { use crate::start_server; #[no_mangle] - pub unsafe extern "system" fn Java_com_carriez_flutter_1hbb_MainService_startServer( + pub unsafe extern "system" fn Java_ffi_startServer( env: JNIEnv, _class: JClass, app_dir: JString, @@ -2122,7 +2122,7 @@ pub mod server_side { } #[no_mangle] - pub unsafe extern "system" fn Java_com_carriez_flutter_1hbb_MainService_startService( + pub unsafe extern "system" fn Java_ffi_startService( _env: JNIEnv, _class: JClass, ) { @@ -2132,7 +2132,7 @@ pub mod server_side { } #[no_mangle] - pub unsafe extern "system" fn Java_com_carriez_flutter_1hbb_MainService_translateLocale( + pub unsafe extern "system" fn Java_ffi_translateLocale( env: JNIEnv, _class: JClass, locale: JString, @@ -2151,7 +2151,7 @@ pub mod server_side { } #[no_mangle] - pub unsafe extern "system" fn Java_com_carriez_flutter_1hbb_MainService_refreshScreen( + pub unsafe extern "system" fn Java_ffi_refreshScreen( _env: JNIEnv, _class: JClass, ) {