From 501abc6b559b85ee9a1f77f14e883d760d0b5300 Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Thu, 7 Apr 2022 02:49:48 -0700 Subject: [PATCH] Automatically set Android devices into the permissive mode Reviewed By: nikoant Differential Revision: D35356211 fbshipit-source-id: 471470c5ca91c824590a409c4474433f2277b1f2 --- .../src/devices/android/AndroidDevice.tsx | 31 +++++++++++++++++++ .../devices/android/androidDeviceManager.tsx | 2 ++ desktop/types/adbkit.d.ts | 1 + 3 files changed, 34 insertions(+) diff --git a/desktop/flipper-server-core/src/devices/android/AndroidDevice.tsx b/desktop/flipper-server-core/src/devices/android/AndroidDevice.tsx index 81c3e1196..00d895a4a 100644 --- a/desktop/flipper-server-core/src/devices/android/AndroidDevice.tsx +++ b/desktop/flipper-server-core/src/devices/android/AndroidDevice.tsx @@ -120,6 +120,37 @@ export default class AndroidDevice extends ServerDevice { }); } + async setIntoPermissiveMode(): Promise { + console.debug('AndroidDevice.setIntoPermissiveMode', this.serial); + try { + try { + await this.adb.root(this.serial); + } catch (e) { + if ( + !(e instanceof Error) || + e.message !== 'adbd is already running as root' + ) { + throw e; + } + } + console.debug( + 'AndroidDevice.setIntoPermissiveMode -> enabled root', + this.serial, + ); + await this.executeShellOrDie('setenforce 0'); + console.info( + 'AndroidDevice.setIntoPermissiveMode -> success', + this.serial, + ); + } catch (e) { + console.info( + 'AndroidDevice.setIntoPermissiveMode -> failed', + this.serial, + e, + ); + } + } + async screenRecordAvailable(): Promise { try { await this.executeShellOrDie( diff --git a/desktop/flipper-server-core/src/devices/android/androidDeviceManager.tsx b/desktop/flipper-server-core/src/devices/android/androidDeviceManager.tsx index dbd8e7359..6e12f0455 100644 --- a/desktop/flipper-server-core/src/devices/android/androidDeviceManager.tsx +++ b/desktop/flipper-server-core/src/devices/android/androidDeviceManager.tsx @@ -90,6 +90,8 @@ export class AndroidDeviceManager { // The default way of capturing screenshots through adb does not seem to work // There is a way of getting a screenshot through KaiOS dev tools though if (androidLikeDevice instanceof AndroidDevice) { + await androidLikeDevice.setIntoPermissiveMode(); + const screenRecordAvailable = await androidLikeDevice.screenRecordAvailable(); androidLikeDevice.info.features.screenCaptureAvailable = diff --git a/desktop/types/adbkit.d.ts b/desktop/types/adbkit.d.ts index 944064d29..42b0b1306 100644 --- a/desktop/types/adbkit.d.ts +++ b/desktop/types/adbkit.d.ts @@ -57,6 +57,7 @@ declare module 'adbkit' { serial: string, command: string | string[], ) => Promise; + root: (serial: string) => Promise; screencap: (serial: string) => Promise; pull: (serial: string, path: string) => Promise; openLogcat: (