--中文函数文件类操作
require"import"
import"android.app.*"
import"android.os.*"
import"android.widget.*"
import"android.view.*"
import"android.webkit.*"
import "android.content.Context"
local Intent=import"android.content.Intent"
local Uri=import"android.net.Uri"
import "java.io.File"
import "android.text.format.Formatter"

function 写入文件(路径,内容)
 f=File(tostring(File(tostring(路径)).getParentFile())).mkdirs()
 io.open(tostring(路径),"w"):write(tostring(内容)):close()
end

function 读取文件(路径)
 文件内容=io.open(路径):read("*a")
 return 文件内容--return用来返回值
end

function 删除文件(路径)
 File(路径).delete()
end

function 重命名(旧名称,新名称)
 os.rename (旧名称, 新名称)
end

function 复制文件(from,to)
 LuaUtil.copyDir(from,to)
end

function 删除文件夹(路径)
 return LuaUtil.rmDir(File(tostring(路径)))
end

function 获取剪贴板()
 return activity.getSystemService(Context.CLIPBOARD_SERVICE).getText()
end

function 深色模式()
 function isNightMode(context)
 configuration = context.getResources().getConfiguration();
 return (configuration.uiMode )
 end
 深色模式=isNightMode(activity)
 --if 深色模式==33(深色模式) 深色模式=17(浅色模式)
end

function 深色()
 背景色='#FF343434'
 次要背景色='#555555'
 字体色='#FFA7A7A7'
 次要字体色='#BBBBBB'
 隐藏色='#fa343434'
end

function 浅色()
 背景色='#FFD4D4D4'
 次要背景色='#DDDDDD'
 字体色='#FF1B1B1B'
 次要字体色='#444444'
 隐藏色='#fbd4d4d4'
end

function 编码64(data)
 local Base64=luajava.bindClass("android.util.Base64")
 return Base64.encodeToString(String(data).getBytes(),Base64.NO_WRAP);
end

function 解码64(data)
 local Base64=luajava.bindClass("android.util.Base64")
 return String(Base64.decode(data,Base64.DEFAULT)).toString()
end

function url解码(s)
 s = string.gsub(s, "%%(%x%x)", function(h) return string.char(tonumber(h, 16)) end)
 return s
end

function url编码(s)
 s = string.gsub(s, "([^%w%.%- ])", function(c) return string.format("%%%02X", string.byte(c)) end)
 return string.gsub(s, " ", "+")
end

