优化 打包后的UI脚本

修复 getClip()偶发报错问题
This commit is contained in:
hyb1996
2018-10-23 19:45:49 +08:00
parent 27c9488147
commit d400591df4
5 changed files with 31 additions and 10 deletions

View File

@@ -20,6 +20,7 @@ public class ExecutionConfig implements Serializable {
public long interval = 0;
public int loopTimes = 1;
private Map<String, Object> mArguments = new HashMap<>();
private int mIntentFlags = 0;
public static ExecutionConfig getDefault() {
return new ExecutionConfig();
@@ -32,6 +33,15 @@ public class ExecutionConfig implements Serializable {
return this;
}
public int getIntentFlags() {
return mIntentFlags;
}
public ExecutionConfig setIntentFlags(int intentFlags) {
mIntentFlags = intentFlags;
return this;
}
public ExecutionConfig requirePath(String... requirePath) {
mRequirePath = new ArrayList<>(Arrays.asList(requirePath));
if (mExecutePath != null) {

View File

@@ -49,7 +49,8 @@ public class ScriptExecuteActivity extends AppCompatActivity {
ActivityScriptExecution execution = new ActivityScriptExecution(manager, task);
Intent i = new Intent(context, ScriptExecuteActivity.class)
.putExtra(EXTRA_EXECUTION_ID, execution.getId())
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addFlags(task.getConfig().getIntentFlags());
context.startActivity(i);
return execution;
}
@@ -140,7 +141,7 @@ public class ScriptExecuteActivity extends AppCompatActivity {
protected void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "onDestroy");
if(mScriptEngine != null){
if (mScriptEngine != null) {
mScriptEngine.put("activity", null);
mScriptEngine.setTag("activity", null);
mScriptEngine.destroy();

View File

@@ -18,7 +18,8 @@ public class ClipboardUtil {
}
public static CharSequence getClip(Context context) {
return ((ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE)).getPrimaryClip().getItemAt(0).getText();
ClipData clip = ((ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE)).getPrimaryClip();
return (clip == null || clip.getItemCount() == 0) ? null : clip.getItemAt(0).getText();
}
@NonNull

View File

@@ -1 +1,2 @@
"ui";
console.error("打包出错啦~ 使用文件夹打包请把主脚本改名为main.js");

View File

@@ -11,11 +11,12 @@ import com.stardust.auojs.inrt.BuildConfig;
import com.stardust.auojs.inrt.LogActivity;
import com.stardust.auojs.inrt.Pref;
import com.stardust.auojs.inrt.autojs.AutoJs;
import com.stardust.autojs.ScriptEngineService;
import com.stardust.autojs.execution.ExecutionConfig;
import com.stardust.autojs.execution.ScriptExecution;
import com.stardust.autojs.project.ProjectConfig;
import com.stardust.autojs.script.JavaScriptFileSource;
import com.stardust.autojs.script.JavaScriptSource;
import com.stardust.autojs.script.ScriptSource;
import com.stardust.pio.PFiles;
import com.stardust.pio.UncheckedIOException;
@@ -49,13 +50,12 @@ public class AssetsProjectLauncher {
public void launch(Activity activity) {
//如果需要隐藏日志界面,则直接运行脚本
if (mProjectConfig.getLaunchConfig().shouldHideLogs() || Pref.shouldHideLogs()) {
activity.finish();
runScript();
runScript(activity);
} else {
//如果不隐藏日志界面
//如果当前已经是日志界面则直接运行脚本
if (activity instanceof LogActivity) {
runScript();
runScript(null);
} else {
//否则显示日志界面并在日志界面中运行脚本
mHandler.post(() -> {
@@ -67,15 +67,23 @@ public class AssetsProjectLauncher {
}
}
private void runScript() {
private void runScript(Activity activity) {
if (mScriptExecution != null && mScriptExecution.getEngine() != null &&
!mScriptExecution.getEngine().isDestroyed()) {
return;
}
try {
JavaScriptFileSource source = new JavaScriptFileSource("main", mMainScriptFile);
mScriptExecution = AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig()
.executePath(mProjectDir));
ExecutionConfig config = new ExecutionConfig()
.executePath(mProjectDir);
if ((source.getExecutionMode() & JavaScriptSource.EXECUTION_MODE_UI) != 0) {
config.setIntentFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
} else {
if (activity != null) {
activity.finish();
}
}
mScriptExecution = AutoJs.getInstance().getScriptEngineService().execute(source, config);
} catch (Exception e) {
AutoJs.getInstance().getGlobalConsole().error(e);
}