2019-11-25

https://blog.csdn.net/feiyunjs/article/details/94722766

/**

* 整理者: 家

* 日期:  20190224

* 妈呀:  整理了一宿,现在是早上6:34

* 功能: 把某些常用的函数集中起来,方便调用

* 函数来源: 都是群里的大佬写的,稻草人,+攀登,Ai,破晓的星辰,灶猫,家,浩然,白酒煮饭,生僻字大佬,内个谁,Xero,无名小姐,壞蛋┭,锦瑟安年Ω,专业滥竽充数,膜拜以上几位大神,不管你们同意不同意,我都把你们的代码搬到一块了,O(∩_∩)O哈哈~

* git:  https://github.com/snailuncle/autojsCommonFunctions/blob/master/autojsCommonFunctions.js

*/

//此代码由飞云脚本圈整理提供(www.feiyunjs.com)

//  //导入模块

//  function 导入常用函数模块(){

//  var url='https://raw.githubusercontent.com/snailuncle/autojsCommonFunctions/master/autojsCommonFunctions.js'

//  var r = http.get(url)

//  log("code = " + r.statusCode);

//  var html=r.body.bytes()

//  files.writeBytes('./autojsCommonFunctions.js',html)

//  var common=require('./autojsCommonFunctions.js')

//  return common

// }

// var common=导入常用函数模块()

// log(common)

// for(let i=0;i<33;i++){

//  common.闪光弹('fire in the hole')

// }

