From 25f8b337376e046a8057f5d839d7ba780d0c157c Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Fri, 1 Sep 2023 04:57:21 -0700 Subject: [PATCH] Remove Flipper actions in Dev Menu, add new Open Debugger action (#39254) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/39254 ## Context RFC: Decoupling Flipper from React Native core: https://github.com/react-native-community/discussions-and-proposals/pull/641 ## Changes - Removes Flipper-backed "Launch Debugger" and "Launch React DevTools" actions from the Dev Menu. - Adds replacement "Launch Debugger" action triggering the new one-click Hermes debugger flow for 0.73. Changelog: [Android][Changed] Remove Flipper actions in Dev Menu, add new Open Debugger action Reviewed By: motiz88 Differential Revision: D46187942 fbshipit-source-id: 95e87737f254af6d22ae1e2734cba6a324bb8b6c --- .../react/devsupport/DevServerHelper.java | 67 +++++++------------ .../devsupport/DevSupportManagerBase.java | 18 +---- .../main/res/devsupport/values/strings.xml | 3 +- 3 files changed, 29 insertions(+), 59 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java index 6ee95a79a664d5..f949ff77045038 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java @@ -7,7 +7,6 @@ package com.facebook.react.devsupport; -import android.content.Context; import android.os.AsyncTask; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -36,15 +35,11 @@ import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; -import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; -import okhttp3.RequestBody; import okhttp3.Response; import okio.Okio; import okio.Sink; -import org.json.JSONException; -import org.json.JSONObject; /** * Helper class for all things about the debug server running in the engineer's host machine. @@ -240,38 +235,6 @@ protected Void doInBackground(Void... params) { }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } - public void openUrl(final ReactContext context, final String url, final String errorMessage) { - new AsyncTask() { - @Override - protected Boolean doInBackground(Void... ignore) { - return doSync(); - } - - public boolean doSync() { - try { - String openUrlEndpoint = getOpenUrlEndpoint(context); - String jsonString = new JSONObject().put("url", url).toString(); - RequestBody body = RequestBody.create(MediaType.parse("application/json"), jsonString); - - Request request = new Request.Builder().url(openUrlEndpoint).post(body).build(); - OkHttpClient client = new OkHttpClient(); - client.newCall(request).execute(); - return true; - } catch (JSONException | IOException e) { - FLog.e(ReactConstants.TAG, "Failed to open URL" + url, e); - return false; - } - } - - @Override - protected void onPostExecute(Boolean result) { - if (!result) { - RNLog.w(context, errorMessage); - } - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } - public String getWebsocketProxyURL() { return String.format( Locale.US, @@ -296,11 +259,6 @@ public void downloadBundleFromURL( mBundleDownloader.downloadBundleFromURL(callback, outputFile, bundleURL, bundleInfo); } - private String getOpenUrlEndpoint(Context context) { - return String.format( - Locale.US, "http://%s/open-url", AndroidInfoHelpers.getServerHost(context)); - } - public void downloadBundleFromURL( DevBundleDownloadListener callback, File outputFile, @@ -458,4 +416,29 @@ public String getJSBundleURLForRemoteDebugging(String mainModuleName) { return null; } } + + /** Attempt to open the JS debugger on the host machine (on-device CDP debugging). */ + public void openDebugger(final ReactContext context, final String errorMessage) { + // TODO(huntie): Requests to dev server should not assume 'http' URL scheme + String requestUrl = + String.format( + Locale.US, + "http://%s/open-debugger?appId=%s", + mPackagerConnectionSettings.getInspectorServerHost(), + mPackageName); + Request request = new Request.Builder().url(requestUrl).method("POST", null).build(); + + mClient + .newCall(request) + .enqueue( + new Callback() { + @Override + public void onFailure(@NonNull Call _call, @NonNull IOException _e) { + RNLog.w(context, errorMessage); + } + + @Override + public void onResponse(@NonNull Call _call, @NonNull Response _response) {} + }); + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java index 7d552830aeb26a..bed2db92d8630f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java @@ -78,9 +78,6 @@ public interface CallbackWithBundleLoader { private static final int JAVA_ERROR_COOKIE = -1; private static final int JSEXCEPTION_ERROR_COOKIE = -1; private static final String RELOAD_APP_ACTION_SUFFIX = ".RELOAD_APP_ACTION"; - private static final String FLIPPER_DEBUGGER_URL = - "flipper://null/Hermesdebuggerrn?device=React%20Native"; - private static final String FLIPPER_DEVTOOLS_URL = "flipper://null/React?device=React%20Native"; private static final String EXOPACKAGE_LOCATION_FORMAT = "/data/local/tmp/exopackage/%s//secondary-dex"; @@ -369,8 +366,7 @@ public void onOptionSelected() { }); if (mDevSettings.isDeviceDebugEnabled()) { - // For on-device debugging we link out to Flipper. - // Since we're assuming Flipper is available, also include the DevTools. + // On-device JS debugging (CDP). Render action to open debugger frontend. // Reset the old debugger setting so no one gets stuck. // TODO: Remove in a few weeks. @@ -381,17 +377,9 @@ public void onOptionSelected() { options.put( mApplicationContext.getString(R.string.catalyst_debug_open), () -> - mDevServerHelper.openUrl( + mDevServerHelper.openDebugger( mCurrentContext, - FLIPPER_DEBUGGER_URL, - mApplicationContext.getString(R.string.catalyst_open_flipper_error))); - options.put( - mApplicationContext.getString(R.string.catalyst_devtools_open), - () -> - mDevServerHelper.openUrl( - mCurrentContext, - FLIPPER_DEVTOOLS_URL, - mApplicationContext.getString(R.string.catalyst_open_flipper_error))); + mApplicationContext.getString(R.string.catalyst_open_debugger_error))); } options.put( diff --git a/packages/react-native/ReactAndroid/src/main/res/devsupport/values/strings.xml b/packages/react-native/ReactAndroid/src/main/res/devsupport/values/strings.xml index 6149af00047c69..aeecbb6d32ade9 100644 --- a/packages/react-native/ReactAndroid/src/main/res/devsupport/values/strings.xml +++ b/packages/react-native/ReactAndroid/src/main/res/devsupport/values/strings.xml @@ -3,8 +3,7 @@ Reload Failed to load bundle. Try restarting the bundler or reconnecting your device. Change Bundle Location - Failed to open Flipper. Please check that Metro is running. - Open React DevTools + Failed to open debugger. Please check that the dev server is running. Open Debugger Connecting to debugger... Failed to connect to debugger!