function MD5(str)
 local HexTable = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
 local A = 0x67452301
 local B = 0xefcdab89
 local C = 0x98badcfe
 local D = 0x10325476

 local S11 = 7
 local S12 = 12
 local S13 = 17
 local S14 = 22
 local S21 = 5
 local S22 = 9
 local S23 = 14
 local S24 = 20
 local S31 = 4
 local S32 = 11
 local S33 = 16
 local S34 = 23
 local S41 = 6
 local S42 = 10
 local S43 = 15
 local S44 = 21

 local function F(x,y,z)
 return (x & y) | ((~x) & z)
 end
 local function G(x,y,z)
 return (x & z) | (y & (~z))
 end
 local function H(x,y,z)
 return x ~ y ~ z
 end
 local function I(x,y,z)
 return y ~ (x | (~z))
 end
 local function FF(a,b,c,d,x,s,ac)
 a = a + F(b,c,d) + x + ac
 a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b
 return a & 0xffffffff
 end
 local function GG(a,b,c,d,x,s,ac)
 a = a + G(b,c,d) + x + ac
 a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b
 return a & 0xffffffff
 end
 local function HH(a,b,c,d,x,s,ac)
 a = a + H(b,c,d) + x + ac
 a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b
 return a & 0xffffffff
 end
 local function II(a,b,c,d,x,s,ac)
 a = a + I(b,c,d) + x + ac
 a = (((a & 0xffffffff) << s) | ((a & 0xffffffff) >> 32 - s)) + b
 return a & 0xffffffff
 end



 local function MD5StringFill(s)
 local len = s:len()
 local mod512 = len * 8 % 512
 --需要填充的字节数
 local fillSize = (448 - mod512) // 8
 if mod512 > 448 then
 fillSize = (960 - mod512) // 8
 end

 local rTab = {}

 --记录当前byte在4个字节的偏移
 local byteIndex = 1
 for i = 1,len do
 local index = (i - 1) // 4 + 1
 rTab[index] = rTab[index] or 0
 rTab[index] = rTab[index] | (s:byte(i) << (byteIndex - 1) * 8)
 byteIndex = byteIndex + 1
 if byteIndex == 5 then
 byteIndex = 1
 end
 end
 --先将最后一个字节组成4字节一组
 --表示0x80是否已插入
 local b0x80 = false
 local tLen = #rTab
 if byteIndex ~= 1 then
 rTab[tLen] = rTab[tLen] | 0x80 << (byteIndex - 1) * 8
 b0x80 = true
 end

 --将余下的字节补齐
 for i = 1,fillSize // 4 do
 if not b0x80 and i == 1 then
 rTab[tLen + i] = 0x80
 else
 rTab[tLen + i] = 0x0
 end
 end

 --后面加原始数据bit长度
 local bitLen = math.floor(len * 8)
 tLen = #rTab
 rTab[tLen + 1] = bitLen & 0xffffffff
 rTab[tLen + 2] = bitLen >> 32

 return rTab
 end

 --	Func:	计算MD5
 --	Param:	string
 --	Return:	string
 ---------------------------------------------

 function string.md5(s)
 --填充
 local fillTab = MD5StringFill(s)
 local result = {A,B,C,D}

 for i = 1,#fillTab // 16 do
 local a = result[1]
 local b = result[2]
 local c = result[3]
 local d = result[4]
 local offset = (i - 1) * 16 + 1
 --第一轮
 a = FF(a, b, c, d, fillTab[offset + 0], S11, 0xd76aa478)
 d = FF(d, a, b, c, fillTab[offset + 1], S12, 0xe8c7b756)
 c = FF(c, d, a, b, fillTab[offset + 2], S13, 0x242070db)
 b = FF(b, c, d, a, fillTab[offset + 3], S14, 0xc1bdceee)
 a = FF(a, b, c, d, fillTab[offset + 4], S11, 0xf57c0faf)
 d = FF(d, a, b, c, fillTab[offset + 5], S12, 0x4787c62a)
 c = FF(c, d, a, b, fillTab[offset + 6], S13, 0xa8304613)
 b = FF(b, c, d, a, fillTab[offset + 7], S14, 0xfd469501)
 a = FF(a, b, c, d, fillTab[offset + 8], S11, 0x698098d8)
 d = FF(d, a, b, c, fillTab[offset + 9], S12, 0x8b44f7af)
 c = FF(c, d, a, b, fillTab[offset + 10], S13, 0xffff5bb1)
 b = FF(b, c, d, a, fillTab[offset + 11], S14, 0x895cd7be)
 a = FF(a, b, c, d, fillTab[offset + 12], S11, 0x6b901122)
 d = FF(d, a, b, c, fillTab[offset + 13], S12, 0xfd987193)
 c = FF(c, d, a, b, fillTab[offset + 14], S13, 0xa679438e)
 b = FF(b, c, d, a, fillTab[offset + 15], S14, 0x49b40821)

 --第二轮
 a = GG(a, b, c, d, fillTab[offset + 1], S21, 0xf61e2562)
 d = GG(d, a, b, c, fillTab[offset + 6], S22, 0xc040b340)
 c = GG(c, d, a, b, fillTab[offset + 11], S23, 0x265e5a51)
 b = GG(b, c, d, a, fillTab[offset + 0], S24, 0xe9b6c7aa)
 a = GG(a, b, c, d, fillTab[offset + 5], S21, 0xd62f105d)
 d = GG(d, a, b, c, fillTab[offset + 10], S22, 0x2441453)
 c = GG(c, d, a, b, fillTab[offset + 15], S23, 0xd8a1e681)
 b = GG(b, c, d, a, fillTab[offset + 4], S24, 0xe7d3fbc8)
 a = GG(a, b, c, d, fillTab[offset + 9], S21, 0x21e1cde6)
 d = GG(d, a, b, c, fillTab[offset + 14], S22, 0xc33707d6)
 c = GG(c, d, a, b, fillTab[offset + 3], S23, 0xf4d50d87)
 b = GG(b, c, d, a, fillTab[offset + 8], S24, 0x455a14ed)
 a = GG(a, b, c, d, fillTab[offset + 13], S21, 0xa9e3e905)
 d = GG(d, a, b, c, fillTab[offset + 2], S22, 0xfcefa3f8)
 c = GG(c, d, a, b, fillTab[offset + 7], S23, 0x676f02d9)
 b = GG(b, c, d, a, fillTab[offset + 12], S24, 0x8d2a4c8a)

 --第三轮
 a = HH(a, b, c, d, fillTab[offset + 5], S31, 0xfffa3942)
 d = HH(d, a, b, c, fillTab[offset + 8], S32, 0x8771f681)
 c = HH(c, d, a, b, fillTab[offset + 11], S33, 0x6d9d6122)
 b = HH(b, c, d, a, fillTab[offset + 14], S34, 0xfde5380c)
 a = HH(a, b, c, d, fillTab[offset + 1], S31, 0xa4beea44)
 d = HH(d, a, b, c, fillTab[offset + 4], S32, 0x4bdecfa9)
 c = HH(c, d, a, b, fillTab[offset + 7], S33, 0xf6bb4b60)
 b = HH(b, c, d, a, fillTab[offset + 10], S34, 0xbebfbc70)
 a = HH(a, b, c, d, fillTab[offset + 13], S31, 0x289b7ec6)
 d = HH(d, a, b, c, fillTab[offset + 0], S32, 0xeaa127fa)
 c = HH(c, d, a, b, fillTab[offset + 3], S33, 0xd4ef3085)
 b = HH(b, c, d, a, fillTab[offset + 6], S34, 0x4881d05)
 a = HH(a, b, c, d, fillTab[offset + 9], S31, 0xd9d4d039)
 d = HH(d, a, b, c, fillTab[offset + 12], S32, 0xe6db99e5)
 c = HH(c, d, a, b, fillTab[offset + 15], S33, 0x1fa27cf8)
 b = HH(b, c, d, a, fillTab[offset + 2], S34, 0xc4ac5665)

 --第四轮
 a = II(a, b, c, d, fillTab[offset + 0], S41, 0xf4292244)
 d = II(d, a, b, c, fillTab[offset + 7], S42, 0x432aff97)
 c = II(c, d, a, b, fillTab[offset + 14], S43, 0xab9423a7)
 b = II(b, c, d, a, fillTab[offset + 5], S44, 0xfc93a039)
 a = II(a, b, c, d, fillTab[offset + 12], S41, 0x655b59c3)
 d = II(d, a, b, c, fillTab[offset + 3], S42, 0x8f0ccc92)
 c = II(c, d, a, b, fillTab[offset + 10], S43, 0xffeff47d)
 b = II(b, c, d, a, fillTab[offset + 1], S44, 0x85845dd1)
 a = II(a, b, c, d, fillTab[offset + 8], S41, 0x6fa87e4f)
 d = II(d, a, b, c, fillTab[offset + 15], S42, 0xfe2ce6e0)
 c = II(c, d, a, b, fillTab[offset + 6], S43, 0xa3014314)
 b = II(b, c, d, a, fillTab[offset + 13], S44, 0x4e0811a1)
 a = II(a, b, c, d, fillTab[offset + 4], S41, 0xf7537e82)
 d = II(d, a, b, c, fillTab[offset + 11], S42, 0xbd3af235)
 c = II(c, d, a, b, fillTab[offset + 2], S43, 0x2ad7d2bb)
 b = II(b, c, d, a, fillTab[offset + 9], S44, 0xeb86d391)

 --加入到之前计算的结果当中
 result[1] = result[1] + a
 result[2] = result[2] + b
 result[3] = result[3] + c
 result[4] = result[4] + d
 result[1] = result[1] & 0xffffffff
 result[2] = result[2] & 0xffffffff
 result[3] = result[3] & 0xffffffff
 result[4] = result[4] & 0xffffffff
 end

 --将Hash值转换成十六进制的字符串
 local retStr = ""
 for i = 1,4 do
 for _ = 1,4 do
 local temp = result[i] & 0x0F
 local str = HexTable[temp + 1]
 result[i] = result[i] >> 4
 temp = result[i] & 0x0F
 retStr = retStr .. HexTable[temp + 1] .. str
 result[i] = result[i] >> 4
 end
 end

 return retStr
 end
 return string.md5(str)
