text: module.exports=(()=>{
      var advancedEngines = {}
      
      advancedEngines.execScriptFile=function(path,args,config){
          let ss=com.stardust.autojs.script.JavaScriptFileSource(java.io.File(files.path(path)))
          return execute(ss,args,config);
      } 
      
      advancedEngines.execScript=function(name,script,args,config){
          let ss=com.stardust.autojs.script.StringScriptSource(name,script)
          return execute(ss,args,config);
      }
      
      advancedEngines.execAutoScript=function(path,args,config){
          let ss=com.stardust.autojs.script.AutoFileSource(java.io.File(files.path(path)))
          return execute(ss,args,config);
      }
      
      var execute = function(scriptSource,args,config) {
          args=args||{}
          config=config||{}
          
          importPackage(com.stardust.autojs.execution)
          let listener=
          ScriptExecutionListener({
             onStart: 
               function(execution) {
                  let topScope = execution.getEngine().getRuntime().getTopLevelScope()
                  let ScriptableObject = org.mozilla.javascript.ScriptableObject
                  for (let key in args) {
                       ScriptableObject.putProperty(topScope, key, args[key])
                  }
               }
          })
          if(!isPro()){
              //普通aj
              let field=runtime.engines.getClass().getDeclaredField("mEngineService")
              field.setAccessible(true)
              let service=field.get(runtime.engines)
              field.setAccessible(false)
              service.execute(scriptSource,listener,fillConfig(config))
          }else return runtime.engines.execute(null,ScriptExecutionTask(scriptSource,listener,fillConfig(config)));  
      }
      var fillConfig = function(c) {
          var config = new com.stardust.autojs.execution.ExecutionConfig();
          c = c || {};
          c.path = c.path || files.cwd();
          if (c.path) {
              config.workingDirectory = c.path;
          }
          config.delay = c.delay || 0;
          config.interval = c.interval || 0;
          config.loopTimes = (c.loopTimes === undefined) ? 1 : c.loopTimes;
          if (c.arguments) {
              var arguments = c.arguments;
              for (var key in arguments) {
                  if (arguments.hasOwnProperty(key)) {
                      config.setArgument(key, arguments[key]);
                  }
              }
          }
          if(isPro())config.projectConfig = engines.myEngine().getTag("execution.config").projectConfig;
          return config;
      }
      function isPro(){
          return app.autojs.versionName.toLowerCase().indexOf("pro")!=-1 || app.versionName.toLowerCase().indexOf("pro")!=-1
      }
      return advancedEngines
  })()