refactor: rewrite init.js

This commit is contained in:
hyb1996
2018-02-27 16:32:10 +08:00
parent 235115edf3
commit a43ac939e9
2 changed files with 107 additions and 96 deletions

View File

@@ -1,22 +1,30 @@
var global = this;
__runtime__.init(); runtime.init();
__importClass__ = importClass; (function(){
var importClass = function(pack){ //重定向importClass使得其支持字符串参数
global.importClass =
(function(){
var __importClass__ = importClass;
return function(pack){
if(typeof(pack) == "string"){ if(typeof(pack) == "string"){
__importClass__(Packages[pack]); __importClass__(Packages[pack]);
}else{ }else{
__importClass__(pack); __importClass__(pack);
} }
} }
})();
var __that__ = this;
var Promise = require('promise.js');
var JSON = require('__json2__.js');
var util = require('__util__.js');
__runtime__.bridges.setBridges({ //初始化不依赖环境的模块
global.Promise = require('promise.js');
global.JSON = require('__json2__.js');
global.util = require('__util__.js');
global.device = runtime.device;
//设置JavaScriptBridges用于与Java层的交互和数据转换
runtime.bridges.setBridges({
call: function(func, target, args){ call: function(func, target, args){
var arr = []; var arr = [];
var len = args.length; var len = args.length;
@@ -25,17 +33,17 @@ __runtime__.bridges.setBridges({
} }
return func.apply(target, arr); return func.apply(target, arr);
}, },
toArray: function(o){ toArray: function(list){
var arr = []; var arr = [];
for(var i = 0; i < o.size(); i++){ for(var i = 0; i < list.size(); i++){
arr.push(o.get(i)); arr.push(list.get(i));
} }
for(var key in o){ for(var key in list){
if(arr[key]) if(arr[key])
continue; continue;
var v = o[key]; var v = list[key];
if(typeof(v) == 'function'){ if(typeof(v) == 'function'){
arr[key] = v.bind(o); arr[key] = v.bind(list);
}else{ }else{
arr[key] = v; arr[key] = v;
} }
@@ -45,19 +53,18 @@ __runtime__.bridges.setBridges({
toString: function(o){ toString: function(o){
return String(o); return String(o);
} }
}); });
var device = __runtime__.device; //一些内部函数
global.__asGlobal__ = function(obj, functions){
var __asGlobal__ = function(obj, functions){
var len = functions.length; var len = functions.length;
for(var i = 0; i < len; i++) { for(var i = 0; i < len; i++) {
var funcName = functions[i]; var funcName = functions[i];
__that__[funcName] = obj[funcName].bind(obj); global[funcName] = obj[funcName].bind(obj);
}
} }
}
var __exitIfError__ = function(action, defReturnValue){ global.__exitIfError__ = function(action, defReturnValue){
try{ try{
return action(); return action();
}catch(err){ }catch(err){
@@ -72,30 +79,34 @@ var __exitIfError__ = function(action, defReturnValue){
} }
return defReturnValue; return defReturnValue;
} }
}; };
require("__globals__")(__runtime__, this); //初始化一般模块
require("__globals__")(runtime, global);
(function(scope){
(function(scope){
var modules = ['app', 'automator', 'console', 'dialogs', 'io', 'selector', 'shell', 'web', 'ui', var modules = ['app', 'automator', 'console', 'dialogs', 'io', 'selector', 'shell', 'web', 'ui',
"images", "timers", "threads", "events", "engines", "RootAutomator", "http", "storages", "floaty", "images", "timers", "threads", "events", "engines", "RootAutomator", "http", "storages", "floaty",
"sensors", "media"]; "sensors", "media"];
var len = modules.length; var len = modules.length;
for(var i = 0; i < len; i++) { for(var i = 0; i < len; i++) {
var m = modules[i]; var m = modules[i];
scope[m] = require('__' + m + '__')(scope.__runtime__, scope); scope[m] = require('__' + m + '__')(scope.runtime, scope);
} }
})(__that__); })(global);
__importClass__(android.view.KeyEvent); importClass(android.view.KeyEvent);
__importClass__(com.stardust.autojs.core.util.Shell); importClass(com.stardust.autojs.core.util.Shell);
(function(){ //重定向require以便支持相对路径
(function(){
var __require__ = require; var __require__ = require;
require = function(path){ global.require = function(path){
path = files.path(path); path = files.path(path);
return __require__(path); return __require__(path);
}; };
})();
})(); })();

View File

@@ -33,7 +33,7 @@ public abstract class JavaScriptEngine extends ScriptEngine.AbstractScriptEngine
} }
mRuntime = runtime; mRuntime = runtime;
mRuntime.engines.setCurrentEngine(this); mRuntime.engines.setCurrentEngine(this);
put("__runtime__", runtime); put("runtime", runtime);
} }