end
function MD5加密(str)
 abc=MD5(str)
 复制文本(abc)
end

function 压缩(源文件,ZIP)
 if 文件是否存在(源文件)==true then
 a=(源文件).."//"
 a=a:match("(.-)//")
 ZipUtil.zip(a,a..".zip")
 重命名(a..".zip",ZIP)
 else
 print("警告：\n"..源文件.."\n不存在！")
 end
end

function 解压(ZIP,解压到)
 if 文件是否存在(ZIP)==true then
 ZipUtil.unzip(ZIP,解压到)
 else
 print("警告：\n"..ZIP.."\n不存在！")
 end
end

function 输入框上移()
 --使弹出的输入法不影响布局
 activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
end

function 输入框固定()
 --使弹出的输入法影响布局
 activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
end

function 剩余内存()
 --获取手机内置剩余存储空间
 fs = StatFs(Environment.getDataDirectory().getPath())
 return Formatter.formatFileSize(activity, (fs.getAvailableBytes()))
end

function 总内存()
 --获取手机内置存储总空间
 path = Environment.getExternalStorageDirectory()
 stat = StatFs(path.getPath())
 blockSize = stat.getBlockSize()
 totalBlocks = stat.getBlockCount()
 return Formatter.formatFileSize(activity, blockSize * totalBlocks)
