From c939b3c7bd34cc650064d270294eb01a9d37a20c Mon Sep 17 00:00:00 2001 From: csf Date: Tue, 5 Apr 2022 17:15:48 +0800 Subject: [PATCH 1/3] fix android release can't find method --- android/app/src/main/AndroidManifest.xml | 3 +-- .../src/main/kotlin/com/carriez/flutter_hbb/MainService.kt | 6 ++++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b82788dae..c552efae5 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -16,7 +16,6 @@ android:label="RustDesk" android:requestLegacyExternalStorage="true"> - - \ No newline at end of file + diff --git a/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt b/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt index b55c9bdf7..40862b3aa 100644 --- a/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt +++ b/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt @@ -24,6 +24,7 @@ import android.os.* import android.util.Log import android.view.Surface import android.view.Surface.FRAME_RATE_COMPATIBILITY_DEFAULT +import androidx.annotation.Keep import androidx.annotation.RequiresApi import androidx.core.app.ActivityCompat import androidx.core.app.NotificationCompat @@ -65,6 +66,7 @@ class MainService : Service() { } // rust call jvm + @Keep fun rustGetVideoRaw(): ByteArray { return if (videoData != null) { videoData!! @@ -73,6 +75,7 @@ class MainService : Service() { } } + @Keep fun rustGetAudioRaw(): FloatArray { return if (isNewData && audioData != null) { isNewData = false @@ -82,12 +85,14 @@ class MainService : Service() { } } + @Keep fun rustGetAudioRawLen(): Int { return if (isNewData && audioData != null && audioData!!.isNotEmpty()) { audioData!!.size } else 0 } + @Keep fun rustGetByName(name: String): String { return when (name) { "screen_size" -> "${INFO.screenWidth}:${INFO.screenHeight}" @@ -95,6 +100,7 @@ class MainService : Service() { } } + @Keep fun rustSetByName(name: String, arg1: String, arg2: String) { when (name) { "try_start_without_auth" -> { From 711965b507141ff1e13ecfcd4bcac293e8fd87ba Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 5 Apr 2022 20:42:38 +0800 Subject: [PATCH 2/3] hash main.dart.js --- deploy.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deploy.sh b/deploy.sh index 10ba55152..c18803419 100755 --- a/deploy.sh +++ b/deploy.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash cd build/web/ -python3 -c 'x=open("./main.dart.js").read();import re;y=re.search("https://.*canvaskit-wasm@([\d\.]+)/bin/",x);dirname="canvaskit@"+y.groups()[0];z=x.replace(y.group(),"/"+dirname+"/");f=open("./main.dart.js", "wt");f.write(z);import os;os.system("ln -s canvaskit " + dirname);' +python3 -c 'x=open("./main.dart.js", "rt").read();import re;y=re.search("https://.*canvaskit-wasm@([\d\.]+)/bin/",x);dirname="canvaskit@"+y.groups()[0];z=x.replace(y.group(),"/"+dirname+"/");f=open("./main.dart.js", "wt");f.write(z);import os;os.system("ln -s canvaskit " + dirname);' +python3 -c 'import hashlib;x=hashlib.sha1(open("./main.dart.js").read().encode()).hexdigest()[:10];y=open("index.html","rt").read().replace("main.dart.js", "main.dart.js?v="+x);open("index.html","wt").write(y)' tar czf x * scp x sg:/tmp/ ssh sg "sudo tar xzf /tmp/x -C /var/www/html/web.rustdesk.com/ && /bin/rm /tmp/x && sudo chown www-data:www-data /var/www/html/web.rustdesk.com/ -R" From e780fd925329c32225e2aeecdcdb21342dcd5bf4 Mon Sep 17 00:00:00 2001 From: csf Date: Tue, 5 Apr 2022 23:29:11 +0800 Subject: [PATCH 3/3] fix android config reading error --- .../com/carriez/flutter_hbb/MainActivity.kt | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainActivity.kt b/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainActivity.kt index e7143c3dc..b8988c8dd 100644 --- a/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainActivity.kt +++ b/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainActivity.kt @@ -31,22 +31,23 @@ class MainActivity : FlutterActivity() { @RequiresApi(Build.VERSION_CODES.M) override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) - Log.d(logTag, "MainActivity configureFlutterEngine,bind to main service") - Intent(this, MainService::class.java).also { - bindService(it, serviceConnection, Context.BIND_AUTO_CREATE) - } updateMachineInfo() flutterMethodChannel = MethodChannel( flutterEngine.dartExecutor.binaryMessenger, channelTag ).apply { + // make sure result is set, otherwise flutter will await forever setMethodCallHandler { call, result -> when (call.method) { "init_service" -> { - Log.d(logTag, "event from flutter,getPer") - if(mainService?.isReady == false){ - getMediaProjection() + Intent(activity, MainService::class.java).also { + bindService(it, serviceConnection, Context.BIND_AUTO_CREATE) } + if(mainService?.isReady == true){ + result.success(false) + return@setMethodCallHandler + } + getMediaProjection() result.success(true) } "start_capture" -> { @@ -68,11 +69,15 @@ class MainActivity : FlutterActivity() { "check_permission" -> { if(call.arguments is String){ result.success(checkPermission(context, call.arguments as String)) + } else { + result.success(false) } } "request_permission" -> { if(call.arguments is String){ requestPermission(context, call.arguments as String) + } else { + result.success(false) } } "check_video_permission" -> { @@ -91,6 +96,7 @@ class MainActivity : FlutterActivity() { "on_state_changed", mapOf("name" to "media", "value" to mainService?.isReady.toString()) ) + result.success(true) } "init_input" -> { initInput() @@ -105,15 +111,20 @@ class MainActivity : FlutterActivity() { "on_state_changed", mapOf("name" to "input", "value" to InputService.isOpen.toString()) ) + result.success(true) } "cancel_notification" -> { try { val id = call.arguments as Int Log.d(logTag,"cancel_notification id:$id") mainService?.cancelNotification(id) - }finally { } + }finally { + result.success(true) + } + } + else -> { + result.error("-1","No such method",null) } - else -> {} } } }