工具函数
说明
- 工具类模块函数主要是跟Android常用的信息相关联
- 工具类模块的对象前缀是utils,例如 utils.requestShowLogPermission()这样调用
打开App相关
utils.openApp 打开APP
- 打开APP
- @param packageName 程序的包名
- @return 布尔型 true 代表成功,false 代表失败
function main() {
utils.openApp("com.xx");
}
main();
utils.getStartAppCmd 命令打开app
- 拼接打开APP命令
- 适合EC6.8.0+
- @param packageName 程序的包名
- @return
{string}
命令字符串
function main() {
startEnv()
let pkg = "com.youdao.translator";
//获取命令
let d = utils.getStartAppCmd(pkg);
logd(d);
//激活命令执行
//let result = shell.execCommand(d);
//logd("result ="+result);
//root方式执行
//var result = shell.sudo(d);
//logd("result ="+result);
//开启代理服务,使用代理服务执行命令
var result = shell.execAgentCommand(d);
logd("result =" + result);
}
main();
utils.openAppByName 打开APP(应用名称)
- 打开APP,通过应用名称
- @param appName 程序名称,比如今日头条
- @return 布尔型 true 代表成功,false 代表失败
function main() {
utils.openAppByName("xx");
}
main();
utils.openActivity 打开activity
- 打开一个activity,通过map参数
- @param map 例如
{"action":""}
,key的固定只有 - action: 标准的android action字符串
- uri: uri可以是http网址,也可以是文件file:///地址,也可以是 URLSchema语法
- type: uri对应的type,等同于MIME类型,例如安装apk包的type是 application/vnd.android.package-archive
- pkg: 要打开的activity对应的包名
- className: 要打开的 className 对应的类名
- flag: androi打开activity 标准的flag标志位,特殊情况下可以填写
- 其他的都是属于intent参数了
- @param map 例如
- @return 布尔型 true 代表成功,false 代表失败
function main() {
//打开安装包界面
var m = {
"action": "android.intent.action.VIEW",
"uri": "file:///sdcard/a.apk",
"type": "application/vnd.android.package-archive"
};
var x = utils.openActivity(m);
logd("x " + x);
var map = {
"uri": "xx://xx/live/6701887916223941379",
};
utils.openActivity(map);
}
main();
utils.getStartActivityCmd命令 打开activity
- 适合EC6.8.0+
- 打开一个activity,通过map参数
- @param map 例如
{"action":""}
,key的固定只有 - action: 标准的android action字符串
- uri: uri可以是http网址,也可以是文件file:///地址,也可以是 URLSchema语法
- type: uri对应的type,等同于MIME类型,例如安装apk包的type是 application/vnd.android.package-archive
- pkg: 要打开的activity对应的包名
- className: 要打开的 className 对应的类名
- flag: androi打开activity 标准的flag标志位,特殊情况下可以填写
- 其他的都是属于intent参数了
- @param map 例如
- @return 布尔型 true 代表成功,false 代表失败
function main() {
startEnv()
//let pkg = "com.youdao.translator";
let map1 = {
"action": "android.intent.action.VIEW",
"pkg": "com.youdao.translator"
}
//uri演示打电话 这 里的uri可以是其他
let map2 = {
"action": "android.intent.action.CALL",
"uri": "tel:1000"
}
//获取命令
let d = utils.getStartActivityCmd(map1);
logd(d);
//激活命令执行
//let result = shell.execCommand(d);
//logd("result ="+result);
//root方式执行
//var result = shell.sudo(d);
//logd("result ="+result);
//开启代理服务,使用代理服务执行命令
var result = shell.execAgentCommand(d);
logd("result =" + result);
}
main()
utils.openIntentAction 通过Action打开某个界面
- 通过Action打开某个界面
- @param action action动作,例如 android.settings.ACCESSIBILITY_SETTINGS = 辅助功能,
- 如果改方法不满足要求,可以直接使用intent进行打开:
- 常用的action有:
- android.settings.ACCESSIBILITY_SETTINGS //辅助功能
- android.settings.ADD_ACCOUNT_SETTINGS //添加账户
- android.settings.AIRPLANE_MODE_SETTINGS //系统设置首页
- android.settings.APN_SETTINGS //APN设置
- android.settings.APPLICATION_SETTINGS //应用管理
- android.settings.BATTERY_SAVER_SETTINGS //节电助手
- android.settings.BLUETOOTH_SETTINGS //蓝牙
- android.settings.CAPTIONING_SETTINGS //字幕
- android.settings.CAST_SETTINGS //无线显示
- android.settings.DATA_ROAMING_SETTINGS //移动网络
- android.settings.DATE_SETTINGS //日期和时间设置
- android.settings.DEVICE_INFO_SETTINGS //关于手机
- android.settings.DISPLAY_SETTINGS //显示设置
- android.settings.DREAM_SETTINGS //互动屏保设置
- android.settings.HARD_KEYBOARD_SETTINGS //实体键盘
- android.settings.HOME_SETTINGS //应用权限,默认应用设置,特殊权限
- android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS //忽略电池优化设置
- android.settings.INPUT_METHOD_SETTINGS //可用虚拟键盘设置
- android.settings.INPUT_METHOD_SUBTYPE_SETTINGS //安卓键盘语言设置(AOSP)
- android.settings.INTERNAL_STORAGE_SETTINGS //内存和存储
- android.settings.LOCALE_SETTINGS //语言偏好设置
- android.settings.LOCATION_SOURCE_SETTINGS //定位服务设置
- android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS //所有应用
- android.settings.MANAGE_APPLICATIONS_SETTINGS //应用管理
- android.settings.MANAGE_DEFAULT_APPS_SETTINGS //与ACTION_HOME_SETTINGS相同
- android.settings.action.MANAGE_OVERLAY_PERMISSION //在其他应用上层显示,悬浮窗
- android.settings.MANAGE_UNKNOWN_APP_SOURCES //安装未知应用 安卓8.0
- android.settings.action.MANAGE_WRITE_SETTINGS //可修改系统设置 权限
- android.settings.MEMORY_CARD_SETTINGS //内存与存储
- android.settings.NETWORK_OPERATOR_SETTINGS //可用网络选择
- android.settings.NFCSHARING_SETTINGS //NFC设置
- android.settings.NFC_SETTINGS //网络中的 更多设置
- android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS //通知权限设置
- android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS //勿扰权限设置
- android.settings.ACTION_PRINT_SETTINGS //打印服务设置
- android.settings.PRIVACY_SETTINGS //备份和重置
- android.settings.SECURITY_SETTINGS //安全设置
- android.settings.SHOW_REGULATORY_INFO //监管信息
- android.settings.SOUND_SETTINGS //声音设置
- android.settings.SYNC_SETTINGS //添加账户设置
- android.settings.USAGE_ACCESS_SETTINGS //有权查看使用情况的应用
- android.settings.USER_DICTIONARY_SETTINGS //个人词典
- android.settings.VOICE_INPUT_SETTINGS //辅助应用和语音输入
- android.settings.VPN_SETTINGS //VPN设置
- android.settings.VR_LISTENER_SETTINGS //VR助手
- android.settings.WEBVIEW_SETTINGS //选择webview
- android.settings.WIFI_IP_SETTINGS //高级WLAN设置
- android.settings.WIFI_SETTINGS //选择WIFI,连接WIFI
- com.android.settings.Settings$DevelopmentSettingsActivity
- @return null|boolean|*
function main() {
utils.openIntentAction("android.settings.ACCESSIBILITY_SETTINGS");
}
main();
- 直接使用Intent打开方式
importClass(android.content.Intent);
importClass(android.net.Uri)
var intent = new Intent();
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
intent.setData(Uri.parse("package:com.gibb.easyclick"))
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
context.startActivity(intent);
} catch (e) {
loge(e)
}
图库相关
utils.insertImageToAlbum 图片插入相册
- 将图片插入到相册中,此方法会立刻更新相册数据
- 最好将文件放到 /sdcard/DCIM,相册目录,有些手机不放相册目录不扫描
- @param path 图片路径
function main() {
utils.insertImageToAlbum("/sdcard/DCIM/a.png");
}
main();
utils.insertVideoToAlbum 视频插入相册
- 将视频插入到相册中,此方法会立刻更新相册数据
- 最好将文件放到 /sdcard/DCIM,相册目录,有些手机不放相册目录不扫描
- @param path 视频路径
function main() {
utils.insertVideoToAlbum("/sdcard/DCIM/a.mp4");
}
main();
解压缩
utils.zip 压缩
- 将多个文件压缩成一个zip文件
- 适用版本(EC 5.17.0+)
- @param zipFile 目标zip文件的路径
- @param passwd 目标ip文件密码,空代表无密码
- @param files 要压缩的文件或者文件夹,文件数组例如:
["/sdcard/a.txt","/sdcard/bb/"]
- @return
{bool}
true 代表成功 false代表失败
function main() {
zipFile = "/sdcard/a.zip"
//压缩文件
let passwd = "123";
let files = ["/sdcard/test.json", "/sdcard/gifshow"]
let re = utils.zip(zipFile, passwd, files);
logd("压缩结果: " + re);
let ure = utils.unzip(zipFile, passwd, "/sdcard/test111/");
logd("解压结果: " + ure);
let data = utils.readFileInZip("/sdcard/a.zip", passwd, "test.json")
logd("读取数据结果: " + data);
}
main()
utils.unzip 解压
- 将zip文件解压到一个文件夹中
- 适用版本(EC 5.17.0+)
- @param zipFile 目标zip文件的路径
- @param passwd 目标ip文件密码
- @param destDir 要解压到的目标文件夹
- @return
{bool}
true 代表成功 false代表失败
function main() {
zipFile = "/sdcard/a.zip"
//压缩文件
let passwd = "123";
let files = ["/sdcard/test.json", "/sdcard/gifshow"]
let re = utils.zip(zipFile, passwd, files);
logd("压缩结果: " + re);
let ure = utils.unzip(zipFile, passwd, "/sdcard/test111/");
logd("解压结果: " + ure);
let data = utils.readFileInZip("/sdcard/a.zip", passwd, "test.json")
logd("读取数据结果: " + data);
}
main()
utils.unzipWithEncode 解压带编码
- 解压文件
- 将zip文件解压到一个文件夹中
- 适合EC 10.0.0+
- @param zipFile 目标zip文件的路径
- @param passwd 目标ip文件密码
- @param destDir 要解压到的目标文件夹
- @param fileNameEncode 文件名的编码,Windows压缩的写GBK,其他平台都是UTF-8
- @return
{bool}
true 代表成功 false代表失败
function main() {
let zipFile = "/sdcard/a.zip"
let ure = utils.unzipWithEncode(zipFile, "", "/sdcard/test111/", "GBK");
logd("解压结果: " + ure);
}
main()
utils.readFileInZip ZIP中读取
- 从zip文件中读取数据
- 适用版本(EC 5.17.0+)
- @param zipFile zip文件的路径
- @param passwd zip文件密码
- @param filePathInZip 文件在zip中的路径,例如 a/b.txt
- @return
{string}
解析后的字符串
function main() {
zipFile = "/sdcard/a.zip"
//压缩文件
let passwd = "123";
let files = ["/sdcard/test.json", "/sdcard/gifshow"]
let re = utils.zip(zipFile, passwd, files);
logd("压缩结果: " + re);
let ure = utils.unzip(zipFile, passwd, "/sdcard/test111/");
logd("解压结果: " + ure);
let data = utils.readFileInZip("/sdcard/a.zip", passwd, "test.json")
logd("读取数据结果: " + data);
}
main()
加解密相关
encodeDecoder.aesEncrypt AES加密
- AES加密,算法AES/ECB/PKCS5Padding
- 适用版本(EC 5.19.0+)
- @param data 数据字符串
- @param password 密码,至少8个字符
- @return
{string}
加密后的base64字符串
function main() {
let dat = "我是数据"
let pwd = "12356783";
let d = encodeDecoder.aesEncrypt(dat, pwd)
logd("加密后的数据-" + d);
let dd = encodeDecoder.aesDecrypt(d, pwd)
logd("解密后的数据-" + dd);
}
main();
encodeDecoder.aesDecrypt AES解密
- AES解密,算法AES/ECB/PKCS5Padding
- 适用版本(EC 5.19.0+)
- @param data 加密后的base64字符串
- @param password 密码,至少8个字符
- @return
{string}
解密后的字符串
function main() {
let dat = "我是数据"
let pwd = "12356783";
let d = encodeDecoder.aesEncrypt(dat, pwd)
logd("加密后的数据-" + d);
let dd = encodeDecoder.aesDecrypt(d, pwd)
logd("解密后的数据-" + dd);
}
main();
encodeDecoder.desEncrypt DES加密
- DES加密,算法ADES
- 适用版本(EC 5.19.0+)
- @param data 数据字符串
- @param password 密码,至少8个字符
- @return
{string}
加密后的base64字符串
function main() {
let dat = "我是数据"
let pwd = "12356783";
let d = encodeDecoder.desEncrypt(dat, pwd)
logd("加密后的数据-" + d);
let dd = encodeDecoder.desDecrypt(d, pwd)
logd("解密后的数据-" + dd);
}
main();
encodeDecoder.desDecrypt DES解密
- DES解密,算法ADES
- 适用版本(EC 5.19.0+)
- @param data 加密后的base64字符串
- @param password 密码,至少8个字符
- @return
{string}
解密后的字符串
function main() {
let dat = "我是数据"
let pwd = "12356783";
let d = encodeDecoder.desEncrypt(dat, pwd)
logd("加密后的数据-" + d);
let dd = encodeDecoder.desDecrypt(d, pwd)
logd("解密后的数据-" + dd);
}
main();
encodeDecoder.des3Encrypt 3DES加密
- 3DES加密,算法是 DESede/CBC/PKCS5Padding
- 适用版本(EC 5.19.0+)
- @param data 数据字符串
- @param password 密码
- @return
{string}
加密后的base64字符串
function main() {
let dat = "我是数据"
let pwd = "12356783";
let d = encodeDecoder.des3Encrypt(dat, pwd)
logd("加密后的数据-" + d);
let dd = encodeDecoder.des3Decrypt(d, pwd)
logd("解密后的数据-" + dd);
}
main();
encodeDecoder.des3Decrypt 3DES解密
- 3DES解密,算法是 DESede/CBC/PKCS5Padding
- 适用版本(EC 5.19.0+)
- @param data 加密后的base64字符串
- @param password 密码
- @return
{string}
解密后的字符串
function main() {
let dat = "我是数据"
let pwd = "12356783";
let d = encodeDecoder.des3Encrypt(dat, pwd)
logd("加密后的数据-" + d);
let dd = encodeDecoder.des3Decrypt(d, pwd)
logd("解密后的数据-" + dd);
}
main();
encodeDecoder.getErrorMsg 获取加解密错误信息
- 获取上一次加解密的错误信息
- 适用版本(EC 5.19.0+)
- @return
{string}
null代表无错误
function main() {
let dat = "我是数据"
let pwd = "12356783";
let d = encodeDecoder.des3Encrypt(dat, pwd)
logd("加密后的数据-" + d);
let dd = encodeDecoder.des3Decrypt(d, pwd)
logd("解密后的数据-" + dd);
logd("getErrorMsg -" + encodeDecoder.getErrorMsg());
}
main();
二维码
utils.createQRCode 生成一个二维码
- 生成一个二维码
- 适用版本(EC 5.15.0+)
- @param content 二维码字符串内容
- @param width 图像宽度
- @param height 图像高度
- @param logo 图像中心的logo,非必填项,Bitmap 对象,文件转Bitmap请看image模块
- @return
{Bitmap}
Android的Bitmap对象,保存到文件请看image模块
function main() {
//生成一个二维码bitmap 带logo的
let bot = utils.createQRCode("我是大佬的弟弟", 1000, 1000, image.readBitmap("/sdcard/yyb2.png"));
logd("bot " + bot);
//保存的到文件
let saved = image.saveBitmap(bot, "png", 100, "/sdcard/tmp.png");
logd("saved " + saved);
//回收掉防止内存暴涨
if (bot) {
bot.recycle()
}
//扫描二维码
let bitmap = image.readBitmap("/sdcard/tmp.png")
let data = utils.decodeQRCode(bitmap);
logd("data " + data);
//回收掉防止内存暴涨
if (bitmap) {
bitmap.recycle()
}
}
main();
utils.decodeQRCode 解析一个二维码
- 解析一个二维码
- 适用版本(EC 5.15.0+)
- @param src 图像 Bitmap 对象,文件转Bitmap请看image模块
- @return
{string}
解析后的字符串
function main() {
//生成一个二维码bitmap 带logo的
let bot = utils.createQRCode("我是大佬的弟弟", 1000, 1000, image.readBitmap("/sdcard/yyb2.png"));
logd("bot " + bot);
//保存的到文件
let saved = image.saveBitmap(bot, "png", 100, "/sdcard/tmp.png");
logd("saved " + saved);
//回收掉防止内存暴涨
if (bot) {
bot.recycle()
}
//扫描二维码
let bitmap = image.readBitmap("/sdcard/tmp.png")
let data = utils.decodeQRCode(bitmap);
logd("data " + data);
//回收掉防止内存暴涨
if (bitmap) {
bitmap.recycle()
}
}
main();
其他
utils.readConfigInt 读取整型配置
- 读取JSON中的整型数据
- @param jsonObject JSON对象
- @param key 配置项目
- @return 整型,找不到就返回0
function main() {
var testData = utils.readConfigInt(jsonObject, "test_key");
}
main();
utils.readJSONString 读取JSON中字符串
- 读取JSON中的字符串数据
- @param jsonObject JSON对象
- @param key 配置项目
- @return 字符串 找不到就返回空字符串
function main() {
var testData = utils.readConfigString(jsonObject, "test_key");
}
main();
utils.isObjectNull 判断一个对象为空
- 判断一个对象为空
- @param o 对象
- @return true或者false
function main() {
var isNull = utils.isObjectNull("test_key");
}
main();
utils.isObjectNotNull 判断一个对象不为空
- 判断一个对象不为空
- @param o 对象
- @return true或者false
function main() {
var isNull = utils.isObjectNotNull("test_key");
}
main();
utils.getRatio 取得比例
- 取得比例,例如10参数,就是返回10%的比例,如果是true,说明随机比例正确,否则不正确
- @param ratio 浮点型 1-100
- @return true或者false
function main() {
var ratio = utils.getRatio(20)
toast(ratio);
}
main();
utils.getRangeInt 取得某个范围的随机值
- 取得某个范围的随机值
- @param min 最小值
- @param max 最大值
- @return 在min和max中间的值,包含最大和最小值
function main() {
var value = utils.getRangeInt(1, 100);
toast(value);
}
main();
utils.isTrue 判断布尔型对象是否为真
- 判断布尔型对象是否为真
- @param r 布尔型对象
- @return true 或者 false
function main() {
var value = utils.isTrue(true);
}
main();
utils.fileMd5 文件的MD5
- 文件的MD5
- @param file 文件路径
- @return 文件MD5字符串或者null
function main() {
var md5 = utils.fileMd5("/sdcard/a.txt");
}
main();
utils.dataMd5 数据计算出来的MD5
- 数据计算出来的MD5
- @param data 数据
- @return 数据MD5字符串或者null
function main() {
var md5 = utils.dataMd5("data");
}
main();
utils.randomInt 随机整型数据
- 随机整型数据
- @param length 位数,要随机产生多少位的整型数据
- @return 整型
function main() {
var r = utils.randomInt(2);
}
main();
utils.randomCharNumber 取得随机的数字和字母
- 取得随机的数字和字母
- @param length 长度
- @return 字符串数字混合
function main() {
var r = utils.randomCharNumber(2);
}
main();
utils.getApkPkgName 取得App文件的包名
- 取得App文件的包名
- @param filePath 文件路径
- @return 字符串
function main() {
var pkgName = utils.getApkPkgName("/sdcard/app.apk");
}
main();
utils.isAppExist App是否已经安装
- App是否已经安装
- @param packageName 应用程序的包名
- @return true 代表已经安装,false代表未安装
function main() {
var result = utils.isAppExist("com.xx");
}
main();
utils.getAppVersionCode 程序的版本标示
- 取得已安装的程序的版本整型标示
- @param packageName 应用程序的包名
- @return 整型
function main() {
var versionCode = utils.getAppVersionCode("com.xx");
}
main();
utils.getAppVersionName 版本字符串标示
- 取得已安装的程序的版本字符串标示
- @param packageName 应用程序的包名
- @return 字符串 例如 1.0.0
function main() {
var r = utils.getAppVersionName("com.xx");
}
main();
utils.setClipboardText 设置剪贴板文本
- 设置剪贴板文本
- @param text 文本
- @return boolean
function main() {
var r = utils.setClipboardText("com.xx");
toast("设置结果:" + r);
}
main();
utils.getClipboardText 读取剪贴板文本
- 读取剪贴板文本
- @return string
function main() {
var r = utils.getClipboardText();
toast("读取结果:" + r);
}
main();
utils.playMp3 播放MP3音乐
- 播放MP3音乐,异步播放
- 支持版本 EC 5.12.0 以上
- @param path 文件路径 例如 /sdcard/a.mp3
- @param loop 是否循环播放 true代表是
- @return
{bool}
true 代表成功 false 代表失败
function main() {
//如果想把MP3内置到脚本中,将MP3文件放到res目录下
saveResToFile("a.mp3", "/sdcard/a.mp3")
let d = utils.playMp3("/sdcard/a.mp3", true)
logd("dd " + d)
//给点延迟,等音乐开始真正播放
sleep(30 * 1000)
utils.stopMp3()
logd("stop play ")
}
main();
utils.playMp3WaitEnd 同步播放MP3音乐
- 播放mp3音乐,等待结束
- 适配EC 10.3.0+
- @param path 文件路径 例如 /sdcard/a.mp3
- @param loop 是否循环播放 true代表是
- @return
{bool}
true 代表成功 false 代表失败
function main() {
//如果想把MP3内置到脚本中,将MP3文件放到res目录下
saveResToFile("a.mp3", "/sdcard/a.mp3")
let d = utils.playMp3WaitEnd("/sdcard/a.mp3", false)
logd("dd " + d)
}
main();
utils.stopMp3 停止播放mp3音乐
- 停止播放mp3音乐
- 支持版本 EC 5.12.0 以上
- @return
{bool}
true 代表成功 false 代表失败
function main() {
//如果想把MP3内置到脚本中,将MP3文件放到res目录下
saveResToFile("a.mp3", "/sdcard/a.mp3")
let d = utils.playMp3("/sdcard/a.mp3", true)
logd("dd " + d)
//给点延迟,等音乐开始真正播放
sleep(30 * 1000)
utils.stopMp3()
logd("stop play ")
}
main();