end

function 获取文件修改时间(文件路径)
 -- By: 寒歌 (QQ: 2113075983)
 if 文件路径 then
 local path=文件路径
 local f = File(path);
 local cal = Calendar.getInstance();
 local time = f.lastModified()
 cal.setTimeInMillis(time);
 return cal.getTime().toLocaleString()
 else
 error("传入参数异常")
 end
end

function 文件是否存在(路径)
 return File(路径).exists()
end

function 替换文件字符串(路径,旧,新)
 路径=tostring(路径)
 内容=io.open(路径):read("*a")
 return io.open(路径,"w+"):write(tostring(内容:gsub(旧,新))):close()
end

function 追加写入(路径,内容)
 io.open(tostring(路径),"a+"):write(tostring(内容)):close()
end

function 文件大小(路径)
 size=File(tostring(路径)).length()
 Sizes=Formatter.formatFileSize(activity, size)
 return Sizes
end

function 父文件夹(路径)
 return File(路径).getParentFile()
end

function 小程序(文件名称)
 复制文件(FILES.."tools/"..文件名称..".txt",编辑器文件夹.."bianjiqi.lua")
 进入子页面("编辑器")
end

function 小程序可保存(文件名称)
 复制文件(TXCGB.."files/tools/"..文件名称..".txt",编辑器文件夹.."bianjiqi.lua")
 写入文件(ZYM,"编辑器")
 进入子页面("编辑器")
end

--自定义函数
function 子页面(名称,网页链接)
 进入子页面(名称,{链接=网页链接})
end

function 新窗口()
 子页面(读取文件(ZYM),网页链接)
end

function 通知栏内核(标题,内容)
 require "import"
 import "android.app.*"
 import "android.os.*"
 import "android.widget.*"
 import "android.view.*"
 import "android.content.Context"
 import "android.content.Intent"
 manager=this.getSystemService(Context.NOTIFICATION_SERVICE);
 builder=Notification.Builder(this)
 builder.setSmallIcon(R.drawable.icon)--设置图标
 builder.setContentTitle(标题)
 builder.setContentText(内容)
 --builder.setDefaults(Notification.DEFAULT_SOUND)--音效
 --builder.setDefaults(Notification.DEFAULT_VIBRATE)--默认震动
 --builder.setDefaults(Notification.DEFAULT_ALL)--音效震动灯光
 builder.setPriority(Notification.PRIORITY_DEFAULT)--设置该通知优先级
 notification=builder.build()
end
function 开启通知栏(标题,内容)
 通知栏内核(标题,内容)
 manager.notify(1,notification);
end
function 清除通知栏()
 通知栏内核()
 manager.cancel(1);
end

