if io.open("/sdcard/左飞资源包/左飞全防/love")==nil then
gg.toast("第一次打开,正在下载资源配置")
gg.alert("第一次打开,正在下载资源配置")
file.download("https://wp.kayyw.com/f/en6EhY/%E5%B0%8F%E6%82%B8%E5%85%A8%E9%98%B2.zip","/sdcard/左飞资源包/左飞全防/左飞资源包.zip")
file.unzip("/sdcard/左飞资源包/左飞全防/左飞资源包.zip","/sdcard/左飞资源包/左飞全防/")
end
local baseWindow = require 'floatingWindowManager2'
if not baseWindow.getContext then
gg.alert('请重启一下RLGG')
app.exit()
end
import "android.graphics.Color"
import "android.content.res.ColorStateList"
项目名字="左飞全防"
local context = baseWindow:getContext()
import "android.view.animation.TranslateAnimation"
import "android.view.animation.Animation"
import "android.animation.ArgbEvaluator"
import "android.animation.LayoutTransition"
import "android.graphics.drawable.GradientDrawable"
import "android.graphics.drawable.ClipDrawable"
import "android.media.MediaPlayer"
MediaPlayer=MediaPlayer()
import "java.io.File"
import "android.graphics.Typeface"
import "android.animation.LayoutTransition"
layoutTransition=LayoutTransition()
layoutTransition:setDuration(500)
import 'com.google.android.material.imageview.ShapeableImageView'
import 'com.google.android.material.shape.CornerFamily'
import 'com.google.android.material.materialswitch.MaterialSwitch'
import 'com.google.android.material.button.MaterialButton'
import 'com.google.android.material.dialog.MaterialAlertDialogBuilder'
import 'com.google.android.material.slider.Slider'
import 'com.google.android.material.snackbar.Snackbar'
import 'com.google.android.material.sidesheet.SideSheetDialog'
import 'com.google.android.material.bottomsheet.BottomSheetDialog'
import 'com.google.android.material.bottomsheet.BottomSheetBehavior'
import 'com.google.android.material.progressindicator.LinearProgressIndicator'
import 'com.google.android.material.progressindicator.CircularProgressIndicator'
import 'com.google.android.material.chip.ChipGroup'
import 'com.google.android.material.chip.Chip'
import 'com.google.android.material.radiobutton.MaterialRadioButton'
import 'com.google.android.material.checkbox.MaterialCheckBox'
import 'com.google.android.material.dialog.MaterialAlertDialogBuilder'
import 'androidx.coordinatorlayout.widget.CoordinatorLayout'
import 'androidx.core.widget.NestedScrollView'
local baseWindow = require 'floatingWindowManager2'
if not baseWindow.getContext then
gg.alert('请重启一下RLGG')
app.exit()
end
file.checkFile("/storage/emulated/0/左飞资源包/左飞全防/收藏歌单") -- 判断文件是否存在
local musiclist = file.read("/storage/emulated/0/左飞资源包/左飞全防/收藏歌单") -- 读取文件内容
if musiclist ~= "" then -- 判断内容是否为空
musiclist = load("return"..musiclist)() -- string转table后赋值
else
musiclist = {} -- 给变量赋值灵动岛不显示图片因为
end
local nowMusic = #musiclist -- 设定当前歌曲序号
import("android.media.MediaPlayer")
mediaPlayer=MediaPlayer() -- 音乐播放器
import("android.view.animation.ScaleAnimation")
import("android.view.animation.Animation")
import("android.content.res.ColorStateList")
--gg.setVisible(false)
--luajava.setFloatingWindowHide(true)
local material3 = require "material3"
local context=material3:getContext()
local window = require('windowManager')
local ui = require('ui')
import "android.animation.ObjectAnimator"
import "android.view.animation.Animation"
local colorvs = {} --控件颜色
local threshold = 5 -- 设定拖动阈值
local canSwipeUp = false -- 设定第一次上拖动是否触发
local canSwipeDown = true -- 设定第一次下拖动是否触发
local isPlaying = false --设定歌曲播放状态
local isReady = false --歌曲是否准备完毕
import "android.animation.ArgbEvaluator"
import "android.animation.ValueAnimator"
import "android.graphics.Color"
import "android.content.res.ColorStateList"
local LayoutParams = luajava.bindClass("android.view.WindowManager$LayoutParams")
local context = baseWindow:getContext()
import "android.view.animation.TranslateAnimation"
import "android.view.animation.Animation"
import "android.animation.ArgbEvaluator"
import "android.animation.LayoutTransition"
import "android.graphics.drawable.GradientDrawable"
import "android.graphics.drawable.ClipDrawable"
import "android.media.MediaPlayer"
MediaPlayer=MediaPlayer()
import "java.io.File"
import "android.graphics.Typeface"
import "android.animation.LayoutTransition"
layoutTransition=LayoutTransition()
layoutTransition:setDuration(500)
local LottieDex=dex.loadfile('/storage/emulated/0/左飞资源包/左飞全防/Lottie.dex')
local LottieAnimationView=LottieDex:loadClass("com.airbnb.lottie.LottieAnimationView")
dex.loadfile("/storage/emulated/0/左飞资源包/左飞全防/Lottie.dex")
import "com.airbnb.lottie.*"
baseWindow:darkMode()
baseWindow:lightMode()
import 'android.graphics.drawable.Icon'
import 'android.widget.LinearLayout'
import 'android.widget.Button'
import 'android.widget.TextView'
import 'android.widget.ScrollView'
import 'android.widget.RadioGroup'
import 'java.lang.CharSequence'
import 'java.lang.Boolean'
import 'java.lang.reflect.Array'
baseWindow:darkMode()
baseWindow:lightMode()
local material3 = require 'material3'
import('android.content.res.ColorStateList')
function particle(co1,co2,cor)
local webView = luajava.webView(function(webView)
webView:loadData([[
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
]], 'text/html', 'UTF-8')
webView:setBackgroundColor(0x0)
end)
return webView
end
parti = particle(
"rgba(0, 128, 255, 0.1)",
"rgba(0, 128, 255, 1)",
"#0080FF"
)
local context=material3:getContext()
vibra = context:getSystemService(Context.VIBRATOR_SERVICE)
changan = {}
local changan = changan
local android = import('android.*')
function write(fileName, content)
file.write(fileName, content)
end
function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end
function read(fileName) f = assert(io.open(fileName, 'r')) content = f:read("*all") f:close() return content end
function wtcf(lujing,neirong)
write("/sdcard/左飞资源包/配置文件/"..lujing,neirong)
end
function rdcf(lujing)
return read("/sdcard/左飞资源包/配置文件/"..lujing)
end
local function getBG(DrawableColor,Radius,StrokeWidth,StrokeColor)
if type(DrawableColor)~='table' then
DrawableColor={DrawableColor,DrawableColor}
end
local jianbians = luajava.loadlayout({
GradientDrawable,
color = 0xff000000,
gradientType = GradientDrawable.LINEAR_GRADIENT,
orientation = GradientDrawable.Orientation.TOP_BOTTOM ,
})
jianbians:setColors(DrawableColor)
jianbians:setStroke(StrokeWidth or 0,StrokeColor or 0xffffffff)
if type(Radius)=='table' then
jianbians:setCornerRadii({Radius[1],Radius[1],Radius[2],Radius[2],Radius[3],Radius[3],Radius[4],Radius[4]})
else
jianbians:setCornerRadius(Radius or 0)
end
return jianbians
end
开 = "开" 关 = "关"
function checkimg(tmp)
if panduan("/sdcard/左飞资源包/左飞全防/"..tmp) ~= true then
gg.toast("正在下载资源"..tmp.."\n请耐心等待")
download("https://escape2020-1303126286.cos.ap-shenzhen-fsi.myqcloud.com/"..tmp,"/sdcard/左飞资源包/左飞全防/"..tmp)
end
end
ckimg = {
}
for i = 1,#ckimg do
jindu = i
checkimg(ckimg[i])
end
function 获取图片(txt)
txt = string.url(txt,"de")
ntxt = string.sub(string.gsub(txt,"/","-"),-10,-1)
if string.find(tostring(txt),"http") ~= nil then
if panduan("/sdcard/左飞资源包/左飞全防/"..ntxt) == false then
file.download(txt,"/sdcard/左飞资源包/左飞全防/"..ntxt)
else
end
txt = "/sdcard/左飞资源包/左飞全防/"..ntxt
end
return luajava.getBitmapDrawable(txt)
end
function getRes(x)
return 获取图片("/sdcard/左飞资源包/左飞全防/"..x)
end
function getVerticalBG(gtvb1,gtvb3,gtvb4,gtvb5)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(gtvb3)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)
return jianbians
end
function getCorner(gtvb1,gtvb3,gtvb4,gtvb5,g1,g2,g3,g4)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(gtvb3)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)--边框宽度和颜色
jianbians:setCornerRadii({g1,g1,g2,g2,g3,g3,g4,g4})
return jianbians
end
function getHorizontalBG(gtvb1,gtvb3,gtvb4,gtvb5)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(gtvb3)
jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)--边框宽度和颜色
return jianbians
end
context = app.context
window = context:getSystemService("window") -- 获取窗口管理器
function getLayoutParams()
LayoutParams = WindowManager.LayoutParams
layoutParams = luajava.new(LayoutParams)
if (Build.VERSION.SDK_INT >= 26) then -- 设置悬浮窗方式
layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY
else
layoutParams.type = LayoutParams.TYPE_PHONE
end
layoutParams.format = PixelFormat.RGBA_8888 -- 设置背景
layoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL -- 焦点设置Finish
layoutParams.gravity = Gravity.TOP|Gravity.LEFT -- 重力设置
layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度
layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度
return layoutParams
end
slctb = getVerticalBG({0xffffffff,0xffffffff},25)
slcta = getHorizontalBG({0x221750EB,0x221750EB},25)
function getButtonBG()
local selector = luajava.getStateListDrawable()
selector:addState({
-android.R.attr.state_pressed
}, getVerticalBG({0x55ffffff,0x55ffffff},20,2,0xaaA0D1FF))
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0x22A0D1FF,0x22A0D1FF},20,2,0xaaA0D1FF))
return selector
end
function getSelector()
selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, slcta) -- 点击时候的背景
selector:addState({
-android.R.attr.state_pressed
}, slctb) -- 没点击的背景
return selector
end
hanshu = function(v, event)
local Action = event:getAction()
if Action == MotionEvent.ACTION_DOWN then
isMove = false
RawX = event:getRawX()
RawY = event:getRawY()
x = mainLayoutParams.x
y = mainLayoutParams.y
elseif Action == MotionEvent.ACTION_MOVE then
isMove = true
mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX)
mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(floatWindow, mainLayoutParams)
end
end
YoYoImpl = luajava.getYoYoImpl()
changan.menu = function(sview)
菜单页数=#sview
当前分区={} 分区页数={}
侧边={} 功能区={}
顶边={
LinearLayout,
layout_height='match_parent',
layout_width='match_parent',
background=getBG({0xffffffff,0xffffffff},{25,25,25,25}),
layout_margin='6dp',
elevation='2dp',
orientation='vertical',
onClick=function() end,
onTouch=hanshu,
}
beij=getBG('0xFFA0D1FF',25)
dbback=getVerticalBG({0xffffffff,0xffffffff},90)
for i = 1,菜单页数 do
分区页数[i]= #sview[i]
table.insert(顶边,{
FrameLayout,
orientation='vertical',
layout_height='wrap_content',
layout_width='match_parent',
gravity='center_horizontal',
{
TextView,
layout_height='25dp',
layout_width='match_parent',
padding={'15dp','4dp','15dp','4dp'},
text=sview[i]['分页名字'],
textColor='#000000',
textSize='10sp',
gravity='center||Left',
__onCreate=function(v)
_ENV['ding'..i]=v
end,
elevation='1dp',
layout_margin='1dp',
background=slctb,
onClick=function() 切换(i) end,
onTouch=hanshu,
},
{ImageView,
src=获取图片(sview[i]['分页图标']),
layout_height='15dp',
layout_width='15dp',
layout_margin='5dp',
__onCreate=function(v)
_ENV['tubiao'..i]=v
end,
layout_marginLeft = "50dp",
elevation='4dp',
},
})
功能区[i]={}
local layoutm={
LinearLayout,
id = "layoutm"..i,
padding='4dp',
layout_width = "match_parent",
orientation = "vertical",
gravity = "center_horizontal",
}
local menulayout={
LinearLayout,
layout_width='match_parent',
layout_height='wrap_content',
visibility = "gone",
orientation = "vertical",
id='menu'..i..1,
}
for k,v in pairs(sview[i]['功能配置']) do
table.insert(menulayout,v)
end
local menulayout=luajava.loadlayout(menulayout)
功能区[i][1]=menulayout
table.insert(layoutm,menulayout)
local menus={
LinearLayout,
layout_width = "280dp",
layout_height = "260dp",
visibility = "gone",
orientation = "vertical",
padding={'0dp','0dp','0dp','0dp'},
background=获取图片(背景图片),
elevation='3dp',
{
ScrollView,
fillViewport = "true",
--padding = "10dp"
layout_marginTop='35dp',
gravity = "center",
layout_width = "match_parent",
layout_height = "match_parent",
orientation = "horizontal",
layoutm
}}
_ENV["layout"..i] = luajava.loadlayout(menus)
end
ckou = {
LinearLayout,
orientation='vertical',
layout_width = "wrap_content",
layout_height = "wrap_content",
}
for i = 1,菜单页数 do
ckou[#ckou+1] = _ENV["layout"..i]
end
headicon=luajava.loadlayout({
LinearLayout,
layout_height='40dp',
layout_width='40dp',
background=getBG({0xffffffff,0xffffffff},35),
gravity = "center",
elevation='2dp',
onTouch=hanshu,
{ImageView,
src=获取图片(悬浮窗图标),
layout_height="34dp",
layout_width="34dp",
onClick = 隐藏,
onTouch = hanshu,
},
})
ckou = luajava.loadlayout(ckou)
floatWindow = {
FrameLayout,
id = "motion",
elevation = "10dp",
onTouch = hanshu,
onClick = function() end,
layout_width = "wrap_content",
orientation = "vertical",
gravity = "center_vertical",
layout_height = "wrap_content",
{FrameLayout,
layout_height='260dp',
layout_width='370dp',
id='canvv',
{FrameLayout,
layout_height='match_parent',
layout_width='match_parent',
id='canv',
visibility="gone",
},
{
LinearLayout,
id = 'chuangk',
visibility = 'gone',
layout_height = 'wrap_content',
{
LinearLayout,
layout_height = 'match_parent',
layout_width = '90dp',
onClick = function() end,
onTouch = hanshu,
orientation = 'vertical',
{
LinearLayout,
layout_width='match_parent',
layout_weight = 1,
layout_height='match_parent',
orientation = "vertical",
background=getBG({0xffeeeeee,0xffeeeeee},{10,0,0,10}),
gravity = "center",
-- layout_marginRight='100dp',
onClick=function() end,
onTouch=hanshu,
headicon,
顶边
}
},
ckou
}
},
{
ImageView,
id = "control",
background = 获取图片(悬浮窗图标),
layout_width = "40dp",
layout_height = "40dp",
onTouch = hanshu,
onClick = 隐藏,
}, {--这个是灵动岛布局先放配置
LinearLayout,
id="shadow",
layout_width="match_parent",
visibility="gone",
layout_height='match_parent',
onClick=function() 灵动岛() canSwipeUp=false canSwipeDown=true end
},
{
FrameLayout,
layout_marginTop="5dp",
layout_marginLeft="20dp",
layout_marginRight="20dp",
layout_gravity="center|top",
id="shadow1",
layout_width="wrap_content",
layout_height='wrap_content',
elevation="8dp",
background={GradientDrawable,color=0xff161616,cornerRadius=90},
LayoutTransition=layoutTransition,
{
LinearLayout,
gravity="center",
id=luajava.newId("SmallIsland"),
layout_height="25dp",
layout_width="100dp",
onTouch=function(view, event)
local action = event:getAction()
if action == MotionEvent.ACTION_DOWN then
initialY = event:getY()
elseif action == MotionEvent.ACTION_MOVE then
local currentY = event:getY()
local deltaY = currentY - initialY
if deltaY < -threshold and canSwipeUp then
灵动岛()
canSwipeUp = false
canSwipeDown = true
elseif deltaY > threshold and canSwipeDown then
灵动岛()
canSwipeDown = false
canSwipeUp = true
end
end
return true
end,
{
LinearLayout,
id=luajava.newId("Smalldisplay"),
layout_height="25dp",
layout_width="100dp",
{
ImageView,
layout_gravity="center",
layout_width="17dp",
layout_height="17dp",
layout_marginLeft="5dp",
src="/sdcard/左飞资源包/左飞全防/headset",
ColorFilter="#FAFAFA",
},
{
TextView,
id="IslandText",
layout_weight=1,
gravity="center",
layout_width="match_parent",
layout_height="match_parent",
text="上下滑动长按双击交互",
ellipsize="marquee",
singleLine=true,
selected=true,
textColor="#FAFAFA",
textSize="8dp",
}
}
},
{
LinearLayout,
id="Island",
layout_height="150dp",
visibility="gone",
layout_width="300dp",
onClick=function() end,
onTouch=function(view, event)
local action = event:getAction()
if action == MotionEvent.ACTION_DOWN then
initialY = event:getY()
elseif action == MotionEvent.ACTION_MOVE then
local currentY = event:getY()
local deltaY = currentY - initialY
if deltaY < -threshold and canSwipeUp then
灵动岛()
canSwipeUp = false
canSwipeDown = true
elseif deltaY > threshold and canSwipeDown then
灵动岛()
canSwipeDown = false
canSwipeUp = true
end
end
return true
end,
{
LinearLayout,
id=luajava.newId("music"),
layout_height="fill_parent",
layout_width="fill_parent",
orientation="vertical",
{
TextView,
id="Mname",
gravity="center",
layout_width="fill_parent",
layout_height="wrap_control",
layout_marginTop="10dp",
text=timeA,
ellipsize="marquee",
singleLine=true,
selected=true,
textColor="#FAFAFA",
textSize="12dp",
},
{
luajava.post(LinearProgressIndicator,baseWindow:getContext()),
id="DownloadProgress",
visibility = "gone",
layout_width = 'match_parent',
layout_height = 'wrap_content',
indeterminate = true,
},
{
FrameLayout,
layout_marginTop="10dp",
layout_width="fill_parent",
layout_height="wrap_control",
{
ImageView,
src="/sdcard/左飞资源包/左飞全防/ts",
layout_width="20dp",
layout_marginRight="match_parent",
layout_marginLeft="15dp",
layout_gravity="center|left",
layout_height="20dp",
onClick=function() 自定义主题() end,
ColorFilter="#FAFAFA",
},
{
TextView,
id="GSname",
layout_marginLeft="15dp",
layout_gravity="center",
layout_marginRight="15dp",
gravity="center",
layout_width="fill_parent",
layout_height="wrap_control",
text="",
ellipsize="marquee",
singleLine=true,
selected=true,
textColor="#A9B3B4",
textSize="8dp",
},
{
ImageView,
src="/sdcard/左飞资源包/左飞全防/playlist",
layout_width="20dp",
layout_marginLeft="match_parent",
layout_marginRight="15dp",
layout_gravity="center|right",
layout_height="20dp",
onClick=function() 播放列表() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
gravity="center",
layout_width='match_parent',
layout_height='wrap_content',
{
TextView,
id="ntime",
gravity="center|right",
layout_width="45dp",
layout_height="wrap_control",
text="0:00",
textColor="#FAFAFA",
textSize="12dp",
},
{
Slider,
id="hkuai",
trackStopIndicatorSize="0dp",
layout_weight=1,
stepSize=1,
valueTo=100,
valueFrom=0,
trackHeight="10dp",
ThumbHeight="17dp",
tickVisible=false,
thumbWidth="4dp",
layout_width='match_parent',
layout_height='wrap_content',
labelFormatter=function(seconds)
if isPlaying then return ctime(seconds) else return "0:00" end
end,
addOnChangeListener=function(slider, value, fromUser)
if fromUser and isPlaying and isReady then mediaPlayer:seekTo(value*1000) end
end
},
{
TextView,
id="atime",
gravity="center|left",
layout_width="45dp",
layout_height="wrap_control",
text="0:00",
textColor="#FAFAFA",
textSize="12dp",
},
},
{
LinearLayout,
layout_width='match_parent',
layout_height='wrap_content',
layout_marginLeft="20dp",
layout_marginRight="20dp",
{
LinearLayout,
id=luajava.newId("Collection"),
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
id="souc",
src="/sdcard/左飞资源包/左飞全防/unlove",
layout_width="20dp",
layout_height="20dp",
onClick=function() changan.controlWater(luajava.getIdView("Collection"),200) 收藏() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
id=luajava.newId("PreviousAong"),
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
src="/sdcard/左飞资源包/左飞全防/last",
layout_width="25dp",
layout_height="25dp",
onClick=function() changan.controlWater(luajava.getIdView("PreviousAong"),200) 上一首() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
layout_weight=1,
id=luajava.newId("PauseLayout"),
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
LottieAnimationView,
id="ztkq",
layout_width="25dp",
layout_height="25dp",
onClick=function() 暂停() end,
},
},
{
LinearLayout,
id=luajava.newId("NextSong"),
layout_weight=1,
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
src="/sdcard/左飞资源包/左飞全防/next",
layout_width="25dp",
layout_height="25dp",
onClick=function() changan.controlWater(luajava.getIdView("NextSong"),200) 下一首() end,
ColorFilter="#FAFAFA",
},
},
{
LinearLayout,
layout_weight=1,
id=luajava.newId("LoopSetting"),
layout_width="match_parent",
layout_height="match_parent",
gravity="center",
{
ImageView,
id="bfsz",
src="/sdcard/左飞资源包/左飞全防/setPlay",
layout_width="20dp",
layout_height="20dp",
onClick=function() 播放设置() end,
ColorFilter="#FAFAFA",
},
},
}
}
},
},
}
totouch=luajava.loadlayout({
LinearLayout,
layout_height='42dp',
layout_width='42dp',
onClick=隐藏,
onTouch=hanshu
})
local function invoke()
local ok
local RawX, RawY, x, y
mainLayoutParams = getLayoutParams()
floatWindow = luajava.loadlayout(floatWindow)
local function invoke2()
for i=1,#MSwitch do
SwitchColor(luajava.getIdView(MSwitch[i]),0xff5AA7FF,0x88ffffff,0xeeeeeeee,0x88888888)
end
window:addView(floatWindow, mainLayoutParams)
canv:addView(parti)
block('end')
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
block('join')
local isMove
end
invoke(swib1,swib2)
切换(1) 分区(1)
隐藏()
function SliderColor(id,color1,color2,color3)
id:setTrackActiveTintList(ColorStateList({{}},{"0xff"..color1}))
id:setTrackInactiveTintList(ColorStateList({{}},{"0x50"..color2}))
id:setThumbTintList(ColorStateList({{}},{"0xff"..color3}))
end
function SwitchColor(id,color)
id:setTrackTintList(ColorStateList({{android.R.attr.state_checked}},{color}))
end
SliderColor(hkuai,"42E6A2","D4D4D4","FFFFFF")
ztkq:setAnimationFromJson(io.open("/storage/emulated/0/左飞资源包/左飞全防/Pause", "r"):read("*all"))
gg.setVisible(false)
luajava.setFloatingWindowHide(true)
qhkai = 0
qiehuan = function()
if qhkai == 0 then
qhkai = 1
draw.remove()
luajava.runUiThread(function()
changan.controlSmall(floatWindow,400)
end)
gg.sleep(400)
luajava.runUiThread(function()
floatWindow:setVisibility(View.GONE)
end)
else
qhkai = 0
huiz()
draw.text('.', -9200,-9200)
luajava.runUiThread(function() floatWindow:setVisibility(View.VISIBLE) end)
luajava.runUiThread(function()
changan.controlBig(floatWindow,400)
end)
end
end
local hourStr=os.date("%H")
local hour=tonumber(hourStr) -- 获取当前小时
if hour >=0 and hour < 3 then
timeA="夜深了,早点休息"
elseif hour >=3 and hour < 5 then
timeA="凌晨了,注意身体"
elseif hour >=5 and hour < 12 then
timeA="上午好☁️"
elseif hour >=12 and hour < 14 then
timeA="中午好🌞"
elseif hour >=14 and hour < 19 then
timeA="下午好🍵"
elseif hour >=19 and hour < 24 then
timeA="晚上好🌙"
end
import"android.graphics.Paint"
function souyy(txt)
return table.json(gg.makeRequest("http://music.163.com/api/search/get?s="..txt.."&type=1&offset=0&total=true&limit=20").content)
end
function searchmusic()
mustxt=luajava.getIdView("搜索"):getText()
mustxt=tostring(mustxt)
luajava.runOnUiThread(function()
luajava.getIdView("搜索"):setText("")
luajava.getIdView("musicWindow"):setVisibility(View.GONE)
SearchProgress:setVisibility(View.VISIBLE)
end)
if string.trim(mustxt)~="" then
musictable={}
mustable=souyy(mustxt)
mustable=mustable.result.songs
for k,v in pairs(mustable) do
musictable[#musictable + 1]=v
end
Sortsong(20)
end
luajava.runOnUiThread(function()
luajava.getIdView("musicWindow"):setVisibility(View.VISIBLE)
SearchProgress:setVisibility(View.GONE)
YoYoImpl:with("FadeIn"):duration(500):playOn(luajava.getIdView("musicWindow"))
end)
end
function Sortsong(formath)
musiccheck={}
for i=1,formath do
musid=musictable[#musictable+1-i].id
musname=musictable[#musictable+1-i].name
musart=musictable[#musictable+1-i].artists[0].name
musvip=musictable[#musictable+1-i].fee
musiccheck[#musiccheck+1]={musid,musname,musart,musvip}
end
musicadapter=ui.BaseAdapter({
getCount = function()
return table.getn(musiccheck) -- 使用 table.getn 获取表中元素的数量
end,
getItem = function(position)
return musiccheck[position + 1]
end,
getItemId = function(position)
return position
end,
getView=function(position, convertView, parent)
local SwitchView
local info=musicadapter:getItem(position)
if not convertView then
SwitchView=luajava.loadlayout({
MaterialCardView,
background={GradientDrawable,color=0x44FFFFFF,cornerRadius=20},
layout_width="match_parent",
strokeWidth=0,
{
LinearLayout,
orientation="vertical",
padding="3dp",
gravity="center",
layout_width="match_parent",
{
TextView,
textSize="14sp",
textColor="#91c8ff",
layout_hight="10dp",
layout_width="wrap_content",
gravity="center"
},
{
TextView,
textColor="#545454",
textSize="10sp",
layout_hight="10dp",
layout_width="wrap_content",
gravity="center"
}
}
})
else
SwitchView=convertView
end
SwitchView:getChildAt(0):getChildAt(0):setText(info[2])
SwitchView:getChildAt(0):getChildAt(1):setText(info[3])
SwitchView:setOnClickListener(function()
bofang(info[1],info[2],info[3])
if info[4] == 1 then
MaterialAlert("当前为付费VIP歌曲,可能只支持部分试听")
end
end)
return SwitchView
end
})
luajava.runOnUiThread(function()
musiclistview:setAdapter(musicadapter)
end)
end
lastClickTime1=0
function bofang(musicid, musicname, musicstart)
local currentTime1=os.time()
if currentTime1 - lastClickTime1 < 1 then return 0 end lastClickTime1=currentTime1
isExist=false
for i, _ in ipairs(musiclist) do
if musiclist[i][1] == musicid then
nowMusic = i
播放歌曲(musiclist[i][1])
isExist=true
end
end
if not isExist then
table.insert(musiclist, {musicid, musicname, musicstart, false})
nowMusic = #musiclist
播放歌曲(musicid)
end
end
function 写入()
lovemusic = {}
for _, v in pairs(musiclist) do
if v[4] then
table.insert(lovemusic, v)
end
end
file.write("/sdcard/左飞资源包/左飞全防/收藏歌单",lovemusic)
end
function 灵动岛()
luajava.getIdView("Smalldisplay"):setVisibility(View.GONE)
luajava.getIdView("music"):setVisibility(View.INVISIBLE)
if 灵动 then
luajava.startThread(function()
luajava.runOnUiThread(function()
shadow:setVisibility(View.GONE)
luajava.getIdView("SmallIsland"):setVisibility(View.VISIBLE)
Island:setVisibility(View.GONE)
end)
灵动=false
gg.sleep(500)
luajava.runOnUiThread(function()
luajava.getIdView("Smalldisplay"):setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(400):playOn(luajava.getIdView("Smalldisplay"))
end)
end)
else
luajava.startThread(function()
luajava.runOnUiThread(function()
shadow:setVisibility(View.VISIBLE)
luajava.getIdView("SmallIsland"):setVisibility(View.GONE)
Island:setVisibility(View.VISIBLE)
end)
灵动=true
gg.sleep(500)
luajava.runOnUiThread(function()
luajava.getIdView("music"):setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(400):playOn(luajava.getIdView("music"))
end)
end)
end
end
function ctime(value)
local minutes=math.floor(value / 60)
local seconds=value % 60
return string.format("%d:%02d",minutes,seconds)
end
function setTime(value)
local minutes=math.floor(value/1000)
luajava.runOnUiThread(function()
hkuai:setValueTo(minutes)
atime:setText(ctime(minutes))
end)
end
function playMusic(id)
pcall(function()
mediaPlayer:reset()
mediaPlayer:setDataSource("/sdcard/左飞资源包/左飞全防/音乐缓存/"..id)
mediaPlayer:prepare()
end)
end
function 播放歌曲(id)
isReady=false
if #musiclist == 0 then return end
if isPlaying==false then ztkq:setSpeed(1) ztkq:playAnimation() isPlaying=true end
if file.length("/sdcard/左飞资源包/左飞全防/音乐缓存/"..id) ~= 0 then
playMusic(id)
else
luajava.startThread(function()
luajava.runOnUiThread(function() DownloadProgress:setVisibility(View.VISIBLE) end)
local co = coroutine.create(function()
local success = file.download("http://music.163.com/song/media/outer/url?id=".. id.. ".mp3","/sdcard/左飞资源包/左飞全防/音乐缓存/".. id)
return success
end)
local status, result = coroutine.resume(co)
if status and result then
luajava.runOnUiThread(function() DownloadProgress:setVisibility(View.GONE) end)
playMusic(id)
else
print("下载出现问题,无法播放音乐")
end
end)
end
end
luajava.setInterface(mediaPlayer, 'setOnPreparedListener',--资源准备完毕监听
{onPrepared=function(media)
isReady=true
mediaTime=media:getDuration()
media:start()
setTime(mediaTime)
luajava.runOnUiThread(function()
hkuai:setValue(1)
Mname:setText(musiclist[nowMusic][2])
GSname:setText(musiclist[nowMusic][3])
if musiclist[nowMusic][4] then
sc=false
souc:setImageDrawable(getRes("love"))
souc:setColorFilter(0xffEC2937)
else
sc=true
souc:setImageDrawable(getRes("unlove"))
souc:setColorFilter(0xffFAFAFA)
end
end)
end})
luajava.setInterface(mediaPlayer, 'setOnCompletionListener',--播放完毕监听
{onCompletion=function(media)
换一首()--问题
end})
function MaterialAlert(text)
MaterialAlertDialog=MaterialAlertDialogBuilder(baseWindow:getContext())
:setTitle(项目名字) -- 设置标题
:setMessage(text)
:setPositiveButton('确定')
luajava.showAlert(MaterialAlertDialog)
end
BSZ=0
function 换一首()
if BSZ==0 then--列表循环
下一首()
elseif BSZ==1 then--随机播放
local randomnowMusic=math.random(1,#musiclist)
local selectedNumber=musiclist[randomnowMusic]
nowMusic=randomnowMusic
播放歌曲(selectedNumber[1])
elseif BSZ==2 then--单曲循环
播放歌曲(musiclist[nowMusic][1])
elseif BSZ==3 then--停止循环
luajava.newThread(function()
播放歌曲(musiclist[nowMusic][1])
gg.sleep(110)
isPlaying=false
mediaPlayer:pause()
luajava.runOnUiThread(function()
ztkq:setSpeed(-1)
ztkq:playAnimation()
end)
end):start()
end
end
function 播放设置()
changan.controlWater(luajava.getIdView("LoopSetting"),200)
if BSZ==0 then--随机播放
BSZ=BSZ+1
bfsz:setImageDrawable(getRes("repeatone"))
elseif BSZ==1 then--单曲循环
BSZ=BSZ+1
bfsz:setImageDrawable(getRes("stoploop"))
elseif BSZ==2 then--停止循环
BSZ=BSZ+1
bfsz:setImageDrawable(getRes("listloop"))
elseif BSZ==3 then--列表循环
BSZ=0
bfsz:setImageDrawable(getRes("setPlay"))
end
end
function 暂停()
if isPlaying then
ztkq:setSpeed(-1)--暂停
ztkq:playAnimation()
if isReady then
mediaPlayer:pause()
end
isPlaying=false
else
if isReady then
mediaPlayer:start()
end
ztkq:setSpeed(1)
ztkq:playAnimation()
isPlaying=true
end
end
function 下一首()
if #musiclist == 0 then MaterialAlert("列表没有可播放歌曲,请前往音乐界面添加!")
luajava.runOnUiThread(function()
Page:setCurrentItem(#stab-2)
end) return end
nowMusic=nowMusic + 1
if nowMusic > #musiclist then
nowMusic=1
end
musicInfo=musiclist[nowMusic]
播放歌曲(musicInfo[1])
end
function 上一首()
if #musiclist == 0 then MaterialAlert("列表没有可播放歌曲,请前往音乐界面添加!")
luajava.runOnUiThread(function()
Page:setCurrentItem(#stab-2)
end) return end
nowMusic=nowMusic - 1
if nowMusic < 1 then
nowMusic=#musiclist
end
musicInfo=musiclist[nowMusic]
播放歌曲(musicInfo[1])
end
sc=true
function 收藏()
if isReady then
if sc then
sc=false
musiclist[nowMusic][4]=true
souc:setImageDrawable(getRes("love"))
souc:setColorFilter(0xffEC2937)
else
sc=true
musiclist[nowMusic][4]=false
souc:setImageDrawable(getRes("unlove"))
souc:setColorFilter(0xffFAFAFA)
end
写入()
end
end
function 刷新列表()
playadapter=ui.BaseAdapter({
getCount = function()
return #musiclist
end,
getItem = function(position)
return musiclist[position + 1]
end,
getItemId = function(position)
return position
end,
getView=function(position, convertView, parent)
local SwitchView
local info=playadapter:getItem(position)
if info[4] then
MTP=getRes("love")
MTPC=0xffEC2937
else
MTP=getRes("unlove")
MTPC=0xff4B484F
end
if not convertView then
SwitchView=luajava.loadlayout(
{
FrameLayout,
layout_width="match_parent",
layout_height="30dp",
paddingLeft="5dp",
paddingRight="5dp",
{
ImageView,
id="Playlike",
src=MTP,
layout_gravity="center|left",
ColorFilter=MTPC,
layout_width="22dp",
layout_height="22dp",
},
{
TextView,
id="playname",
layout_marginLeft="25dp",
layout_marginRight="25dp",
layout_width="match_parent",
layout_height="wrap_content",
layout_gravity="center",
gravity="center",
textColor="#27253A",
},
{
ImageView,
id="songremove",
src="/sdcard/左飞资源包/左飞全防/heix",
ColorFilter="#4B484F",
layout_gravity="center|right",
layout_width="18dp",
layout_height="18dp",
},
})
else
SwitchView=convertView
end
Playlike:setOnClickListener(function()
if info[4] then
info[4]=false
musiclist[position+1][4]=false
写入()
刷新列表()
luajava.runOnUiThread(function()
if nowMusic==position+1 then sc=true
souc:setImageDrawable(getRes("unlove"))
souc:setColorFilter(0xffFAFAFA) end
end)
else
info[4]=true
musiclist[position+1][4]=true
写入()
刷新列表()
luajava.runOnUiThread(function()
if nowMusic==position+1 then sc=false
souc:setImageDrawable(getRes("love"))
souc:setColorFilter(0xffEC2937) end
end)
end
end)
playname:setOnClickListener(function()
播放歌曲(info[1],info[2],info[3],info[4])
nowMusic=position+1
end)
playname:setText(info[2])
songremove:setOnClickListener(function()
luajava.startThread(function()
if gg.alert('确定删除['..info[2]..']吗?','确定','点错了')==1 then
table.remove(musiclist,position+1) 刷新列表() 写入()
if nowMusic==position+1 then 下一首() end end
end)
end)
return SwitchView
end
})
luajava.runOnUiThread(function()
songlistview:setAdapter(playadapter)
end)
end
songlist={
LinearLayout,
orientation="vertical",
layout_width="match_parent",
layout_height="wrap_content",
{
ListView,--列表适配器
id="songlistview",
layout_width='match_parent',
layout_height='match_parent',
dividerHeight=3,
}
}
function 播放列表()
dialogBuilder=MaterialAlertDialogBuilder(baseWindow:getContext()) -- 创建对话框构造器
:setTitle('待播放列表') -- 设置标题
:setView(luajava.loadlayout(songlist))
:setPositiveButton('确定')
luajava.showAlert(dialogBuilder)
刷新列表()
end
huiz()
draw.text('.', -9200,-9200)
while true do
if tuichu==1 then os.exit() end
if 音量键 then
jianting3(qiehuan)
gg.sleep(300)
end
if isPlaying and isReady and #musiclist ~= 0 then
luajava.runOnUiThread(function()
ntime:setText(ctime(math.floor(mediaPlayer:getCurrentPosition()/1000)))
hkuai:setValue(math.floor(mediaPlayer:getCurrentPosition()/1000))
end) end
gg.sleep(60)
end
setOnExitListener(function()
mediaPlayer:reset()
mediaPlayer:release()
window:removeView(floatWindow)
tuichu=1
end)
luajava.setFloatingWindowHide(false)
end
changan.controlRotation9 = function(control, time,t)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
time,t
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(400)
xuanzhuandonghua:start()
end)
end
function launch(appstart)
local loadBox = getLoadingBox('正在启动游戏\n'..appstart)
loadBox['显示']()
if appstart ~= nil then
gg.setProcess(appstart)
gg.sleep(500)
if tostring(gg.getTargetPackage()) == appstart then
gg.toast("正在启动游戏")
gg.processKill()
tuichu=true
luajava.setFloatingWindowHide(false)
os.exit()
end
gg.toast("正在启动游戏...")
app.startActivity(appstart)
jci=0
--gg.sleep(5000)
while true do
gg.setProcess(appstart)
gg.sleep(400)
if tostring(gg.getTargetPackage()) == appstart then
loadBox['关闭']()
gg.alert("启动成功")
else
jci=jci+1
if jci==14 then
loadBox['关闭']()
gg.alert("自动获取进程失败\n请手动选择游戏进程")
gg.setProcessX()
break
end
end
gg.sleep(100)
end
end
end
function card(cdv)
logo=cdv[1]
name=cdv[2]
tags=cdv[3]
func=cdv[4]
if not x then x = 2 end
tag = {
LinearLayout,
}
for i = 1,#tags do
tag[#tag+1] = {
TextView,
background = getHorizontalBG({0x00FF9700,0x00FF9700},45,2,0xffFF9700),
layout_height = "20dp",
padding = "2dp",
textColor = 0xffFF9700,
layout_marginLeft = "10dp",
gravity = "center_vertical",
text = " "..tags[i].." ",
textSize = "9sp",
}
end
tags = tag
tmp = luajava.loadlayout(
{
FrameLayout,
layout_height = "wrap_content",
layout_width = "fill_parent",
{
LinearLayout,
orientation = "vertical",
layout_height = "100dp",
layout_marginLeft = "4dp",
layout_marginRight = "4dp",
layout_marginTop = "2dp",
layout_marginBottom = "2dp",
layout_width = "match_parent",
background=getVerticalBG({0xffffffff,0xffffffff},10,3,0xffe79268),
{
LinearLayout,
layout_marginLeft = "10dp",
layout_marginRight = "10dp",
layout_marginTop = "10dp",
layout_marginBottom = "10dp",
layout_width = "match_parent",
layout_height = "40dp",
{
ImageView,
layout_width = "40dp",
layout_height = "40dp",
src = 获取图片(logo),
},
{
TextView,
layout_height = "40dp",
layout_marginLeft = "10dp",
gravity = "center_vertical",
text = name,
textColor="#161616",
textSize = "13sp",
}
},
tags
},
{
LinearLayout,
onClick = function()
luajava.newThread(function() 隐藏() func() end):start() end,
background = getHorizontalBG({0xffe79268,0xffe79268},90),
layout_height = "25dp",
layout_width = "55dp",
layout_gravity = "right",
layout_marginRight = "10dp",
layout_marginTop = "70dp",
gravity = "center",
{
ImageView,
layout_height = "20dp",
layout_width = "15dp",
src = getRes("rw1"),
colorFilter=0xffffffff
},
{
TextView,
textColor = "#ffffff",
text = "启动",
textSize = "10sp",
layout_height = "20dp",
gravity = "center",
layout_width = "30dp",
}
}
})
return tmp
end
function Island开关(name,func1,func2,nid)
name = name..guid()
_ENV[name] = "关"
if func1 == nil then func1 = function() end end
if func2 == nil then func2 = function() end end
if type(func1) == "function" then
return function()
namers = _ENV[name]
if namers ~= "开" then
luajava.runUiThread(function()
luajava.getIdValue(nid.."k"):setBackground(getHorizontalBG({0x00C24C38,0x00F78F5C},5))
luajava.getIdValue(nid.."g"):setBackground(getHorizontalBG({"0xffff0000","0xffff0000","0xffff0000"},5,3,"0xffff0000"))
end)
_ENV[name] = "开"
vibra:vibrate(6)
pcall(func1)
else
luajava.runUiThread(function()
luajava.getIdValue(nid.."g"):setBackground(getHorizontalBG({0x00C24C38,0x00F78F5C},5))
luajava.getIdValue(nid.."k"):setBackground(getHorizontalBG({"0xffff0000","0xffff0000","0xffff0000"},5,3,"0xffff0000"))
end)
_ENV[name] = "关"
vibra:vibrate(6)
pcall(func2)
end
end
end
end
function visi3(tid, ttid)
local tview = luajava.getIdValue(tid)
local ttview = luajava.getIdValue(ttid)
if not tview then
return 0
end
if tonumber(tostring(tview:getVisibility())) == 8.0 then
tview:setVisibility(View.VISIBLE)
-- 设置文本视图不可见
top_music:setVisibility(View.GONE)
else
tview:setVisibility(View.GONE)
-- 设置文本视图可见
top_music:setVisibility(View.VISIBLE)
end
end
boxes = {} boxpic = {}
function changan.lddLsland2(views)
local tid = "LDDS"..guid ()
local ttid = tid.."6"
local t1id = guid ()
kgid = views[1].."关"
id = views[1].."id"
local func = Island开关(views[1],func1,func2)
ID = views[1].."id"..guid()
boxpic[tid] = luajava.loadlayout {
ImageView ,
}
firadio = {
LinearLayout,
layout_width="match_parent",
layout_height = "wrap_content" ,
layout_gravity = "center",
orientation = "vertical",
LayoutTransition=layoutTransition,
onTouch = function() visi3 (tid , ttid)
end
}
if type (views [1]) == "string" or type (views [1]) == "number" then
firadio [# firadio + 1] = {
LinearLayout,
layout_width = 'match_parent',
layout_height = "25dp",
gravity = "center",
elevation = "2dp",
layout_marginRight = "4dp",
layout_marginLeft = "4dp",
gravity = "center_vertical",
LayoutTransition=layoutTransition,
{
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "60dp",
gravity = "center_vertical" ,
background =灵动岛,
{
TextView ,
id="top_music",
text =views[1],
textSize = "9sp" ,
layout_width = "90dp" ,
layout_weight=1,
textColor = "#ffffff" ,
Typeface=font,
gravity = "center" ,
},
}
}else
os.exit ()
end
radios = {
LinearLayout ,
orientation = "vertical" ,
visibility = "gone" ,
id = luajava.newId (tid) ,
layout_width = 'fill_parent' ,
elevation = "3dp",
layout_gravity = "center",
}
for i = 2 , # views do
radios [# radios + 1] = views [i]
end
boxes[tid] = luajava.loadlayout(radios)
firadio [# firadio + 1] = boxes[tid]
_ENV [t1id] = luajava.loadlayout ({
LinearLayout,
layout_width="match_parent",
layout_height = "match_parent",
layout_gravity = "center",
{
LinearLayout,
layout_width = 'match_parent',
layout_height = "wrap_content",
layout_gravity = "center",
elevation = "2dp",
layout_marginRight = "4dp",
layout_marginLeft = "4dp",
background = luajava.loadlayout{GradientDrawable,color=灵动岛,cornerRadius=40},
firadio
}
})
return _ENV [t1id]
end
function visi (tid , ttid)
vibra:vibrate(4)
local tview = luajava.getIdValue (tid)
local ttview = luajava.getIdValue (ttid)
if not tview then
return 0
end
if tonumber (tostring (tview : getVisibility ())) == 8.0 then
tview : setVisibility (View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(200):playOn(boxes[tid])
changan.controlRotation9(boxpic[tid],0,90)
else
tview : setVisibility (View.GONE)
changan.controlWater (_ENV [tid.."6"] , 200)
changan.controlRotation9(boxpic[tid],90,0)
end
end
boxes = {} boxpic = {}
function changan.box (views)
local tid = "box"..guid ()
boxpic[tid] = luajava.loadlayout {
ImageView ,
background = getRes("hei_right"),
layout_width = "24dp" ,
layout_height = "24dp" ,
}
local ttid = tid.."6"
local t1id = guid ()
firadio = {
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "2dp" ,
layout_marginBottom = "2dp" ,
orientation = "vertical" ,
}
if type (views [1]) == "string" or type (views [1]) == "number" then
firadio [# firadio + 1] = {
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "30dp" ,
gravity = "center_vertical" ,
layout_marginTop = "2dp" ,
layout_marginLeft='4dp',
layout_marginRight='4dp',
elevation='2dp',
layout_marginBottom = "2dp" ,
onClick = function ()
visi (tid , ttid)
end
,
background = getButtonBG(),
{
TextView , text = views [1] ,
textSize = "13sp" ,
layout_marginLeft = "15dp" ,
layout_marginRight='-20dp',
layout_width = "match_parent" ,
layout_weight=1,
textColor = "#000000" ,
gravity = "center" ,
},{
LinearLayout ,
padding={"0dp","0dp","10dp","0dp"},
layout_width = "30dp" ,
layout_height = "30dp" ,
gravity = "center",
boxpic[tid],
}
} else
gg.alert ("changan.box的table内第一个元素必须是string") os.exit ()
end
radios = {
LinearLayout ,
layout_marginLeft = "0dp" ,
layout_marginRight = "0dp" ,
orientation = "vertical" ,
visibility = "gone" ,
id = luajava.newId (tid) ,
padding = "0dp" ,
layout_width = 'fill_parent' ,
}
for i = 2 , # views do
radios [# radios + 1] = views [i]
end
boxes[tid] = luajava.loadlayout(radios)
firadio [# firadio + 1] = boxes[tid]
_ENV [t1id] = luajava.loadlayout (firadio)
return _ENV [t1id]
end
corbk = true
当前ui = 1
function 分区(x)
当前分区[当前ui]=x
luajava.runUiThread(function()
for i=1,分区页数[当前ui] do
_ENV['menu'..当前ui..i]:setVisibility(View.GONE)
end
_ENV['menu'..当前ui..当前分区[当前ui]]:setVisibility(View.VISIBLE)
end)
end
function 切换(x)
当前ui = x
luajava.runUiThread(function()
if 当前分区[当前ui]==nil then
分区(1)
end
for i = 1,菜单页数 do
_ENV["ding"..i]:setTextColor(0xffaaaaaa)
_ENV['ding'..i]:setBackground(slctb)
_ENV["layout"..i]:setVisibility(View.GONE)
end
_ENV["ding"..当前ui]:setTextColor(0xff000000)
_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
_ENV['ding'..当前ui]:setBackground(slcta)
changan.controlWater(_ENV['ding'..当前ui],400)
end)
end
显示 = 0
beij2 = luajava.loadlayout({
GradientDrawable,
color = "#001E1C27",
cornerRadius = 10
})
function changan.text(txt,color,size)
if not txt then txt = "未设置文字" end
if not color then color = "#545454" end
if not size then size = "12sp" end
return luajava.loadlayout(
{
TextView,
text = txt,
textSize = size,
textColor = color,
layout_width = "match_parent",
padding={'10dp','0dp','0dp','0dp'}
})
end
显示 = 0
function 隐藏()
luajava.runUiThread(function()
if tonumber(tostring(chuangk:getVisibility())) == 8.0 then
control:setVisibility(View.GONE)
显示 = 1
chuangk:setVisibility(View.VISIBLE)
_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
changan.controlBigX(floatWindow,800)
shadow1:setVisibility(View.VISIBLE)
canSwipeUp = false
canSwipeDown = true
canv:setVisibility(View.VISIBLE)
canvv:setVisibility(View.VISIBLE)
floatWindow:setBackground(beij)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
window : updateViewLayout (floatWindow , mainLayoutParams)
else
luajava.startThread(function()
luajava.runUiThread(function()
YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow)
end)
gg.sleep(300)
luajava.runUiThread(function()
chuangk:setVisibility(View.GONE)
canSwipeUp = false
canSwipeDown = false
shadow1:setVisibility(View.GONE)
floatWindow:setBackground(beij2)
canv:setVisibility(View.GONE)
canvv:setVisibility(View.GONE)
control:setVisibility(View.VISIBLE) 显示 = 0
_ENV["layout"..当前ui]:setVisibility(View.GONE)
YoYoImpl:with("FadeIn"):duration(300):playOn(floatWindow)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE
window : updateViewLayout (floatWindow , mainLayoutParams)
end)
end)
end
end)
end
import("android.media.AudioManager")
audi = context:getSystemService("audio")
audiotype = {
AudioManager.STREAM_ALARM, --手机闹铃的声音
AudioManager.STREAM_MUSIC, --手机音乐的声音
AudioManager.STREAM_NOTIFICATION, --系统提示的通知
AudioManager.STREAM_RING, --电话铃声的声音
AudioManager.STREAM_SYSTEM, --手机系统的声音
AudioManager.STREAM_VOICE_CALL, --语音电话的声音
AudioManager.STREAM_DTMF, --DTMF音调的声音
}
yinl = {}
for i = 1,#audiotype do
yinl[i] = {}
yinl[i].type = audiotype[i]
yinl[i].min = audi:getStreamMinVolume(audiotype[i])
yinl[i].max = audi:getStreamMaxVolume(audiotype[i])
yinl[i].now = audi:getStreamVolume(audiotype[i])
end
function jianting2()
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].min = audi:getStreamMinVolume(audiotype[i])
yinln[i].max = audi:getStreamMaxVolume(audiotype[i])
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now > yinl[i].now then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0)
gg.alert("up")
elseif yinln[i].now < yinl[i].now then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_RAISE,0)
gg.alert("down\n"..yinln[i].now.."\n"..yinl[i].now)
end
end
end
yltype = 0
function jianting3(func)
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now > yinl[i].now then
yinl[i].now = yinln[i].now
if yltype == 1 then
yltype = 0
func()
end
elseif yinln[i].now < yinl[i].now then
yinl[i].now = yinln[i].now
if yltype == 0 then
yltype = 1
func()
end
end
end
end
function jianting(func)
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now >= yinl[i].max then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0)
end
if yinln[i].now > yinl[i].now then
audi:setStreamVolume(yinln[i].type,yinl[i].now,0)
func()
end
end
end
function guid()
seed = {
'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'
}
tb = {}
for i = 1,32 do
table.insert(tb,seed[math.random(1,16)])
end
sid = table.concat(tb)
return string.format('%s%s%s%s%s',
string.sub(sid,1,8),
string.sub(sid,10,12),
string.sub(sid,21,22))
..string.format('%s%s%s%s%s',
string.sub(sid,1,6),
string.sub(sid,21,25)
)
end
local function exit()
tuichu = 1
luajava.setFloatingWindowHide(false)
luajava.post(function()
window:removeView(floatWindow)
end)
end
setExitEvent(exit)
changan.controlWater = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.8, 0.9, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1,0.8,0.9,1
}):setDuration(time):start()
end) end
changan.controlSmall = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
end) end
changan.controlBig = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end
changan.controlBigX = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end
buts={}
heir=getRes("heir")
function changan.button(txt,func,txtc)
if not txt then txt = "未设置" end
if not txtc then txtc="#000000" end
local tid="Cbutton"..guid()
buts[tid]=luajava.loadlayout(
{
LinearLayout,
layout_width = 'match_parent',
layout_height = "wrap_content", {
LinearLayout,
layout_height='30dp',
layout_width = "fill_parent",
gravity = "center_vertical",
layout_margin='5dp',
elevation='3dp',
background = getButtonBG(),
padding="3dp",
onClick = function()
changan.controlWater(buts[tid],300)
luajava.newThread(func):start() end,
{
TextView,
--id = luajava.newId(tid),
textColor = txtc,
text = txt,
textSize = "13sp",
gravity='center',
layout_height = "wrap_content",
layout_width = "fill_parent",
layout_weight=1,
}
}})
return buts[tid]
end
checkbg1 = getRes("bbts_checkoff")
checkbg2 = getRes("bbts_check")
checkbg3 = getVerticalBG({0x00aaaaaa,0x00aaaaaa},360,7,0xff999999)
checkbg4 = getVerticalBG({0x00000000,0x00000000},360,11,0xffe79268)
radoff = getVerticalBG({0xaaBDC7CD,0xaaBDC7CD},360)
radon = getRes("dz_check")
radiog={}
function changan.intradio(nid,name,func)
return {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_weight=1,
layout_marginLeft = "2dp" ,
layout_marginRight = "5dp" ,
layout_marginTop='2dp',
layout_marginBottom='8dp',
gravity = "center_vertical" ,
onClick = function ()
--changan.controlWater (_ENV [tid] , 200)
func()
end
,
{
ImageView ,
id = luajava.newId (nid) ,
layout_width = '15dp' ,
layout_height = "15dp" ,
layout_marginLeft = "2dp" ,
layout_marginRight = "4dp" ,
src =radoff ,
padding='0dp',
} , {
TextView ,
gravity = "top" ,
text = name ,
textSize="12sp",
textColor = '#000000' ,
layout_width = 'wrap_content' ,
layout_height = 'wrap_content' ,
}
}
end
local RadTint=ColorStateList({
{android.R.attr.state_checked},
{-android.R.attr.state_checked},
{},
}, {
0xff5AA7FF,
0xff545454,
0xff545454
})
function changan.intcheck(name,func1,func2)
local nid = name..guid()
local func = 开关(name,func1,func2,nid)
if not name then name = "未设置" end
return {
LinearLayout,
layout_width = 'match_parent',
layout_weight=1,
layout_height = "42dp",
layout_marginTop = "1dp",
layout_marginBottom = "1dp",
padding = "1dp",
{
LinearLayout,
padding="3dp",
layout_width = 'match_parent',
layout_height = "wrap_content",
gravity = "center_vertical",
--background=getVerticalBG({0xffFFFDF2,0xddffffff,0xffFFFDF2},15,8,0xffFFDA71),
{
CheckBox,
id=luajava.newId(nid.."t"),
layout_width = '32dp',
layout_height = '32dp',
padding = "0dp",
__onFinish=function(v)
v:setButtonTintList(RadTint)
end,
onClick = function() luajava.newThread(function() func() end):start() end,
},{
TextView,
gravity = "left",
text = name,
textColor=0xff000000,
textSize = "14sp",
layout_width = 'match_parent',
layout_weight=1,
onClick = function()
local v=luajava.getIdView(nid..'t')
if v:isChecked() then
v:setChecked(false)
else
v:setChecked(true)
end
luajava.newThread(function() func() end):start()
end,
},
}
}
end
function 开关(name , func1 , func2 )
local localname=name
local tname=name..guid()
if func1 == nil then
func1 = ""
end
if func2 == nil then
func2 = ""
end
if type(func1 ) == "function" then
return function()
namers = _ENV [ tname ]
if namers ~= "开" then
_ENV [ tname ] = "开"
pcall(func1 )
else
_ENV [ tname ] = "关"
pcall(func2 )
end
end
end
end
swfuncs,buts,sliders,boxes,textvs={},{},{},{},{}
function changan.check(cklist)
if #cklist==0 then return nil end
local rest = {
LinearLayout,
layout_width = 'match_parent',
layout_height = "wrap_content",
gravity = "center",
orientation="vertical",
}
for i = 1, #cklist,2 do
local tempTable = {LinearLayout,
layout_width = 'match_parent',
layout_height = "wrap_content",
gravity = "left",
orientation="horizontal"
}
for j = 0, 1 do
if cklist[i + j] ~= nil then
local name = cklist[i + j][1]
local func1 = cklist[i + j][2]
local func2 = cklist[i + j][3]
if not name then name = "未设置" end
rstt = changan.intcheck(name,func1,func2)
table.insert(tempTable, rstt)
else
table.insert(tempTable, {LinearLayout,
layout_width = 'match_parent',
layout_weight=1,})
end
end
table.insert(rest, tempTable)
end
return rest
end
function changan.radio(cklist)
local rid=guid()
radiog[rid]={}
rest = {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "10dp" ,
}
local restt={
LinearLayout ,
layout_width = 'match_parent' ,
layout_weight=1,
layout_height = "wrap_content" ,
gravity = "left" ,
orientation='vertical',
}
for i = 1, #cklist,4 do
local tempTable = {LinearLayout,
layout_width = 'fill_parent',
layout_height = "wrap_content",
gravity = "left",
orientation="horizontal"
}
for j = 0, 3 do
if cklist[i + j] ~= nil then
local nid = name..guid ()
local name = cklist[i + j][1]
radiog[rid][nid]=false
local func1 = radin(rid,nid,cklist[i + j][2],name)
if not name then name = "未设置" end
local rstt = changan.intradio(nid,name,func1)
table.insert(tempTable, rstt)
else
table.insert(tempTable, {LinearLayout,
layout_width = 'match_parent',
layout_weight=1,})
end
end
table.insert(restt, tempTable)
end
rest [# rest + 1] = restt
return luajava.loadlayout (rest)
end
switchs={}
MSwitch = {}
function changan.switch(name,func1,func2)
ID = name..guid()
MSwitch[#MSwitch+1] = ID
Checked = false
if name=="音量键隐藏UI" then
音量键 = true
Checked = true
end
if name=="摇一摇隐藏UI" then
摇一摇 = true
Checked = true
end
rest = luajava.loadlayout({
LinearLayout,
layout_width="fill_parent",
layout_height = "47dp",
gravity = "center",
{
LinearLayout,
layout_width = 'fill_parent',
layout_height = "40dp",
gravity = "center",
elevation = "2dp",
layout_marginRight = "4dp",
layout_marginLeft = "4dp",
background = getButtonBG(),
{
TextView,
Typeface=font,
gravity = "top",
text = name,
textColor = "#000000",
textSize = "13sp",
layout_weight = 1,
layout_width = 'fill_parent',
layout_marginLeft = "10dp",
layout_marginRight = "20dp",
},
{
MaterialSwitch,
id = luajava.newId(ID),
layout_weight = 1,
checked = Checked,
layout_width = 'fill_parent',
layout_height = 'wrap_content',
onCheckedChange = function(compoundButton, isChecked)
luajava.newThread(function()
if isChecked then
pcall(func1)
else
pcall(func2)
end
end):start()
end
}
}
})
return rest
end
import "android.graphics.Color"
import "android.content.res.ColorStateList"
function SliderColor(id,color1,color2,color3)
id:setTrackActiveTintList(ColorStateList({{}},{color1}))
id:setTrackInactiveTintList(ColorStateList({{}},{color2}))
id:setThumbTintList(ColorStateList({{}},{color3}))
end
function SwitchColor(id,color1,color2,color3,color4)
id:setTrackTintList(ColorStateList({{android.R.attr.state_checked},{}},{color1,color2}))
id:setThumbTintList(ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{color3,color4}))
end
chazhi={} chajv={}
function changan.seek(name,bian,smin,smax,nows)
_ENV[bian] =nows
smin=tonumber(smin) smax=tonumber(smax)
if _ENV[bian] == nil then _ENV[bian] = 1.0 end
if not name then name = "未设置" end
local names = name..guid()
kid=guid().."sk"
rest = luajava.loadlayout({
LinearLayout,
layout_width = 'match_parent',
layout_hight = "match_parent",
{
LinearLayout,
id=luajava.newId(kid),
layout_width = 'match_parent',
layout_hight = "match_parent",
layout_marginTop = "3dp",
layout_marginBottom = "3dp",
layout_marginLeft = "5dp" ,
layout_marginRight = "5dp" ,
gravity = "center_vertical",
elevation='3dp',
background = getButtonBG(),
{
TextView,
padding={"5dp","10dp","0dp","10dp",},
gravity = "top",
textColor='#000000',
text = name,
id = luajava.newId(names),
layout_width = '100dp',
--layout_marginLeft = "5dp",
layout_marginRight = "0dp",
},
{
Slider,
thumbHeight='23dp',
trackHeight='15dp',
trackStopIndicatorSize='0dp',
tickVisible=false,
__onFinish=function(v)
v:setTrackActiveTintList(ColorStateList({{},},{0xff5AA7FF}))
v:setTrackInactiveTintList(ColorStateList({{},},{0xff5AA7FF}))
v:setThumbTintList(ColorStateList({{},},{0xff5AA7FF}))
luajava.setInterface(v, 'addOnChangeListener',
function(SeekBar, var2, var3)
_ENV[bian] = var2
end)
end,
layout_width = 'match_parent',
id=luajava.newId(name.."seekbar"),
valueFrom=smin,
valueTo=smax,
value=nows,
stepSize=1.0,
}
}})
luajava.getIdView(name..'seekbar'):setHaloRadius(100)--拖动时北景阴影大小
return rest
end
import('android.content.res.ColorStateList')
local swfuncs={}
swcDraw=ColorStateList({
{android.R.attr.state_checked},
{-android.R.attr.state_checked},
}, {
0xff0062ff,
0x33d7d7d7,
})
swcThumb=ColorStateList({
{android.R.attr.state_checked},
{android.R.attr.state_pressed},
{-android.R.attr.state_pressed},
}, {
0xff5AA7FF,
0xff5AA7FF,
0xff5AA7FF
})
swfuncs={}
radon=getRes("heiraon")
radoff=getRes("heiraoff")
radiog={}
function changan.radioM3 (cklist)
local rid=guid()
radiog[rid]={}
rest = {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "30dp" ,
gravity = "top" ,
orientation = "vertical" ,
}
if type (cklist [1]) == "string" then
rds=2
rest [# rest + 1] = {
TextView ,
gravity = "left" ,
padding="5dp",
text = cklist [1] ,
textSize = "13sp" ,
textColor = 0xff000000 ,
layout_width = 'fill_parent' ,
layout_height = 'wrap_content' ,
layout_marginLeft = "10dp" ,
layout_marginRight = "5dp" ,
layout_marginTop = "0dp" ,
layout_marginBottom = "0dp" ,
}
else
rds=1
end
local restt={
RadioGroup,
layout_width = 'match_parent',
layout_height = "wrap_content",
gravity = "center_vertical",
layout_marginRight = "10dp",
layout_marginLeft = "10dp",
layout_marginTop='4dp',
layout_marginBottom='4dp',
elevation='2dp',
orientation = "vertical" ,
background = getButtonBG(),
}
for i = rds , # cklist do
local name = cklist [i] [1]
local func = cklist [i] [2]
if not name then
name = "未设置"
end
local nid = name..guid ()
radiog[rid][nid]=false
local tid = nid..guid ()
restt [# restt + 1] = {
RadioButton ,
layout_width = '250dp' ,
layout_height = "wrap_content" ,
layout_marginLeft = "4dp" ,
layout_marginRight = "10dp" ,
text = name ,
textSize="13sp",
buttonTintList = ColorStateList({ {} }, { 0xff5AA7FF }),
textColor = 0xff000000 ,
gravity = "center_vertical" ,
onClick = function (v)
--changan.controlWater (v, 200)
luajava.startThread(func)
end
}
end
rest [# rest + 1] = restt
return luajava.loadlayout (rest)
end
function radin(rid,nid,func)
return function()
for k,v in pairs(radiog[rid]) do
luajava.getIdValue(k):setBackground(radoff)
if k==nid and v~=true then
luajava.getIdValue(k):setBackground(radon)
v=true,
luajava.newThread(func):start()
end
end
end
end
无=function() end
function 开关(name,func1,func2)
local localname=name
if func1 == nil then func1 = function() end end
if func2 == nil then func2 = function() end end
if type(func1) == "function" then
return function()
namers = _ENV[name]
if namers ~= "开" then
_ENV[name] = "开"
pcall(func1)
else
_ENV[name] = "关"
pcall(func2)
end
end
end
end
chips={}
function changan.intchip(name,func1,func2,size)
nid = name..guid()
lname=name
local func = 开关(nid,func1,func2,lname)
if not name then name = "未设置" end
ID = name..guid()
local rest = {
LinearLayout,
layout_width = 'match_parent',
layout_weight=1,
layout_height = "42dp",
layout_marginTop = "1dp",
layout_marginBottom = "1dp",
padding = "1dp",
{
ChipGroup,
padding="3dp",
layout_width = 'fill_parent',
layout_height = "wrap_content",
gravity = "center_vertical",
{
Chip,
layout_width = 'wrap_content',
layout_height = '40dp',
checked="true",
text=name,
setCheckable = true,
setChipIconVisible = true, --显示icon
setChipIcon = luajava.getBitmapDrawable(chip图片),
onClick=function()
luajava.newThread(function()
pcall(func)
end):start() end
}
}}
return rest
end
背景图片= "https://www.cccimg.com/view.php/10391cfd36d1cd370bd7200065e60b9f.png"
悬浮窗图标 = "https://www.cccimg.com/view.php/10391cfd36d1cd370bd7200065e60b9f.png"
function huiz()---绘制必须放在这里面
end
第一页 = {--创建分页,结尾调用
['分页名字']="主页",
['分页图标']="https://www.cccimg.com/view.php/10391cfd36d1cd370bd7200065e60b9f.png",
['功能配置']={
changan.button('选择进程',gg.setProcessX),
changan.button("Fix防闪",
function ()
local items, count = {}, 0
local liblist = {
{"libanogs.so", {
{ 0x00574004, -721215457, 4},
{ 0x00574050, 17024, 4},
{ 0x00574058, 17024, 4},
{ 0x00000550, 17024, 4}
}},
}
for i=1,#liblist do
local r=gg.getRangesList(liblist[i][1])[1]
if r then
local base=r.start
for j=1,#liblist[i][2] do
count=count+1
items[count]={
address=base+liblist[i][2][j][1],
flags=liblist[i][2][j][3],
value=liblist[i][2][j][2], freeze=true
}
end
end
end
if count>0 then gg.addListItems(items) end
gg.toast("开启成功")
string.toMusic('防闪开启成功')---语音
end),
changan.button("Logo过检测",
function ()
local items, count = {}, 0
local SO_NAME_MAP = {
anogs = "libanogs.so",
Tdatamaster = "libTDataMaster.so",
}
local PATCHES = {
{ so = "anogs", offset = 0x5201FC, asm = "RET" },
{ so = "anogs", offset = 0x51FA8C, asm = "RET" },
{ so = "anogs", offset = 0x2D62D0, asm = "RET" },
{ so = "anogs", offset = 0x4F32D8, asm = "B [PC,#0x80]" },
{ so = "anogs", offset = 0x4F33B8, asm = "B [PC,#0x80]" },
{ so = "anogs", offset = 0x342598, asm = "NOP" },
{ so = "anogs", offset = 0x3424C0, asm = "RET" },
{ so = "anogs", offset = 0x3DFAE0, asm = "LDRB W12, [X20]" },
{ so = "anogs", offset = 0x227080, asm = "MOV X0, XZR" },
{ so = "anogs", offset = 0x49AA48, asm = "LDRB W9, [X0]" },
{ so = "anogs", offset = 0x3424C0, asm = "RET" },
{ so = "anogs", offset = 0x2CA7C4, asm = "MOV X0, XZR" },
{ so = "anogs", offset = 0x33054C, asm = "NOP" },
--VM
{ so = "anogs", offset = 0x213F88, asm = "NOP" },
{ so = "anogs", offset = 0x2142E0, asm = "RET" },
{ so = "anogs", offset = 0x1DEFF0, asm = "RET" },
{ so = "anogs", offset = 0x21AFA0, asm = "NOP" },
--mrpcsmrg
{ so = "anogs", offset = 0x468D58, asm = "NOP" },
{ so = "anogs", offset = 0x2F4F30, asm = "NOP" },
{ so = "anogs", offset = 0x3AFF1C, asm = "NOP" },
{ so = "anogs", offset = 0x4DF084, asm = "MOVZ X0, #1" },
{ so = "anogs", offset = 0x1dc798, asm = "MOVZ X0, #0" },
}
function find_so_base(so_name)
local ranges = gg.getRangesList(so_name)
if #ranges > 0 then
return ranges[1].start
end
return nil
end
function silent_patch()
local patch_list = {}
local success_count = 0
for _, patch in ipairs(PATCHES) do
local so_path = SO_NAME_MAP[patch.so]
if not so_path then goto continue end
local base = find_so_base(so_path)
if not base then goto continue end
local target_addr = base + patch.offset
table.insert(patch_list, {
address = target_addr,
flags = gg.TYPE_DWORD,
value = "~A8 " .. patch.asm,
freeze = true
})
success_count = success_count + 1
::continue::
end
if #patch_list > 0 then
gg.setValues(patch_list)
gg.addListItems(patch_list)
return true, success_count
end
return false, 0
end
local success, count = silent_patch()
gg.toast("开启成功")
string.toMusic('开启成功')---语音
end),
}
}
第二页 = {
['分页名字']="设置",
['分页图标']="https://www.cccimg.com/view.php/10391cfd36d1cd370bd7200065e60b9f.png",
['功能配置']={
changan.button(
"退出",
function()
tuichu=1
end),
}
}
changan.menu({
第一页,--调用上边的分页配置
第二页,
})