fix: permission issues of inrt

This commit is contained in:
hyb1996
2017-10-25 22:06:09 +08:00
parent 70383a97df
commit 60f9e8e74f
7 changed files with 97 additions and 80 deletions

View File

@@ -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();

View File

@@ -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>

View File

@@ -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'))

View File

@@ -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"

View File

@@ -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("发现"));

View File

@@ -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()]);
} }
} }

View File

@@ -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);
} }