function 关闭窗口()
 写入文件(UA,"")
 写入文件(UA标识,"安卓")
 删除文件(自动旋转) 
 删除文件(全屏)
 删除文件(悬浮按钮文件)
 --if 读取文件(ZYM)=="塞班" then 写入文件(上次访问,网页链接) end
 清除通知栏()
 退出页面()
end

function 生成随机数(路径)
 随机=tointeger(tostring(math.random(-35235686,-1285363)))
 写入文件(路径,随机) 
 --tostring() 转换字符串/tonumber() 转换数字/tointeger() 转换整数
end

function 进度条(进度条信息)--目前只能在退出之前使用(不能关闭进度条)
 local dl=ProgressDialog.show(activity,nil,进度条信息)
 dl.show()
end

function 重启自身()
 -- By: 一缕清风自在飞
 local intent=activity.getPackageManager().getLaunchIntentForPackage(activity.getPackageName());
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 activity.startActivity(intent)
end

function 网页顶部() --网页总高度
 加载Js([[javascript:window.scrollBy(0,-document.body.scrollHeight);]])
end

function 网页底部() --网页总高度
 加载Js([[javascript:window.scrollBy(0,document.body.scrollHeight);]])
end

function 小说上翻屏() --可视高度
 加载Js([[javascript:window.scrollBy(0,-window.innerHeight+20);]])
end

function 小说下翻屏() --可视高度
 加载Js([[javascript:window.scrollBy(0,window.innerHeight-20);]])
end

function 网页标题延迟(延迟秒数)
 task (延迟秒数*1000,function() searchEdtTxt.Hint=webView. title.."\n"..webView.getUrl() end)
end

function 支付宝扫一扫()
 --直接调用支付宝扫码
 --应用包名
 packageName="com.eg.android.AlipayGphone"
 --判断是否已安装支付宝应用
 import "android.content.pm.PackageManager"
 if pcall(function() activity.getPackageManager().getPackageInfo(packageName,0) end) then
 --已安装支付宝则进行扫码
 import "android.net.Uri"
 import "android.content.Intent"
 local url="alipayqr://platformapi/startapp?saId=10000007"
 this.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
 else
 --未安装支付宝则提示消息
 print("你没有安装支付宝....")
 end
end

function 微信扫一扫()
--请复制到fa里面测试，否则会报错
if pcall(function() 
 activity.getPackageManager().getPackageInfo('com.tencent.mm',0) end) then
 import 'android.content.Intent'
 import 
 'android.content.ComponentName' local intent = Intent();
 intent.setComponent(ComponentName('com.tencent.mm','com.tencent.mm.ui.LauncherUI'));
 intent.putExtra('LauncherUI.From.Scaner.Shortcut',true);
 intent.setFlags(335544320);
 intent.setAction('android.intent.action.VIEW');
 activity.startActivity(intent);
 else
 print('你没有安装微信...')
 end
end

function 后台()
 --直接复制下面那段代码放到点击事件
 import "android.content.Intent"--导入包(推荐加入)
 intent=Intent();
 intent.setAction("android.intent.action.MAIN");
 intent.addCategory("android.intent.category.HOME");
 activity.startActivity(intent)
end

function 返回键()
 function onKeyDown(key,event)
 if(key==4)then
 if(webView.canGoBack())then
 --webView.goBack()
 加载Js([[window.history.back()]])
 else
 关闭窗口()
 end
 return true
 end
 end
end

function 文件下载(下载直链,路径,重命名)
 --导入包
 import "android.content.Context"
 import "android.net.Uri"
 downloadManager=activity.getSystemService(Context.DOWNLOAD_SERVICE);
 url=Uri.parse(下载直链);
 request=DownloadManager.Request(url);
 request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
 request.setDestinationInExternalPublicDir(路径,重命名);
 request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
 downloadManager.enqueue(request);
end

function 安装应用程序(安装包路径)
 import "android.content.Intent"
 import "android.net.Uri"
 local intent = Intent(Intent.ACTION_VIEW)
 intent.setDataAndType(Uri.parse("file://"..安装包路径), "application/vnd.android.package-archive")
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
 activity.startActivity(intent)
end

