fix: permission issues of inrt
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
package com.stardust.scriptdroid.ui.build;
|
package com.stardust.scriptdroid.ui.build;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.ListActivity;
|
||||||
|
import android.app.PendingIntent;
|
||||||
|
import android.content.Intent;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
@@ -76,6 +79,12 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
|||||||
mAppName.setText(file.getSimplifiedName());
|
mAppName.setText(file.getSimplifiedName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onNewIntent(Intent intent) {
|
||||||
|
super.onNewIntent(intent);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Click(R.id.select_source)
|
@Click(R.id.select_source)
|
||||||
void selectSourceFilePath() {
|
void selectSourceFilePath() {
|
||||||
String initialDir = new File(mSourcePath.getText().toString()).getParent();
|
String initialDir = new File(mSourcePath.getText().toString()).getParent();
|
||||||
|
|||||||
@@ -5,8 +5,9 @@
|
|||||||
|
|
||||||
<application
|
<application
|
||||||
>
|
>
|
||||||
<activity android:name=".execution.ScriptExecuteActivity"/>
|
<activity
|
||||||
|
android:name=".execution.ScriptExecuteActivity"
|
||||||
|
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
|
||||||
|
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
import re
|
|
||||||
|
|
||||||
def get_functions(path):
|
|
||||||
list = []
|
|
||||||
with open(path) as f:
|
|
||||||
for line in f:
|
|
||||||
func = get_function_or_null(line)
|
|
||||||
if func:
|
|
||||||
list.append(func)
|
|
||||||
return to_str(list)
|
|
||||||
|
|
||||||
def to_str(list):
|
|
||||||
return str(list).replace("'", '"')
|
|
||||||
|
|
||||||
def get_function_or_null(line):
|
|
||||||
m = re.match(r'^var\s(\S+)\s=', line)
|
|
||||||
if m and not m.group(1).startswith('__'):
|
|
||||||
return m.group(1)
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
print(get_functions(r'autojs\src\main\assets\javascript_engine_init.js'))
|
|
||||||
print(get_functions(r'app\src\main\assets\js\autojs_init.js'))
|
|
||||||
|
|
||||||
@@ -4,6 +4,9 @@
|
|||||||
package="com.stardust.auojs.inrt">
|
package="com.stardust.auojs.inrt">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
<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"/>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".App"
|
android:name=".App"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
"auto";
|
auto();
|
||||||
|
console.log("Hello, Auto.js");
|
||||||
|
toast("Hello");
|
||||||
launch("com.tencent.mm");
|
launch("com.tencent.mm");
|
||||||
sleep(500);
|
sleep(500);
|
||||||
while(!click("发现"));
|
while(!click("发现"));
|
||||||
|
|||||||
@@ -2,36 +2,81 @@ package com.stardust.auojs.inrt;
|
|||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.support.annotation.RequiresApi;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import com.stardust.auojs.inrt.rt.AutoJs;
|
import com.stardust.auojs.inrt.rt.AutoJs;
|
||||||
|
import com.stardust.autojs.core.console.ConsoleView;
|
||||||
import com.stardust.autojs.script.StringScriptSource;
|
import com.stardust.autojs.script.StringScriptSource;
|
||||||
|
import com.stardust.pio.PFiles;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||||
|
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
private static final int PERMISSION_REQUEST_CODE = 1209;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
checkPermissions();
|
setupView();
|
||||||
try {
|
checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||||
InputStream is = getAssets().open("script.js");
|
runScript();
|
||||||
byte[] data = new byte[is.available()];
|
}
|
||||||
is.read(data);
|
|
||||||
String js = new String(data);
|
private void setupView() {
|
||||||
StringScriptSource source = new StringScriptSource("<script>", js);
|
ConsoleView consoleView = new ConsoleView(this);
|
||||||
AutoJs.getInstance().getScriptEngineService().execute(source);
|
consoleView.setConsole(AutoJs.getInstance().getGlobalConsole());
|
||||||
} catch (IOException e) {
|
setContentView(consoleView);
|
||||||
e.printStackTrace();
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void runScript() {
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
String js = PFiles.read(getAssets().open("script.js"));
|
||||||
|
StringScriptSource source = new StringScriptSource("main", js);
|
||||||
|
AutoJs.getInstance().getScriptEngineService().execute(source);
|
||||||
|
} catch (Exception e) {
|
||||||
|
AutoJs.getInstance().getGlobalConsole().log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void checkPermission(String... permissions) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
String[] requestPermissions = getRequestPermissions(permissions);
|
||||||
|
if (requestPermissions.length > 0) {
|
||||||
|
requestPermissions(requestPermissions, PERMISSION_REQUEST_CODE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int[] grantResults = new int[permissions.length];
|
||||||
|
Arrays.fill(grantResults, PERMISSION_GRANTED);
|
||||||
|
onRequestPermissionsResult(PERMISSION_REQUEST_CODE, permissions, grantResults);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkPermissions() {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||||
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 11124);
|
private String[] getRequestPermissions(String[] permissions) {
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
for (String permission : permissions) {
|
||||||
|
if (checkSelfPermission(permission) == PERMISSION_DENIED) {
|
||||||
|
list.add(permission);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return list.toArray(new String[list.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.stardust.auojs.inrt.R;
|
|||||||
import com.stardust.autojs.ScriptEngineService;
|
import com.stardust.autojs.ScriptEngineService;
|
||||||
import com.stardust.autojs.ScriptEngineServiceBuilder;
|
import com.stardust.autojs.ScriptEngineServiceBuilder;
|
||||||
import com.stardust.autojs.core.accessibility.AccessibilityBridge;
|
import com.stardust.autojs.core.accessibility.AccessibilityBridge;
|
||||||
|
import com.stardust.autojs.core.console.GlobalStardustConsole;
|
||||||
import com.stardust.autojs.core.inputevent.InputEventObserver;
|
import com.stardust.autojs.core.inputevent.InputEventObserver;
|
||||||
import com.stardust.autojs.core.record.accessibility.AccessibilityActionRecorder;
|
import com.stardust.autojs.core.record.accessibility.AccessibilityActionRecorder;
|
||||||
import com.stardust.autojs.engine.LoopBasedJavaScriptEngine;
|
import com.stardust.autojs.engine.LoopBasedJavaScriptEngine;
|
||||||
@@ -62,30 +63,32 @@ public class AutoJs {
|
|||||||
private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder();
|
private final AccessibilityActionRecorder mAccessibilityActionRecorder = new AccessibilityActionRecorder();
|
||||||
private final NotificationListener.Observer mNotificationObserver;
|
private final NotificationListener.Observer mNotificationObserver;
|
||||||
private ScriptEngineManager mScriptEngineManager;
|
private ScriptEngineManager mScriptEngineManager;
|
||||||
private final LayoutInspector mLayoutInspector = new LayoutInspector();
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final UiHandler mUiHandler;
|
private final UiHandler mUiHandler;
|
||||||
private final AppUtils mAppUtils;
|
private final AppUtils mAppUtils;
|
||||||
private final AccessibilityInfoProvider mAccessibilityInfoProvider;
|
private final AccessibilityInfoProvider mAccessibilityInfoProvider;
|
||||||
private final ScreenCaptureRequester mScreenCaptureRequester = new ScreenCaptureRequesterImpl();
|
private final ScreenCaptureRequester mScreenCaptureRequester = new ScreenCaptureRequesterImpl();
|
||||||
private final ScriptEngineService mScriptEngineService;
|
private final ScriptEngineService mScriptEngineService;
|
||||||
private final Console mGlobalConsole;
|
private final StardustConsole mGlobalConsole;
|
||||||
|
|
||||||
|
|
||||||
private AutoJs(final Context context) {
|
private AutoJs(final Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mUiHandler = new UiHandler(context);
|
mUiHandler = new UiHandler(context);
|
||||||
mAppUtils = new AppUtils(context);
|
mAppUtils = new AppUtils(context);
|
||||||
mGlobalConsole = new NoOpConsole();
|
mGlobalConsole = new GlobalStardustConsole(mUiHandler);
|
||||||
mNotificationObserver = new NotificationListener.Observer(context);
|
mNotificationObserver = new NotificationListener.Observer(context);
|
||||||
mAccessibilityInfoProvider = new AccessibilityInfoProvider(context.getPackageManager());
|
mAccessibilityInfoProvider = new AccessibilityInfoProvider(context.getPackageManager());
|
||||||
mScriptEngineService = buildScriptEngineService();
|
mScriptEngineService = buildScriptEngineService();
|
||||||
addAccessibilityServiceDelegates();
|
addAccessibilityServiceDelegates();
|
||||||
//mScriptEngineService.registerGlobalScriptExecutionListener(new ScriptExecutionGlobalListener());
|
|
||||||
registerActivityLifecycleCallbacks();
|
registerActivityLifecycleCallbacks();
|
||||||
InputEventObserver.initGlobal(context);
|
InputEventObserver.initGlobal(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StardustConsole getGlobalConsole() {
|
||||||
|
return mGlobalConsole;
|
||||||
|
}
|
||||||
|
|
||||||
private ScriptEngineService buildScriptEngineService() {
|
private ScriptEngineService buildScriptEngineService() {
|
||||||
initScriptEngineManager();
|
initScriptEngineManager();
|
||||||
return new ScriptEngineServiceBuilder()
|
return new ScriptEngineServiceBuilder()
|
||||||
@@ -153,50 +156,29 @@ public class AutoJs {
|
|||||||
AccessibilityService.addDelegate(300, mAccessibilityActionRecorder);
|
AccessibilityService.addDelegate(300, mAccessibilityActionRecorder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AccessibilityActionRecorder getAccessibilityActionRecorder() {
|
|
||||||
return mAccessibilityActionRecorder;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AppUtils getAppUtils() {
|
|
||||||
return mAppUtils;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UiHandler getUiHandler() {
|
|
||||||
return mUiHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LayoutInspector getLayoutInspector() {
|
|
||||||
return mLayoutInspector;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public ScriptEngineService getScriptEngineService() {
|
public ScriptEngineService getScriptEngineService() {
|
||||||
return mScriptEngineService;
|
return mScriptEngineService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AccessibilityInfoProvider getInfoProvider() {
|
|
||||||
return mAccessibilityInfoProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ensureAccessibilityServiceEnabled() {
|
public void ensureAccessibilityServiceEnabled() {
|
||||||
if (AccessibilityService.getInstance() == null) {
|
if (AccessibilityService.getInstance() == null) {
|
||||||
String errorMessage = null;
|
String errorMessage = getErrorMessage();
|
||||||
if (AccessibilityServiceUtils.isAccessibilityServiceEnabled(App.getApp(), sAccessibilityServiceClass)) {
|
AccessibilityServiceTool.goToAccessibilitySetting();
|
||||||
errorMessage = App.getApp().getString(R.string.text_auto_operate_service_enabled_but_not_running);
|
throw new ScriptException(errorMessage);
|
||||||
} else {
|
}
|
||||||
if (true) {
|
}
|
||||||
if (!AccessibilityServiceTool.enableAccessibilityServiceByRootAndWaitFor(App.getApp(), 2000)) {
|
|
||||||
errorMessage = App.getApp().getString(R.string.text_enable_accessibility_service_by_root_timeout);
|
private String getErrorMessage() {
|
||||||
}
|
if (AccessibilityServiceUtils.isAccessibilityServiceEnabled(App.getApp(), sAccessibilityServiceClass)) {
|
||||||
} else {
|
return App.getApp().getString(R.string.text_auto_operate_service_enabled_but_not_running);
|
||||||
errorMessage = App.getApp().getString(R.string.text_no_accessibility_permission);
|
} else {
|
||||||
|
if (true) {
|
||||||
|
if (!AccessibilityServiceTool.enableAccessibilityServiceByRootAndWaitFor(App.getApp(), 2000)) {
|
||||||
|
return App.getApp().getString(R.string.text_enable_accessibility_service_by_root_timeout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (errorMessage != null) {
|
|
||||||
AccessibilityServiceTool.goToAccessibilitySetting();
|
|
||||||
throw new ScriptException(errorMessage);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return App.getApp().getString(R.string.text_no_accessibility_permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user