add: apk builder plugin support; fix: inrt AutoJs.ensureServiceEnabled

This commit is contained in:
hyb1996
2017-11-29 16:07:52 +08:00
parent 028c5c91f4
commit 6dfd35683a
20 changed files with 393 additions and 388 deletions

View File

@@ -6,6 +6,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name=".App"

View File

@@ -8,6 +8,7 @@ import android.os.Bundle;
import com.stardust.auojs.inrt.rt.AutoJs;
import com.stardust.autojs.core.console.ConsoleView;
import com.stardust.autojs.core.console.StardustConsole;
import com.stardust.autojs.script.StringScriptSource;
import com.stardust.pio.PFiles;
@@ -34,7 +35,7 @@ public class MainActivity extends AppCompatActivity {
private void setupView() {
ConsoleView consoleView = new ConsoleView(this);
consoleView.setConsole(AutoJs.getInstance().getGlobalConsole());
consoleView.setConsole((StardustConsole) AutoJs.getInstance().getGlobalConsole());
setContentView(consoleView);
}

View File

@@ -39,8 +39,9 @@ public class AccessibilityServiceTool {
public static boolean enableAccessibilityServiceByRootAndWaitFor(Context context, long timeOut) {
if (enableAccessibilityServiceByRoot(context, com.stardust.view.accessibility.AccessibilityService.class)) {
com.stardust.view.accessibility.AccessibilityService.waitForEnabled(timeOut);
return true;
}
return true;
return false;
}
public static void goToAccessibilitySetting() {

View File

@@ -1,6 +1,7 @@
package com.stardust.auojs.inrt.rt;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
@@ -40,15 +41,17 @@ import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.view.accessibility.AccessibilityServiceUtils;
import com.stardust.view.accessibility.NotificationListener;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.OpenCVLoader;
/**
* Created by Stardust on 2017/4/2.
*/
public class AutoJs {
public class AutoJs extends com.stardust.autojs.AutoJs {
private static AutoJs instance;
private Class<? extends android.accessibilityservice.AccessibilityService> sAccessibilityServiceClass = AccessibilityService.class;
public static AutoJs getInstance() {
return instance;
@@ -58,166 +61,31 @@ public class AutoJs {
instance = new AutoJs(context);
}
private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder();
private final AccessibilityNotificationObserver mNotificationObserver;
private ScriptEngineManager mScriptEngineManager;
private final Context mContext;
private final UiHandler mUiHandler;
private final AppUtils mAppUtils;
private final AccessibilityInfoProvider mAccessibilityInfoProvider;
private final ScreenCaptureRequester mScreenCaptureRequester = new ScreenCaptureRequesterImpl();
private final ScriptEngineService mScriptEngineService;
private final StardustConsole mGlobalConsole;
private AutoJs(final Context context) {
mContext = context;
mUiHandler = new UiHandler(context);
mAppUtils = new AppUtils(context);
mGlobalConsole = new GlobalStardustConsole(mUiHandler);
mNotificationObserver = new AccessibilityNotificationObserver(context);
mAccessibilityInfoProvider = new AccessibilityInfoProvider(context.getPackageManager());
mScriptEngineService = buildScriptEngineService();
addAccessibilityServiceDelegates();
registerActivityLifecycleCallbacks();
InputEventObserver.initGlobal(context);
}
public StardustConsole getGlobalConsole() {
return mGlobalConsole;
}
private ScriptEngineService buildScriptEngineService() {
initScriptEngineManager();
return new ScriptEngineServiceBuilder()
.uiHandler(mUiHandler)
.globalConsole(mGlobalConsole)
.engineManger(mScriptEngineManager)
.build();
}
private void initScriptEngineManager() {
mScriptEngineManager = new ScriptEngineManager(mContext);
mScriptEngineManager.registerEngine(JavaScriptSource.ENGINE, new Supplier<ScriptEngine>() {
@Override
public ScriptEngine get() {
LoopBasedJavaScriptEngine engine = new LoopBasedJavaScriptEngine(mContext);
engine.setRuntime(new ScriptRuntime.Builder()
.setConsole(new StardustConsole(mUiHandler, mGlobalConsole))
.setScreenCaptureRequester(mScreenCaptureRequester)
.setAccessibilityBridge(new AccessibilityBridgeImpl())
.setUiHandler(mUiHandler)
.setAppUtils(mAppUtils)
.setEngineService(mScriptEngineService)
.setShellSupplier(new Supplier<AbstractShell>() {
@Override
public AbstractShell get() {
return new Shell(mContext, true);
}
}).build());
return engine;
}
});
mScriptEngineManager.registerEngine(AutoFileSource.ENGINE, new Supplier<ScriptEngine>() {
@Override
public ScriptEngine get() {
return new RootAutomatorEngine(mContext);
}
});
}
private void registerActivityLifecycleCallbacks() {
App.getApp().registerActivityLifecycleCallbacks(new SimpleActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
ScreenMetrics.initIfNeeded(activity);
mAppUtils.setCurrentActivity(activity);
}
@Override
public void onActivityPaused(Activity activity) {
mAppUtils.setCurrentActivity(null);
}
@Override
public void onActivityResumed(Activity activity) {
mAppUtils.setCurrentActivity(activity);
}
});
}
private void addAccessibilityServiceDelegates() {
AccessibilityService.addDelegate(100, mAccessibilityInfoProvider);
AccessibilityService.addDelegate(200, mNotificationObserver);
AccessibilityService.addDelegate(300, mAccessibilityActionRecorder);
}
public ScriptEngineService getScriptEngineService() {
return mScriptEngineService;
private AutoJs(Context context) {
super(context);
}
@Override
public void ensureAccessibilityServiceEnabled() {
if (AccessibilityService.getInstance() == null) {
String errorMessage = getErrorMessage();
if (AccessibilityService.getInstance() != null) {
return;
}
String errorMessage = null;
if (AccessibilityServiceUtils.isAccessibilityServiceEnabled(getApplication(), AccessibilityService.class)) {
errorMessage = App.getApp().getString(R.string.text_auto_operate_service_enabled_but_not_running);
} else {
if (!AccessibilityServiceTool.enableAccessibilityServiceByRootAndWaitFor(getApplication(), 2000)) {
errorMessage = App.getApp().getString(R.string.text_no_accessibility_permission);
}
}
if (errorMessage != null) {
AccessibilityServiceTool.goToAccessibilitySetting();
throw new ScriptException(errorMessage);
}
}
private String getErrorMessage() {
if (AccessibilityServiceUtils.isAccessibilityServiceEnabled(App.getApp(), sAccessibilityServiceClass)) {
return App.getApp().getString(R.string.text_auto_operate_service_enabled_but_not_running);
} else {
if (true) {
if (!AccessibilityServiceTool.enableAccessibilityServiceByRootAndWaitFor(App.getApp(), 2000)) {
return App.getApp().getString(R.string.text_enable_accessibility_service_by_root_timeout);
}
}
}
return App.getApp().getString(R.string.text_no_accessibility_permission);
}
private class AccessibilityBridgeImpl extends AccessibilityBridge {
@Override
public void ensureServiceEnabled() {
AutoJs.this.ensureAccessibilityServiceEnabled();
}
@Nullable
@Override
public AccessibilityService getService() {
return AccessibilityService.getInstance();
}
@Override
public AccessibilityInfoProvider getInfoProvider() {
return mAccessibilityInfoProvider;
}
@Override
public AccessibilityNotificationObserver getNotificationObserver() {
return mNotificationObserver;
}
}
private class ScreenCaptureRequesterImpl extends ScreenCaptureRequester.AbstractScreenCaptureRequester {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void request() {
Activity activity = mAppUtils.getCurrentActivity();
if (activity instanceof OnActivityResultDelegate.DelegateHost) {
ScreenCaptureRequester requester = new ActivityScreenCaptureRequester(
((OnActivityResultDelegate.DelegateHost) activity).getOnActivityResultDelegateMediator(), activity);
requester.setOnActivityResultCallback(mCallback);
requester.request();
} else {
ScreenCaptureRequestActivity.request(mContext, mCallback);
}
}
@Override
protected Application getApplication() {
return App.getApp();
}
}