function 获取应用信息(包名)
 -- By: 寒歌 (QQ: 2113075983)
 if 包名 then
 import "android.content.pm.PackageManager"
 local pm = activity.getPackageManager();
 local 图标 = pm.getApplicationInfo(tostring(包名),0)
 local 图标 = 图标.loadIcon(pm);
 local pkg = activity.getPackageManager().getPackageInfo(包名, 0);
 local 应用名称 = pkg.applicationInfo.loadLabel(activity.getPackageManager())
 local 版本号 = activity.getPackageManager().getPackageInfo(包名, 0).versionName
 local 最后更新时间 = activity.getPackageManager().getPackageInfo(包名, 0).lastUpdateTime
 local cal = Calendar.getInstance();
 cal.setTimeInMillis(最后更新时间);
 local 最后更新时间 = cal.getTime().toLocaleString()
 return 包名,版本号,最后更新时间,图标,应用名称
 else
 error("传入参数异常")
 end
end

function 调用APP(包名,需要打开的网页,下载地址)
 import "android.os.*"
 import "android.widget.*"
 import "android.view.*"
 import "android.text.*"
 import "android.content.*"
 if pcall(function() activity.getPackageManager().getPackageInfo(包名,0)
 end)
 then
 print("正在为您跳转")--如果安装
 intent=Intent("android.intent.action.VIEW")
 intent.setPackage(包名)
 intent.setData(Uri.parse(需要打开的网页))--打开的链接
 this.startActivity(intent)
 else
 对话框()
 .设置标题("友情提示！")
 .设置消息('您没有安装该软件，点击“确认”将为您跳转到下载页面！')
 .设置积极按钮("确认",function()
 加载网页(下载地址)
 end)
 .设置消极按钮("取消")
 .显示()
 end
end

function 进入全屏()
 import "android.view.WindowManager"
 --状态栏关
 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
 --顶栏关
 toolbar.parent.setVisibility(View.GONE);
 --悬浮按钮开
 fltBtn.setVisibility(View.VISIBLE)
end

function 退出全屏()
 import "android.view.WindowManager"
 --状态栏开
 activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
 --顶栏开
 toolbar.parent.setVisibility(View.VISIBLE);
 --竖屏
 activity.setRequestedOrientation(1);
 --悬浮按钮关
 fltBtn.setVisibility(View.GONE)
end

function 自由旋转()
 --自动旋转开
 import "android.content.pm.ActivityInfo"
 activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)
end

function 自定义(标题,提示文字1,提示文字2,路径1,路径2,数据类型1,数据类型2)--自定义对话框（自定义布局对话框，带输入框的）
 zdy_layout={
 LinearLayout;
 orientation="vertical";--重力属性
 id="zdy_father_layout",
 {
 EditText;--编辑框控件
 id="pathedit",
 layout_marginTop='15dp';--布局顶距
 layout_width="80%w";--编辑框宽度
 layout_gravity="center";--重力属性
 InputType=数据类型1;--限制只能输入数据类型，此行删除即可输入任意字符
 Hint=提示文字1;--设置编辑框为空时的提示文字
 };
 {
 EditText;--编辑框控件
 id="linkedit",
 layout_marginTop='15dp';--布局顶距
 layout_width="80%w";--编辑框宽度
 layout_gravity="center";--重力属性
 InputType=数据类型2;--限制只能输入数据类型，此行删除即可输入任意字符
 Hint=提示文字2;--设置编辑框为空时的提示文字
 };
 };
 AlertDialog.Builder(this)
 .setTitle(标题)--设置标题
 .setCancelable(false)--点击外围可取消
 .setView(loadlayout(zdy_layout))--设置布局
 .setPositiveButton("保存",function(v)--设置积极按钮
 写入文件(路径1,pathedit.text)
 写入文件(路径2,linkedit.text)
 刷新网页()
 end)
 .setNegativeButton("取消",function(v)--设置消极按钮
 end)
 .show()
end