[

  '点击控件',

  '铃声',

  '启动app',

  '停止app',

  '卸载app',

  '卸载app没root',

  '清除app数据',

  '启动最新安装的app',

  '停止最新安装的app',

  '卸载最新安装的app',

  '清除最新安装的app数据',

  '静默安装app',

  '获取app图标',

  '控制app联网',

  '获取手机上所有的app名字',

  '点击输入框弹出输入法',

  '使所有输入框点击时都能弹出输入法',

  '失去焦点',

  '是否root',

  '获取指定应用的版本号',

  '打开qq群名片',

  '打开qq名片',

  'qq强制聊天',

  '字节变为gbk中文',

  '最新安装的app',

  '文件修改时间',

  '文件大小',

  '字符串变字节',

  '日期加N天',

  'md5',

  '是横屏还是竖屏',

  '截图',

  '随机字符',

  '获取时间',

  '调整手机音量',

  '微信扫一扫',

  '公共字符串',

  '网络',

  '安卓intent源码',

  '获取手机ip地理位置',

  '替换系统文件',

  '编辑距离',

  '数组交集',

  '提取包含关键字的app',

  '获取页面所有文字',

  '悬浮控制',

  '闪光弹',

  '打开开发者选项',

  '气泡',

  '随机字符串',

  'wifi状态',

  '开关飞行模式',

  '上滑',

  '获取deflate网页内容',

  '获取gzip网页内容'

  ]

  var common = {}

  Array.prototype.intersect = function () {

    var result = new Array();

    var obj = {};

    for (var i = 0; i < arguments.length; i++) {

      for (var j = 0; j < arguments[i].length; j++) {

        var str = arguments[i][j];

        if (!obj[str]) {

          obj[str] = 1;

        } else {

          obj[str]++;

          if (obj[str] == arguments.length) {

            result.push(str);

          }

        } //end else

      } //end for j

    } //end for i

    return result;

  }

  //集合去掉重复

  Array.prototype.uniquelize = function () {

    var tmp = {},

      ret = [];

    for (var i = 0, j = this.length; i < j; i++) {

      if (!tmp[this[i]]) {

        tmp[this[i]] = 1;

        ret.push(this[i]);

      }

    }

    return ret;

  }

  //并集

  Array.prototype.union = function () {

    var arr = new Array();

    var obj = {};

    for (var i = 0; i < arguments.length; i++) {

      for (var j = 0; j < arguments[i].length; j++) {

        var str = arguments[i][j];

        if (!obj[str]) {

          obj[str] = 1;

          arr.push(str);

        }

      } //end for j

    } //end for i

    return arr;

  }

  //2个集合的差集 在arr不存在

  Array.prototype.minus = function (arr) {

    var result = new Array();

    var obj = {};

    for (var i = 0; i < arr.length; i++) {

      obj[arr[i]] = 1;

    }

    for (var j = 0; j < this.length; j++) {

      if (!obj[this[j]]) {

        obj[this[j]] = 1;

        result.push(this[j]);

      }

    }

    return result;

  };

  // console.log(Array.intersect(["1", "2", "3"], ["2", "3", "4", "5", "6"])); //[2,3]

  // console.log([1, 2, 3, 2, 3, 4, 5, 6].uniquelize()); //[1,2,3,4,5,6]

  // console.log(Array.union(["1", "2", "3"], ["2", "3", "4", "5", "6"], ["5", "6", "7", "8", "9"]))

  // console.log(["2", "3", "4", "5", "6"].minus(["1", "2", "3"]));

  common.点击控件 = function (view) {

    log(arguments.callee.name + '开始')

    log(view)

    if (view) {

      var x = view.bounds().centerX()

      var y = view.bounds().centerY()

      log('将要点击的坐标 %s,%s', x, y)

      press(x, y, 1)

    } else {

      throw '传入点击控件中的view异常'

    }

    log(arguments.callee.name + '结束')

  }

  common.铃声 = function (铃声类型, 是否循环播放, 播放时长) {

    var 铃声类型 = 铃声类型 || 0

    var 播放时长 = 播放时长 || 6000

    var 是否循环播放 = 是否循环播放 || false

    if (是否循环播放) {

      播放时长 = 666 * 1000

    }

    var 铃声选择结果 = android.media.RingtoneManager.TYPE_NOTIFICATION

    switch (铃声类型) {

      case 0:

        铃声选择结果 = android.media.RingtoneManager.TYPE_RINGTONE

        break;

      case 1:

        铃声选择结果 = android.media.RingtoneManager.TYPE_ALARM

        break;

      case 2:

        铃声选择结果 = android.media.RingtoneManager.TYPE_ALL

        break;

      default:

        break;

    }

    var mp = new android.media.MediaPlayer();

    mp.setDataSource(context, android.media.RingtoneManager.getDefaultUri(铃声选择结果));

    if (是否循环播放) mp.setLooping(true);

    mp.prepare();

    mp.start();

    threads.start(function () {

      sleep(播放时长)

      if (mp.isPlaying()) {

        mp.stop()

      }

    });

    return mp;

  }

  common.启动app = function (appName) {

    launchApp(appName)

  }

  common.停止app = function (appName) {

    var packageName=getPackageName(appName);

    shell('am force-stop ' + packageName,true);

  }

  common.卸载app = function (appName) {

    var packageName=getPackageName(appName);

    shell("pm uninstall "+packageName,true)

  }

  common.清除app数据 = function (appName) {

    var packageName=getPackageName(appName);

    shell('pm clear ' + packageName,true);

  }

  common.卸载最新安装的app=function (){

    var pm = context.getPackageManager()

    var appList=pm.getInstalledApplications(0)

    var appInfoList=[]

    for(let i=0;i<appList.size();i++){

      var app=appList.get(i)

      var appInfo={

        appName:app.loadLabel(pm),

        packageName:app.packageName,

        isSystemApp:app.isSystemApp(),

        firstInstallTime:pm.getPackageInfo(app.packageName,0).firstInstallTime

      }

      appInfoList.push(appInfo)

    }

    appInfoList.sort((a,b)=>{

      return b.firstInstallTime-a.firstInstallTime

    })

    log('最新安装的app是=%j',appInfoList[0])

    var packageName=appInfoList[0].packageName

    shell("pm uninstall "+packageName,true)

    return appInfoList[0].appName

  }

  common.清除最新安装的app数据=function (){

    var pm = context.getPackageManager()

    var appList=pm.getInstalledApplications(0)

    var appInfoList=[]

    for(let i=0;i<appList.size();i++){

      var app=appList.get(i)

      var appInfo={

        appName:app.loadLabel(pm),

        packageName:app.packageName,

        isSystemApp:app.isSystemApp(),

        firstInstallTime:pm.getPackageInfo(app.packageName,0).firstInstallTime

      }

      appInfoList.push(appInfo)

    }

    appInfoList.sort((a,b)=>{

      return b.firstInstallTime-a.firstInstallTime

    })

    log('最新安装的app是=%j',appInfoList[0])

    var packageName=appInfoList[0].packageName

    shell('pm clear ' + packageName,true);

    return appInfoList[0].appName

  }

  common.停止最新安装的app=function (){

    var pm = context.getPackageManager()

    var appList=pm.getInstalledApplications(0)

    var appInfoList=[]

    for(let i=0;i<appList.size();i++){

      var app=appList.get(i)

      var appInfo={

        appName:app.loadLabel(pm),

        packageName:app.packageName,

        isSystemApp:app.isSystemApp(),

        firstInstallTime:pm.getPackageInfo(app.packageName,0).firstInstallTime

      }

      appInfoList.push(appInfo)

    }

    appInfoList.sort((a,b)=>{

      return b.firstInstallTime-a.firstInstallTime

    })

    log('最新安装的app是=%j',appInfoList[0])

    var packageName=appInfoList[0].packageName

    shell('am force-stop ' + packageName,true);

    return appInfoList[0].appName

  }

  common.启动最新安装的app=function (){

    var pm = context.getPackageManager()

    var appList=pm.getInstalledApplications(0)

    var appInfoList=[]

    for(let i=0;i<appList.size();i++){

      var app=appList.get(i)

      var appInfo={

        appName:app.loadLabel(pm),

        packageName:app.packageName,

        isSystemApp:app.isSystemApp(),

        firstInstallTime:pm.getPackageInfo(app.packageName,0).firstInstallTime

      }

      appInfoList.push(appInfo)

    }

    appInfoList.sort((a,b)=>{

      return b.firstInstallTime-a.firstInstallTime

    })

    log('最新安装的app是=%j',appInfoList[0])

    var packageName=appInfoList[0].packageName

    launch(packageName)

    return appInfoList[0].appName

  }

  common.点击输入框弹出输入法=function (window,view){

    view.on(

      "touch_down", function () {

        window.requestFocus();

        view.requestFocus();

      }

    )

    view.on(

      "key", function (keyCode,event) {

        if(event.getAction()==event.ACTION_DOWN && keyCode == keys.back){

          window.disableFocus()

          event.consumed=true

        }

        window.requestFocus();

        view.requestFocus();

      }

    )

  }

  common.使所有输入框点击时都能弹出输入法=function (window,inputBoxViewArr){

    for(let i=0;i<inputBoxViewArr.length;i++){

      var view=inputBoxViewArr[i]

      common.点击输入框弹出输入法(window,view)

    }

  }

  common.失去焦点=function (window){

    window.disableFocus()

  }

  common.是否root=function(){

    var r=shell("ls /system/bin",true).result.toString()

    if(r.length>50){

      return true

    }else{

      return false

    }

  }

  common.获取指定应用的版本号 = function (appName) {

    /**

    * 获取指定应用的版本号

    * @param {string} packageName 应用包名

    */

    function getPackageVersion(packageName) {

      importPackage(android.content);

      var pckMan = context.getPackageManager();

      var packageInfo = pckMan.getPackageInfo(packageName, 0);

      return packageInfo.versionName;

    }

    var packageName = getPackageName(appName);

    return getPackageVersion(packageName)

  }

  common.打开qq群名片=function (qq群号){

    app.startActivity({

      action: "android.intent.action.VIEW",

      data:"mqqapi://card/show_pslcard?card_type=group&uin="+qq群号,

      packageName: "com.tencent.mobileqq",

    });//打开qq群名片

  }

  common.打开qq名片=function (qq号){

    app.startActivity({

      action: "android.intent.action.VIEW",

      data:"mqqapi://card/show_pslcard?uin="+qq号,

      packageName: "com.tencent.mobileqq",

    });//打开qq名片

  }

  common.qq强制聊天=function (qq号){

    app.startActivity({

      action: "android.intent.action.VIEW",

      data:"mqq://im/chat?chat_type=wpa&version=1&src_type=web&uin="+qq号,

      packageName: "com.tencent.mobileqq",

    });//qq强制聊天

  }

  common.字节变为gbk中文 = function (bytesContent) {

    var str = new java.lang.String(bytesContent, "gbk")

    return str

  }

  common.最新安装的app = function () {

    var pm = context.getPackageManager()

    var appList=pm.getInstalledApplications(0)

    var appInfoList=[]

    for(let i=0;i<appList.size();i++){

      var app=appList.get(i)

      var appInfo={

        appName:app.loadLabel(pm),

        packageName:app.packageName,

        isSystemApp:app.isSystemApp(),

        firstInstallTime:pm.getPackageInfo(app.packageName,0).firstInstallTime

      }

      appInfoList.push(appInfo)

    }

    appInfoList.sort((a,b)=>{

      return b.firstInstallTime-a.firstInstallTime

    })

    log('最新安装的app是=%j',appInfoList[0])

    return appInfoList[0]

  }

  common.文件修改时间 = function (path) {

    var time=new java.io.File(files.path(path)).lastModified();

    return  time

  }

  common.文件大小 = function (path) {

    var size = new java.io.File(path).length()

    return size

  }

  common.字符串变字节 = function (string) {

    return new java.lang.String(string).getBytes();

  }

  common.日期加N天 = function (n) {

    var now = new Date();

    now.setDate(now.getDate()+n);

    return (now);

  }

  common.md5 = function (string) {

    return java.math.BigInteger(1,java.security.MessageDigest.getInstance("MD5")

    .digest(java.lang.String(string).getBytes())).toString(16);

  }

  common.是横屏还是竖屏 = function () {

    var a = (context.resources.configuration.orientation);

    if (a === 1) {

      toastLog("这是竖屏!!");

      return '竖屏'

    }

    else {

      toastLog("这是横屏!!");}

      return '横屏'

  }

  common.截图 = function (path) {

    var path=path || '/sdcard/1temp.png'

    var dd = shell("screencap -p "+path,true)

    var img

    if(dd.code ==0){

        img = images.read(path)

    }else{

        log("错误信息:")

        log(dd.error)

    }

    return img

  }

  common.随机字符=function (n){

    var n= n || 8

    var str="";

    for(var i=0;i<n;i++){

    str+=String.fromCharCode(random(0,65535));

    }

    return str;

    }

  common.获取时间=function (time) {

    if (time) {

        return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time));

    } else {

        return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());

    }

  }

  common.调整手机音量=function (){

    var am = context.getSystemService(context.AUDIO_SERVICE)

    // STREAM_MUSIC这个自己试试,是调整那种音量,范围0-6  自己试试,我也不知道

    var STREAM_MUSIC = 1

    // 1 增大音量  -1  降低音量  0 不变

    var ADJUST_RAISE = -1

    //  1 显示调整音量界面  0  不显示界面

    var FLAG_SHOW_UI = 1

    am.adjustStreamVolume(STREAM_MUSIC, ADJUST_RAISE, FLAG_SHOW_UI)

    //获取最大音量

    var max = am.getStreamMaxVolume(STREAM_MUSIC);

    log(max)

    //获取当前音量

    toastLog('最大音量'+max)

    sleep(2000)

    var current = am.getStreamVolume(STREAM_MUSIC);

    log(current)

    toastLog('当前音量'+current)

  }

  common.微信扫一扫=function (){

    context.startActivity(app.intent({

      action: "VIEW",

      className:"com.tencent.mm.ui.LauncherUI",

      packageName:"com.tencent.mm",

      extras: {

          "LauncherUI.From.Scaner.Shortcut": true

      }

    }).setFlags(335544320));

  }

  common.公共字符串=function (str1,str2){

    // var str1 = "aaabbba"

    // var str2 = " bbbcaaa"

    function find(str1, str2) {

        //创建存放重复内容的数组

        var all = new Array();

        //字符串转字符数组

        var str_1 = str1.split("");

        var str_2 = str2.split("");

        for (var i = 0; i < str_1.length; i++) {

            for (var l = 0; l < str_2.length; l++) {

                //判断是否重复

                var lo = all.length;

                all[lo] = "";

                //判断之后的字符串是否相同

                for (var k = 0; str_1[i + k] == str_2[l + k]; k++) {

                    all[lo] = all[lo] + str_1[i + k];

                    //防止数组越界,提前停止循环

                    if (i + k == str_1.length-1||i+k==str_2.length-1) {

                        break;

                    }

                }

            }

        }

        var most = 0;

        var fu = new Array();

        for (var j = 0; j < all.length; j++) {

            //去除空的内容

            if (all[j] != "") {

                //按照大小排序(删除部分小的)

                if (all[j].split("").length >= most) {

                    most = all[j].split("").length;

                    fu[fu.length] = all[j];

                }

            }

        }

        //将不重复内容写到新数组

        var wu=new Array();

        for(var i=0;i<fu.length;i++){

            var c=false;

            for(var l=0;l<wu.length;l++){

                if(fu[i]==wu[l]){

                    c=true;

                }

            }

            if(!c){

                wu[wu.length]=fu[i];

            }

        }

        //将最长的内容写到新数组

        var ml=new Array();

        //获得最后一个字符串的长度(最长)

        var longest=wu[wu.length-1].split("").length;

        //长度等于最长的内容放到新数组

        for(var i=wu.length-1;i>=0;i--){

            if(wu[i].split("").length==longest){

                ml[ml.length]=wu[i];

            }else{

                //提前结束循环

                break;

            }

        }

        return ml

    }

    var result=find(str1, str2)

    log(result)

    return result

  }

  common.网络=function (){

    var intent = new Intent();

    importClass(android.content.BroadcastReceiver);

    importClass(android.content.ContextWrapper);

    importClass(android.content.IntentFilter);

    importClass(android.net.ConnectivityManager);

    var filter = new IntentFilter();

    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);

    new ContextWrapper(context).registerReceiver(a = new BroadcastReceiver({

        onReceive: function(context, intent) {

          var action = intent.getAction();

            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {

              var mConnectivityManager = context.getSystemService(context.CONNECTIVITY_SERVICE);

                netInfo = mConnectivityManager.getActiveNetworkInfo();

                if (netInfo != null && netInfo.isAvailable()) {

                    /////////////网络连接

                    var name = netInfo.getTypeName();

                    if (netInfo.getType() == ConnectivityManager.TYPE_WIFI) {

                        /////WiFi网络

                        toastLog("WiFi网络");

                        return "WiFi网络"

                    } else if (netInfo.getType() == ConnectivityManager.TYPE_ETHERNET) {

                        /////有线网络

                        toastLog("有线网络");

                        return "有线网络"

                    } else if (netInfo.getType() == ConnectivityManager.TYPE_MOBILE) {

                        /////////3g网络

                        toastLog("3g网络");

                        return "3g网络"

                    }

                } else {

                    ////////网络断开

                    toastLog("网络断开");

                    return "网络断开"

                }

            }

        }

    }), filter);

  }

  common.安卓intent源码=function (){

    var intent = new Intent();

    intent.setAction("android.settings.ACCESSIBILITY_SETTINGS");

    //辅助功能

    //intent.setAction("android.settings.ADD_ACCOUNT_SETTINGS");

    //添加账户

    //intent.setAction("android.settings.AIRPLANE_MODE_SETTINGS");

    //系统设置首页

    //intent.setAction("android.settings.APN_SETTINGS");

    //APN设置

    //intent.setAction("android.settings.APPLICATION_SETTINGS");

    //应用管理

    //intent.setAction("android.settings.BATTERY_SAVER_SETTINGS");

    //节电助手

    //intent.setAction("android.settings.BLUETOOTH_SETTINGS");

    //蓝牙

    //intent.setAction("android.settings.CAPTIONING_SETTINGS");

    //字幕

    //intent.setAction("android.settings.CAST_SETTINGS");

    //无线显示

    //intent.setAction("android.settings.DATA_ROAMING_SETTINGS");

    //移动网络

    //intent.setAction("android.settings.DATE_SETTINGS");

    //日期和时间设置

    //intent.setAction("android.settings.DEVICE_INFO_SETTINGS");

    //关于手机

    //intent.setAction("android.settings.DISPLAY_SETTINGS");

    //显示设置

    //intent.setAction("android.settings.DREAM_SETTINGS");

    //互动屏保设置

    //intent.setAction("android.settings.HARD_KEYBOARD_SETTINGS");

    //实体键盘

    //intent.setAction("android.settings.HOME_SETTINGS");

    //应用权限,默认应用设置,特殊权限

    //intent.setAction("android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS");

    //忽略电池优化设置

    //intent.setAction("android.settings.INPUT_METHOD_SETTINGS");

    //可用虚拟键盘设置

    //intent.setAction("android.settings.INPUT_METHOD_SUBTYPE_SETTINGS");

    //安卓键盘语言设置(AOSP)

    //intent.setAction("android.settings.INTERNAL_STORAGE_SETTINGS");

    //内存和存储

    //intent.setAction("android.settings.LOCALE_SETTINGS");

    //语言偏好设置

    //intent.setAction("android.settings.LOCATION_SOURCE_SETTINGS");

    //定位服务设置

    //intent.setAction("android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS");

    //所有应用

    //intent.setAction("android.settings.MANAGE_APPLICATIONS_SETTINGS");

    //应用管理

    //intent.setAction("android.settings.MANAGE_DEFAULT_APPS_SETTINGS");

    //与ACTION_HOME_SETTINGS相同

    //intent.setAction("android.settings.action.MANAGE_OVERLAY_PERMISSION");

    //在其他应用上层显示,悬浮窗

    //intent.setAction("android.settings.MANAGE_UNKNOWN_APP_SOURCES");

    //安装未知应用 安卓8.0

    //intent.setAction("android.settings.action.MANAGE_WRITE_SETTINGS");

    //可修改系统设置 权限

    //intent.setAction("android.settings.MEMORY_CARD_SETTINGS");

    //内存与存储

    //intent.setAction("android.settings.NETWORK_OPERATOR_SETTINGS");

    //可用网络选择

    //intent.setAction("android.settings.NFCSHARING_SETTINGS");

    //NFC设置

    //intent.setAction("android.settings.NFC_SETTINGS");

    //网络中的 更多设置

    //intent.setAction("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");

    //通知权限设置

    //intent.setAction("android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS");

    //勿扰权限设置

    //intent.setAction("android.settings.ACTION_PRINT_SETTINGS");

    //打印服务设置

    //intent.setAction("android.settings.PRIVACY_SETTINGS");

    //备份和重置

    //intent.setAction("android.settings.SECURITY_SETTINGS");

    //安全设置

    //intent.setAction("android.settings.SHOW_REGULATORY_INFO");

    //监管信息

    //intent.setAction("android.settings.SOUND_SETTINGS");

    //声音设置

    //intent.setAction("android.settings.SYNC_SETTINGS");

    //添加账户设置

    //intent.setAction("android.settings.USAGE_ACCESS_SETTINGS");

    //有权查看使用情况的应用

    //intent.setAction("android.settings.USER_DICTIONARY_SETTINGS");

    //个人词典

    //intent.setAction("android.settings.VOICE_INPUT_SETTINGS");

    //辅助应用和语音输入

    //intent.setAction("android.settings.VPN_SETTINGS");

    //VPN设置

    //intent.setAction("android.settings.VR_LISTENER_SETTINGS");

    //VR助手

    //intent.setAction("android.settings.WEBVIEW_SETTINGS");

    //选择webview

    //intent.setAction("android.settings.WIFI_IP_SETTINGS");

    //高级WLAN设置

    //intent.setAction("android.settings.WIFI_SETTINGS");

    //选择WIFI,连接WIFI

    app.startActivity(intent);

  }

  common.获取手机ip地理位置=function (){

    var ip地理位置 = false

    var ip地理位置正则 = /本机IP:&nbsp;\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}<\/span>([\s\S]*?)<\/td/

    var ipUrl = "http://www.baidu.com/s?ie=UTF-8&wd=ip%E5%BD%92%E5%B1%9E%E5%9C%B0%E6%9F%A5%E8%AF%A2"

    var r = http.get(ipUrl);

    log("code = " + r.statusCode);

    var htmlResult = r.body.string()

    ip地理位置 = ip地理位置正则.exec(htmlResult)

    if (ip地理位置) {

      ip地理位置 = ip地理位置正则.exec(ip地理位置)

      ip地理位置 = ip地理位置[1]

      toastLog(ip地理位置)

      return ip地理位置

    } else {

      log('没有查询到Ip地理位置,脚本停止')

      return false

    }

  }

  common.获取app图标=function (appName){

    importClass(java.io.File);

    importClass(java.io.FileOutputStream);

    importClass(android.graphics.Bitmap);

    var pm = context.getPackageManager();

    importClass(android.util.DisplayMetrics)

    var name = appName

    var packageName = app.getPackageName(name);

    var appInfo = pm.getApplicationInfo(packageName, 0);

    var bmp = appInfo.loadIcon(pm).getBitmap();

    files.create("/sdcard/"+name+".jpg");

    var f = new File("/sdcard/"+name+"qq.jpg");

    var fOut = new FileOutputStream(f);

    bmp.compress(Bitmap.CompressFormat.JPEG, 100, fOut);

    fOut.flush();

    fOut.close();

    var img=images.read("sdcard/"+name+".jpg")

    return img

    // app.viewFile("sdcard/"+name+".jpg")

  }

  common.替换系统文件 = function (syspath,sdpath) {

    // // var path = "/data/data/com.aaa.bbb"

    // // var pathSD = "/sdcard/com.aaa.bbb"

    // //删除原来的文件

    // shell('chown root:root ' + path, true)

    // shell('rm ' + path + " -rf", true);

    // shell('rm ' + pathSD + " -rf", true);

    // sleep(2000)

    // // 解压备份的文件

    // var inkeSdacrdPath = "/sdcard/com.aaa.bbb.zip"

    // var 文件路径 = inkeSdacrdPath

    // var 文件夹路径 = "/sdcard"

    // com.stardust.io.Zip.unzip(new java.io.File(文件路径), new java.io.File(文件夹路径))

    // sleep(2000)

    // //移动解压后的文件

    // shell("mv -f /sdcard/com.aaa.bbb /data/data/com.aaa.bbb", true);

    // //修改权限

    // shell("chmod -R 777 /data/data/com.aaa.bbb", true);

    //------------------------------------------------

    //------------------------------------------------

    //------------------------------------------------

    // var path = "/data/data/com.aaa.bbb"

    // var pathSD = "/sdcard/com.aaa.bbb"

    //删除原来的文件

    shell('chown root:root ' + syspath, true)

    shell('rm ' + path + " -rf", true);

    sleep(2000)

    //移动解压后的文件

    shell("mv -f "+sdpath+" "+syspath, true);

    //修改权限

    shell("chmod -R 777 "+syspath, true);

  }

  common.编辑距离 = function (sm,sn){

    var m=sm.length+1

    var n=sn.length+1

    var matrix = new Array();

    for ( var i = 0; i < m; i++) {

        matrix[i] = new Array();

        for ( var j = 0; j < n; j++) {

            matrix[i][j] = 0;

        }

    }

    matrix[0][0]=0

    for(let i=1;i<m;i++){

        matrix[i][0] = matrix[i-1][0] + 1

    }

    for(let j=1;j<n;j++){

        matrix[0][j] = matrix[0][j-1]+1

    }

    cost = 0

    for(let i=1;i<m;i++){

        for(let j=1;j<n;j++){

            if(sm[i-1]==sn[j-1]){

                cost = 0

            }

            else{

                cost = 1

            }

            matrix[i][j]=Math.min(matrix[i-1][j]+1,matrix[i][j-1]+1,matrix[i-1][j-1]+cost)

        }

    }

    return matrix[m-1][n-1]

    // var mindist=minEditDist("126","456")

    // print(mindist)

  }

  common.静默安装app = function (apk路径) {

    shell("pm install -r " + apk路径 , true)

  }

  common.获取手机上所有的app名字 = function () {

    var 所有的app名字=[]

    var pm=context.getPackageManager()

    let list=pm.getInstalledApplications(0)

    for(let i=0;i<list.size();i++){

      let p=list.get(i)

      var app={

        appName:p.loadLabel(pm),

        packageName:p.packageName

      }

      所有的app名字.push(app.appName)

    }

    return 所有的app名字

  }

  common.数组交集=function(){

    var 交集 = Array.intersect(arr1, arr2)

    log(交集)

    return 交集

  }

  common.控制app联网 = function (appName, 是否允许联网联网) {

    var 是否允许联网联网 = 是否允许联网联网 || true

    //作者: 家  QQ203118908

    //本来打算用iptables-restore用文件形式更新防火墙规则,

    //可是iptables-restore出现了bug,2013年就有人提过这个bug

    //https://linux.debian.bugs.dist.narkive.com/J0hbJiR6/bug-710379-xtables-addons-common-quota2-module-iptables-save-creates-invalid-record

    //又得改,坑爹

    //马丹,iptables -D INPUT -lineNumber也有BUG,

    //提示 index of deletion too big

    //日了够了

    //又得改,坑爹

    // sudo iptables -D OUTPUT 1 -t nat

    //

    // uid=`cat /data/system/packages.list | grep com.sohu.inputmethod.sogou | busybox awk '{print $2}'`

    // iptables -t filter -A OUTPUT -m owner --uid-owner=$uid -j DROP

    // 以上是android iptables 屏蔽某个app网络访问的内容,

    function 联网控制(appName) {

      // -A OUTPUT -m owner --uid-owner 10105 -j ACCEPT

      // -A OUTPUT -m owner --uid-owner 10105 -j DROP

      this.等待shell执行完毕的时间 = 0

      this.防火墙规则路径 = '/sdcard/iptables.txt'

      this.uid路径 = '/sdcard/' + appName + 'uidOwner.txt'

      this.appName = appName

      this.packageName = getPackageName(this.appName)

      this.执行shell = (cmd) => {

        var result = shell(cmd, true);

        console.show();

        log(result);

        if (result.code == 0) {

          toastLog("执行成功");

        } else {

          toastLog("执行失败!请到控制台查看错误信息");

        }

        sleep(this.等待shell执行完毕的时间)

      }

      this.uid = () => {

        var cmd = 'cat /data/system/packages.list | grep ' + this.packageName + ' > ' + this.uid路径

        log('cmd=', cmd)

        this.执行shell(cmd)

        // cat /data/system/packages.list | grep com.tencent.mobileqq > /sdcard/QQuidOwner.txt

        var 包含uid的文本 = files.read('/sdcard/' + appName + 'uidOwner.txt')

        log('包含uid的文本=', 包含uid的文本)

        var uidReg = new RegExp(this.packageName + '\\s*(\\d+)')

        log('uidReg=', uidReg)

        var uid = 包含uid的文本.match(uidReg)[1]

        log(uid)

        return uid

      }

      this.允许联网规则 = 'iptables -t filter -A OUTPUT -m owner --uid-owner ' + this.uid() + ' -j ACCEPT'

      this.禁止联网规则 = 'iptables -t filter -A OUTPUT -m owner --uid-owner ' + this.uid() + ' -j DROP'

      this.允许 = () => {

        this.清空该app的防火墙规则()

        this.将防火墙规则写入系统(this.允许联网规则)

      }

      this.禁止 = () => {

        this.清空该app的防火墙规则()

        this.将防火墙规则写入系统(this.禁止联网规则)

      }

      this.将防火墙规则写入系统 = (防火墙规则) => {

        var cmd = 防火墙规则

        this.执行shell(cmd)

      }

      this.导出防火墙规则 = () => {

        var cmd = 'iptables-save > ' + this.防火墙规则路径

        this.执行shell(cmd)

      }

      this.防火墙规则 = () => {

        this.导出防火墙规则()

        var 防火墙规则 = files.read(this.防火墙规则路径)

        log('防火墙规则=', 防火墙规则)

        return 防火墙规则

      }

      this.清空该app的防火墙规则 = () => {

        var 防火墙规则 = this.防火墙规则()

        // stringObject.replace(regexp/substr,replacement)

        // -A OUTPUT -m owner --uid-owner 10105 -j ACCEPT

        // -A OUTPUT -m owner --uid-owner 10105 -j ACCEPT

        // -A OUTPUT -m owner --uid-owner 10105 -j DROP

        // -A OUTPUT -m owner --uid-owner 10105 -j ACCEPT

        // -A OUTPUT -m owner --uid-owner 10105 -j ACCEPT

        // 删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j DROP):

        // [root@test ~]# iptables -D INPUT -s 192.168.1.5 -j DROP

        // iptables -t filter -A OUTPUT -m owner --uid-owner=$uid -j DROP

        var 要删除的规则reg = new RegExp('-A (OUT|IN)PUT -m owner --uid-owner ' + this.uid() + ' -j (ACCEPT|DROP)', 'g')

        // 要删除的规则reg= /-A OUTPUT -m owner --uid-owner 10105 -j (ACCEPT|DROP)/

        // -A OUTPUT -m owner --uid-owner 10105 -j (ACCEPT|DROP)

        // iptables -D OUTPUT -m owner --uid-owner 10105 -j ACCEPT

        log('要删除的规则reg=', 要删除的规则reg)

        var new防火墙规则 = 防火墙规则.match(要删除的规则reg, '')

        log('new防火墙规则=', new防火墙规则)

        // new防火墙规则= [

        //  '-A OUTPUT -m owner --uid-owner 10105 -j ACCEPT',

        //  '-A OUTPUT -m owner --uid-owner 10105 -j DROP'

        //              ]

        if (new防火墙规则) {

          for (let i = 0; i < new防火墙规则.length; i++) {

            var 规则 = new防火墙规则[i]

            规则 = 规则.replace('-A', '-D')

            var cmd = 'iptables ' + 规则

            this.执行shell(cmd)

          }

        }

        log('清空了指定app的防火墙规则')

      }

    }

    // var appName = 'QQ'

    // var appName = '哔哩哔哩'

    var appName = '微信'

    var app联网控制 = new 联网控制(appName)

    if (是否允许联网联网) {

      app联网控制.允许()

    } else {

      app联网控制.禁止()

    }

  }

  common.提取包含关键字的app = function (app关键字) {

    importClass(android.content.pm.PackageManager)

    var uc应用 = []

    var ucapp = {}

    pm = context.getPackageManager();

    var 有的 = pm.getInstalledPackages(PackageManager.GET_SHARED_LIBRARY_FILES)

    有的 = pm.getInstalledPackages(PackageManager.GET_META_DATA)

    有的 = 有的 + ""

    有的 = 有的.replace(/PackageInfo[^ ]+ /g, "")

    有的 = 有的.replace(/[\}|\[|\]| ]/g, "")

    有的 = 有的.split(",")

    for (let i of 有的) {

      var packageInfo = pm.getPackageInfo(i, 0);

      var appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString()

      //appName = app.getAppName(i)

      if (appName.match(app关键字)) {

        // log(appName)

        // log("包名:" + i)

        ucapp = {

          "包名": i,

          "名称": appName

        }

        uc应用.push(ucapp)

      }

    }

    return uc应用

  }

  common.卸载app没root = function (appName) {

    var packageName=getPackageName(appName);

    app.uninstall(packageName);

  }

  common.获取页面所有文字 = function (setting) {

    var setting = setting || {}

    var defaultSetting = {

      getText: true,

      getDesc: true,

      getId: false,

      removeRepetitiveElements: true

    }

    Object.assign(defaultSetting, setting);

    log(defaultSetting)

    var allStr = []

    var getDescAndTextAndIdOfNode = function (node) {

      if (node) {

        if (defaultSetting.getText) {

          var text = node.text()

          if (!!text) {

            allStr.push(text)

          }

        }

        if (defaultSetting.getDesc) {

          var desc = node.desc()

          if (!!desc) {

            allStr.push(desc)

          }

        }

        if (defaultSetting.getId) {

          var id = node.id()

          if (!!id) {

            allStr.push(id)

          }

        }

      }

      for (let i = 0; i < node.childCount(); i++) {

        getDescAndTextAndIdOfNode(node.child(i));

      }

    }

    var getFrameLayoutNode = function () {

      return className('FrameLayout').findOne(2000)

    }

    getDescAndTextAndIdOfNode(getFrameLayoutNode())

    function removeRepetitiveElements(arr) {

      var obj = {}

      for (let i = 0; i < arr.length; i++) {

        if (obj.hasOwnProperty(arr[i])) {} else {

          obj[arr[i]] = true

        }

      }

      return Object.keys(obj)

    }

    if (defaultSetting.removeRepetitiveElements) {

      allStr = removeRepetitiveElements(allStr)

    }

    return allStr

  }

  common.悬浮控制 = function (window, windowid, ar) {

    this.Orientation = context.resources.configuration.orientation;

    this.Width = this.Orientation == 1 ? device.width : device.height;

    this.Height = this.Orientation == 2 ? device.width : device.height;

    this.Click = function () {};

    this.Move = function () {};

    this.LongClick = function () {};

    this.setClick = (fun) => {

      fun = fun || function () {};

      this.Click = fun;

    };

    this.setMove = (fun) => {

      fun = fun || function () {};

      this.Move = fun;

    };

    this.setLongClick = (fun, ji) => {

      fun = fun || function () {};

      this.LongClick = fun;

      if (parseInt(ji)) {

        this.Tjitime = parseInt(ji) / 50;

      };

    };

    setInterval(() => {

      if (context.resources.configuration.orientation != this.Orientation) {

        this.Orientation = context.resources.configuration.orientation;

        this.Width = this.Orientation == 1 ? device.width : device.height;

        this.Height = this.Orientation == 2 ? device.width : device.height;

        var xy = this.windowGXY(window.getX(), window.getY(), this.G(window));

        this.windowyidong([

          [window.getX(), window.getY()],

          [xy.x, xy.y]

        ]);

      };

    }, 100);

    this.TX = 0;

    this.TY = 0;

    this.Tx = 0;

    this.Ty = 0;

    this.Tyidong = false;

    this.Tkeep = false;

    this.Tjitime = 12;

    this.Ttime = 0;

    setInterval(() => {

      if (this.Tkeep) {

        this.Ttime++;

        if (!this.Tyidong && this.Ttime > this.Tjitime) {

          //非移动且按下时长超过1秒判断为长按

          this.Tkeep = false;

          this.Ttime = 0;

          this.LongClick();

        };

      };

    }, 50);

    if (windowid) {

      windowid.setOnTouchListener(new android.view.View.OnTouchListener((view, event) => {

        this.Move(view, event);

        switch (event.getAction()) {

          case event.ACTION_DOWN:

            this.Tx = event.getRawX();

            this.Ty = event.getRawY();

            this.TX = window.getX();

            this.TY = window.getY();

            this.Tkeep = true; //按下,开启计时

            break;

          case event.ACTION_MOVE:

            var sx = event.getRawX() - this.Tx;

            var sy = event.getRawY() - this.Ty;

            if (!this.Tyidong && this.Tkeep && this.weiyi(sx, sy) >= 10) {

              this.Tyidong = true;

            };

            if (this.Tyidong && this.Tkeep) {

              window.setPosition(this.TX + sx, this.TY + sy);

            };

            break;

          case event.ACTION_UP:

            if (!this.Tyidong && this.Tkeep && this.Ttime < 7) {

              this.Click();

            };

            this.Tkeep = false;

            this.Ttime = 0;

            if (this.Tyidong) {

              var A = this.windowGXY(window.getX(), window.getY(), this.G(window));

              threads.start(new java.lang.Runnable(() => {

                this.windowyidong([

                  [window.getX(), window.getY()],

                  [A.x, A.y]

                ]);

              }));

              this.Tyidong = false;

            };

            break;

        };

        return true;

      }));

    };

    this.G = (win) => {

      var K = 35, //悬浮窗的隐形边矩

        H = 66; //手机通知栏的高度

      if (!ar) {

        return [

          [-K, -K],

          [this.Width - win.getWidth() + K, this.Height - win.getHeight() - H + K]

        ];

      } else {

        return [

          [0, H],

          [this.Width - win.getWidth(), this.Height - win.getHeight()]

        ];

      };

    };

    this.weiyi = function () { //平方和开方

      var num = 0;

      for (var i = 0; i < arguments.length; i++) {

        num += arguments[i] * arguments[i];

      };

      return Math.round(Math.sqrt(num) * 1000) / 1000

    };

    this.windowGXY = function (x, y, k) {

      x = (k[0][0] < x && x < k[1][0]) ? x : (k[0][0] < x ? k[1][0] : k[0][0]);

      y = (k[0][1] < y && y < k[1][1]) ? y : (k[0][1] < y ? k[1][1] : k[0][1]);

      return {

        x: x,

        y: y

      };

    };

    this.windowyidong = (A, s, w) => {

      w = w || window;

      s = s || 10;

      var sx = A[1][0] - A[0][0],

        sy = A[1][1] - A[0][1];

      var sd = this.weiyi(sx, sy) / s;

      var X = sx / sd,

        Y = sy / sd;

      var x = 0,

        y = 0;

      for (var i = 0; i < sd; i++) {

        x += X;

        y += Y;

        sleep(1);

        w.setPosition(A[0][0] + x, A[0][1] + y);

      };

      w.setPosition(A[1][0], A[1][1]);

    };

    this.OutScreen = () => {

      var F = this.G(window);

      var x = window.getX(),

        y = window.getY();

      var sx = window.getX() + window.getWidth() / 2,

        sy = window.getY() + window.getHeight() / 2 + 66;

      var cx = Math.abs(sx < (this.Width - sx) ? sx : (this.Width - sx)) < Math.abs(sy < (this.Height - sy) ? sy : (this.Height - sy)) ? (sx < this.Width / 2 ? (F[0][0] - window.getWidth()) : (F[1][0] + window.getWidth())) : x,

        cy = Math.abs(sx < (this.Width - sx) ? sx : (this.Width - sx)) < Math.abs(sy < (this.Height - sy) ? sy : (this.Height - sy)) ? y : (sy < this.Height / 2 ? (F[0][1] - window.getHeight()) : (F[1][1] + window.getHeight()));

      return [

        [x, y],

        [cx, cy]

      ];

    };

    this.toScreenEdge = (d) => {

      d = d || 0;

      var F = this.G(window);

      var x = window.getX(),

        y = window.getY();

      var sw = window.getWidth() * d;

      var sx = window.getX() + window.getWidth() / 2,

        sy = window.getY() + window.getHeight() / 2 + 66;

      var cx = sx < (this.Width - sx) ? -sw : (this.Width + sw - window.getWidth());

      return [

        [x, y],

        [cx, y]

      ];

    };

    this.centerXY = (F) => {

      var w = window.getWidth();

      var h = window.getHeight();

      return [

        [F[0] + w / 2, F[1] + h / 2],

        [F[0] - w / 2, F[1] - h / 2]

      ];

    };

    this.autoIntScreen = () => {

      var A = this.windowGXY(window.getX(), window.getY(), this.G(window));

      threads.start(new java.lang.Runnable(() => {

        this.windowyidong([

          [window.getX(), window.getY()],

          [A.x, A.y]

        ]);

      }));

    };

    this.autoIntScreen();

  };

  common.闪光弹 = function (content, x, y, color, t) {

    var single = (function () {

      var unique;

      function getInstance() {

        if (unique === undefined) {

          unique = new Flash();

        }

        return unique;

      }

      return {

        getInstance: getInstance

      }

    })();

    function Flash() {}

    Flash.prototype.update = function (content, x, y, color, t) {

      this.content = content || '未传入参数'

      this.x = x || random(100, 300)

      this.y = y || random(100, 900)

      this.color = color || -2278181

      this.t = t || 2000

    }

    Flash.prototype.show = function () {

      var window = floaty.rawWindow( <card cardBackgroundColor = "#aa00FF00"

        cardCornerRadius = "18dp" >

        <text id = "text"

        size = "30dp"

        layout_width = "wrap_content"

        layout_height = "wrap_content"

        layout_gravity = "center"

        gravity = "center"

        paddingLeft = "10"

        paddingRight = "10"

        paddingTop = "10"

        paddingBottom = "10" > 123 </text> </card>

      );

      window.text.setText(this.content);

      window.text.setBackgroundColor(this.color);

      window.setPosition(this.x, this.y);

      setTimeout(() => {

        window.close();

      }, this.t);

    }

    function flash(content, x, y, color, t) {

      var content = content.toString()

      var f = single.getInstance()

      f.update(content, x, y, color, t)

      f.show()

    }

    var color = color || colors.rgb(random(0, 255), random(0, 255), random(0, 255))

    flash(content, x, y, color, t);

    // flash('hello world')

    // flash('Are you ok?')

    // flash('我很好')

    // flash('you are beautiful')

  }

  common.打开开发者选项 = function () {

    app.startActivity({

      action: "android.intent.action.VIEW", //此处可为其他值

      packageName: "com.android.settings",

      className: "com.android.settings.Settings$DevelopmentSettingsActivity"

      //此处可以加入其他内容,如data、extras

    });

  }

  common.气泡 = function (msg, x, y) {

    function toastAt0(msg, x, y) {

      importClass(android.widget.Toast);

      importClass(android.view.Gravity);

      var toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);

      toast.setGravity(Gravity.TOP | Gravity.LEFT, x, y);

      toast.show();

    }

    var x = x || device.width / 3

    var y = y || device.height / 5 * 4

    var msg = msg.toString()

    ui.run(() => toastAt0(msg, x, y));

    sleep(2000)

    // toastAt('sdfsfdsdfs',300,300)

  }

  common.随机字符串 = function (PassLength) {

    var PassLength = PassLength || 8

    var str = 'abcdefghijklmnopqrstuvwxyz';

    var STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

    var num = '0123456789';

    var sym = '+=-@#~,.[]()!%^*$';

    var text = str.split('').concat(STR.split(''))

    var pw = '';

    for (i = 0; i < PassLength; i++) {

      var strpos = random(0, text.length - 1);

      pw += text[strpos].charAt(random(0, text[strpos].length - 1));

    }

    return pw;

  }

  common.wifi状态 = function () {

    importPackage(android.content);

    let wifiManager = context.getSystemService(Context.WIFI_SERVICE);

    if (wifiManager.isWifiEnabled()) {

      log('wifi is opend')

      return 'open'

    } else {

      log('wifi is closed')

      return 'close'

    }

  }

  common.开关飞行模式 = function (开关) {

    // 0 关闭 1开启  默认开启飞行模式

    var 开关 = 开关 || 1

    function 打开飞行模式() {

      // 打开飞行模式

      new Shell().exec("su -c 'settings put global airplane_mode_on 1; am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true'")

    }

    function 关闭飞行模式() {

      //关闭飞行模式

      new Shell().exec("su -c 'settings put global airplane_mode_on 0; am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false'")

    }

    if (开关 == 1) {

      打开飞行模式()

    } else {

      关闭飞行模式()

    }

  }

  common.上滑 = function () {

    var randomP = random(500, 600);

    var points = [randomP];

    var interval = 0.1;

    var x0 = random(780, 900);

    var y0 = random(1500, 1600);

    var a = 240;

    for (var t = 0; t < Math.PI / 2; t += interval) {

      var x = x0 - a * (1.8 * Math.cos(t * 0.9) - Math.cos(2 * t * 0.9));

      var y = y0 - a * (5 * Math.sin(t * 0.9) - Math.sin(2 * t * 0.9));

      points.push([parseInt(x), parseInt(y)]);

    }

    gesture.apply(null, points);

    sleep(1500);

  }

  common.获取deflate网页内容 = function (url) {

    importClass('java.io.BufferedReader');

    importClass('java.io.InputStreamReader');

    importClass("java.util.zip.InflaterInputStream")

    importClass('java.io.ByteArrayInputStream');

    importClass("java.util.zip.Inflater")

    var res = http.get(url)

    log("statusCode = " + res.statusCode);

    var deflateFileContent = res.body.bytes()

    var 网页内容 = null;

    if (deflateFileContent) {

      var br = new BufferedReader(new InputStreamReader(new InflaterInputStream(new ByteArrayInputStream(deflateFileContent), new Inflater(true))));

      var lns = [],

        cl;

      while (cl = br.readLine()) lns.push(cl);

      网页内容 = lns.join("\n")

      // log('网页内容')

      // log(网页内容)

      return 网页内容

    } else {

      console.error('下载失败')

      exit()

    }

    return false

  }

  common.获取gzip网页内容 = function (url) {

    function 保存zip文件(zipFile) {

      var path = files.join(files.cwd(), "1下载bilibili弹幕专用/webPage.gzip.js")

      files.createWithDirs(path)

      log("path=", path)

      // path= /storage/emulated/0/脚本/zip文件专用/test.zip

      files.writeBytes(path, zipFile)

      var r = 解压zip文件(path)

      log(r)

      return r

    }

    function 解压zip文件(文件路径) {

      //同一目录下的同一文件名

      // unzipGzipFile(sourceGzipFilePath, targetPath)

      var fileName = files.getName(文件路径)

      var 解压后的文件路径 = 文件路径.replace(fileName, 'webPage.js')

      log('解压的解压后的文件路径=', 解压后的文件路径)

      files.createWithDirs(解压后的文件路径)

      // com.stardust.io.Zip.unzip(new java.io.File(文件路径), new java.io.File(解压后的文件路径))

      var sourceGzipFilePath = 文件路径

      var targetPath = 解压后的文件路径

      unzipGzipFile(sourceGzipFilePath, targetPath)

      return targetPath

    }

    function unzipGzipFile(sourceGzipFilePath, targetPath) {

      importClass(java.io.FileInputStream);

      importClass(java.util.zip.GZIPInputStream);

      importClass('java.io.FileOutputStream');

      var sourceGzipFilePath = sourceGzipFilePath || '/sdcard/tempSourceGzipFilePath.js'

      var targetPath = targetPath || '/sdcard/tempTargetPath.js'

      log('sourceGzipFilePath')

      log(sourceGzipFilePath)

      log('targetPath')

      log(targetPath)

      var sChunk = 8192;

      var gzipFileInputStream = new FileInputStream(sourceGzipFilePath);

      var zipin = new GZIPInputStream(gzipFileInputStream);

      var buffer = util.java.array('byte', sChunk)

      var out = new FileOutputStream(targetPath);

      var length;

      while ((length = zipin.read(buffer, 0, sChunk)) != -1)

        out.write(buffer, 0, length);

      out.close();

      zipin.close();

    }

    var res = http.get(url)

    log("statusCode = " + res.statusCode);

    var gzipFileContent = res.body.bytes()

    var 网页内容 = null;

    if (gzipFileContent) {

      var 网页保存路径 = 保存zip文件(gzipFileContent)

      网页内容 = files.read(网页保存路径)

      // log('网页内容')

      // log(网页内容)

      return 网页内容

    } else {

      console.error('下载失败')

      exit()

    }

    return false

  }

  // var r=common

  // log(r)

  // var arr=[]

  // for(var k in common){

  //  arr.push(k)

  // }

  // log(arr)

  module.exports = common

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容