From 5e2ffe3436bf235d5edc7603559e7a85434da248 Mon Sep 17 00:00:00 2001 From: "pengfei.zhou" Date: Thu, 26 Aug 2021 16:48:29 +0800 Subject: [PATCH] Devkit add plugin support --- .../main/java/pub/doric/devkit/DoricDev.java | 1 + .../pub/doric/devkit/DoricDevkitPlugin.java | 33 ++++++++++++++++ doric-iOS/Devkit/Classes/DoricDev.m | 2 + doric-iOS/Devkit/Classes/DoricDevkitPlugin.h | 24 ++++++++++++ doric-iOS/Devkit/Classes/DoricDevkitPlugin.m | 38 +++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 doric-android/devkit/src/main/java/pub/doric/devkit/DoricDevkitPlugin.java create mode 100644 doric-iOS/Devkit/Classes/DoricDevkitPlugin.h create mode 100644 doric-iOS/Devkit/Classes/DoricDevkitPlugin.m diff --git a/doric-android/devkit/src/main/java/pub/doric/devkit/DoricDev.java b/doric-android/devkit/src/main/java/pub/doric/devkit/DoricDev.java index 54b8eb37..6fc6ab1f 100644 --- a/doric-android/devkit/src/main/java/pub/doric/devkit/DoricDev.java +++ b/doric-android/devkit/src/main/java/pub/doric/devkit/DoricDev.java @@ -57,6 +57,7 @@ public class DoricDev { this.isRunningInEmulator = SimulatorUtil.isSimulator(Doric.application()); DoricSingleton.getInstance().getNativeDriver().getRegistry().registerMonitor(new DoricDevMonitor()); DoricSingleton.getInstance().getNativeDriver().getRegistry().setGlobalPerformanceAnchorHook(new DoricDevPerformanceAnchorHook()); + DoricSingleton.getInstance().getNativeDriver().getRegistry().registerNativePlugin(DoricDevkitPlugin.class); } public static DoricDev getInstance() { diff --git a/doric-android/devkit/src/main/java/pub/doric/devkit/DoricDevkitPlugin.java b/doric-android/devkit/src/main/java/pub/doric/devkit/DoricDevkitPlugin.java new file mode 100644 index 00000000..602aef28 --- /dev/null +++ b/doric-android/devkit/src/main/java/pub/doric/devkit/DoricDevkitPlugin.java @@ -0,0 +1,33 @@ +package pub.doric.devkit; + +import com.github.pengfeizhou.jscore.JavaValue; + +import pub.doric.DoricContext; +import pub.doric.extension.bridge.DoricMethod; +import pub.doric.extension.bridge.DoricPlugin; +import pub.doric.extension.bridge.DoricPromise; +import pub.doric.plugin.DoricJavaPlugin; +import pub.doric.utils.ThreadMode; + +/** + * @Description: This is a devkit plugin + * @Author: pengfei.zhou + * @CreateDate: 2021/8/26 + */ +@DoricPlugin(name = "devkit") +public class DoricDevkitPlugin extends DoricJavaPlugin { + public DoricDevkitPlugin(DoricContext doricContext) { + super(doricContext); + } + + @DoricMethod(thread = ThreadMode.UI) + public void debug(DoricPromise promise) { + DoricDev.getInstance().openDevMode(); + promise.resolve(); + } + + @DoricMethod(thread = ThreadMode.UI) + public void isDebug(DoricPromise promise) { + promise.resolve(new JavaValue(DoricDev.getInstance().isInDevMode())); + } +} diff --git a/doric-iOS/Devkit/Classes/DoricDev.m b/doric-iOS/Devkit/Classes/DoricDev.m index bee8f77d..3f7f8ac6 100644 --- a/doric-iOS/Devkit/Classes/DoricDev.m +++ b/doric-iOS/Devkit/Classes/DoricDev.m @@ -29,6 +29,7 @@ #import "DoricDevViewController.h" #import "DoricDevMonitor.h" #import "DoricDevPerformanceAnchorHook.h" +#import "DoricDevkitPlugin.h" @interface DoricContextDebuggable : NSObject @property(nonatomic, weak) DoricContext *doricContext; @@ -81,6 +82,7 @@ - (instancetype)init { _reloadingContexts = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]; [DoricSingleton.instance.nativeDriver.registry registerMonitor:[DoricDevMonitor new]]; DoricSingleton.instance.nativeDriver.registry.globalPerformanceAnchorHook = [DoricDevPerformanceAnchorHook new]; + [DoricSingleton.instance.nativeDriver.registry registerNativePlugin:DoricDevkitPlugin.class withName:@"devkit"]; } return self; } diff --git a/doric-iOS/Devkit/Classes/DoricDevkitPlugin.h b/doric-iOS/Devkit/Classes/DoricDevkitPlugin.h new file mode 100644 index 00000000..60bb44d9 --- /dev/null +++ b/doric-iOS/Devkit/Classes/DoricDevkitPlugin.h @@ -0,0 +1,24 @@ +/* + * Copyright [2021] [Doric.Pub] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Created by pengfei.zhou on 2021/8/26. +// + +#import +#import + +@interface DoricDevkitPlugin : DoricNativePlugin +@end \ No newline at end of file diff --git a/doric-iOS/Devkit/Classes/DoricDevkitPlugin.m b/doric-iOS/Devkit/Classes/DoricDevkitPlugin.m new file mode 100644 index 00000000..234bf319 --- /dev/null +++ b/doric-iOS/Devkit/Classes/DoricDevkitPlugin.m @@ -0,0 +1,38 @@ +/* + * Copyright [2021] [Doric.Pub] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Created by pengfei.zhou on 2021/8/26. +// + +#import "DoricDevkitPlugin.h" +#import "DoricDev.h" + +@implementation DoricDevkitPlugin + +- (void)debug:(NSDictionary *)dic withPromise:(DoricPromise *)promise { + dispatch_async(dispatch_get_main_queue(), ^{ + [[DoricDev instance] openDevMode]; + [promise resolve:nil]; + }); +} + +- (void)isDebug:(NSDictionary *)dic withPromise:(DoricPromise *)promise { + dispatch_async(dispatch_get_main_queue(), ^{ + [promise resolve:@([[DoricDev instance] isInDevMode])]; + }); +} + +@end \ No newline at end of file