function 自定义0(标题,提示文字,路径,数据类型)--自定义对话框（自定义布局对话框，带输入框的）
 zdy_layout={
 LinearLayout;
 orientation="vertical";--重力属性
 id="zdy_father_layout",
 {
 EditText;--编辑框控件
 id="pathedit",
 layout_marginTop='15dp';--布局顶距
 layout_width="80%w";--编辑框宽度
 layout_gravity="center";--重力属性
 InputType=数据类型;--限制只能输入数据类型，此行删除即可输入任意字符
 Hint=提示文字;--设置编辑框为空时的提示文字
 };
 };
 AlertDialog.Builder(this)
 .setTitle(标题)--设置标题
 .setCancelable(false)--点击外围可取消
 .setView(loadlayout(zdy_layout))--设置布局
 .setPositiveButton("保存",function(v)--设置积极按钮
 写入文件(路径,pathedit.text)
 end)
 .setNegativeButton("取消",function(v)--设置消极按钮
 end)
 .show()
end

function 添加至布局网页(标题,提示文字,路径)--自定义对话框（自定义布局对话框，带输入框的）
 if 读取文件(路径):find (webView.getUrl()) then
 print"你已经添加该网页！"
 else
 zdy_layout={
 LinearLayout;
 orientation="vertical";--重力属性
 id="zdy_father_layout",
 {
 EditText;--编辑框控件
 id="pathedit",
 layout_marginTop='15dp';--布局顶距
 layout_width="80%w";--编辑框宽度
 layout_gravity="center";--重力属性
 text=webView.title;
 Hint=提示文字;--设置编辑框为空时的提示文字
 };
 };
 AlertDialog.Builder(this)
 .setTitle(标题)--设置标题
 .setCancelable(false)--点击外围可取消
 .setView(loadlayout(zdy_layout))--设置布局
 .setPositiveButton("保存",function(v)--设置积极按钮
 追加写入(路径,'adapter.add{name="'..pathedit.text..'",url="'..网页链接..'"}\n\n')
 end)
 .setNegativeButton("取消",function(v)--设置消极按钮
 end)
 .show()
 end
end

function 添加电视直播()
 zdy_layout={
 LinearLayout;
 orientation="vertical";--重力属性
 id="zdy_father_layout",
 {
 EditText;--编辑框控件
 id="pathedit",
 layout_marginTop='15dp';--布局顶距
 layout_width="80%w";--编辑框宽度
 layout_gravity="center";--重力属性
 text=webView.title;
 Hint="将你喜欢的节目收藏起来";--设置编辑框为空时的提示文字
 };
 };
 AlertDialog.Builder(this)
 .setTitle("收藏网页")--设置标题
 .setCancelable(false)--点击外围可取消
 .setView(loadlayout(zdy_layout))--设置布局
 .setPositiveButton("保存",function(v)--设置积极按钮
 if not 读取文件(TXCGB.."files/tools/tvlive.txt"):find (webView.getUrl()) then 追加写入(TXCGB.."files/tools/tvlive.txt",'adapter.add{name="'..pathedit.text..'",url="'..网页链接..'"}\n\n')
 end
 if not 读取文件(TXCGB.."files/htm/htm/live.html"):find (webView.getUrl()) then 追加写入(TXCGB.."files/htm/htm/live.html",[[
<li><a href="javascript:void(0)" class="am-btn am-btn-default lipbtn" target="_self" onclick="bofang(']]..网页链接..[[',)">]]..pathedit.text..[[</a></li>

]])
 print"网页收藏成功"
 end
 end)
 .setNegativeButton("取消",function(v)--设置消极按钮
 end)
 .show()
end

function 远程加载代码()
 url="http://www.iyuji.cn/iyuji/s/blBRZWlqMHhpcFlHL0tEcy9Sd1EvUT09/1571662110080181"
Http.get(url,nil,"UTF-8",nil,function(code,content,cookie,header)
 if(code==200 and content)then
 --过滤
 --如果你用不了就改改过滤吧
 content=content:gsub("&nbsp;"," ") or content;
 content=content:gsub("&lt;","<") or content;
 content=content:gsub("&gt;",">") or content;
 content=content:gsub("&amp;","&") or content;
 if(content)then
 取代码=content:match('<meta name="description" itemprop="description" content="(.-)" />')
 远程加载代码=取代码:match("【远程代码】(.-)【远程代码】")
 if pcall(function() pcall(load(远程加载代码)) end) then
 else
 print("代码有误！请仔细查看云端代码！")
 end
 end
 end
 end)
end

function 运行代码(代码)
 if pcall(function() pcall(load(代码)) end) then
 else
 print("代码有误！请仔细查看云端代码！")
 end
end

