话不多说,直接上代码
"ui";
let KeepAliveService = {
/** 开启 */
start: function (idStr, nameStr) {
try {
idStr = idStr || "";
let channel_id = idStr + ".foreground";
let channel_name = nameStr + " 前台服务通知";
let content_title = nameStr + " 正在运行中";
let content_text = "此为前台保活,请勿手动移除该通知";
let ticker = nameStr + "已启动";
let manager = context.getSystemService(android.app.Service.NOTIFICATION_SERVICE);
let notification;
let icon = context.getResources().getIdentifier("ic_3d_rotation_black_48dp", "drawable", context.getPackageName());
if (device.sdkInt >= 26) {
let channel = new android.app.NotificationChannel(channel_id, channel_name, android.app.NotificationManager.IMPORTANCE_DEFAULT);
channel.enableLights(true);
channel.setLightColor(0xff0000);
channel.setShowBadge(false);
manager.createNotificationChannel(channel);
notification = new android.app.Notification.Builder(context, channel_id).setContentTitle(content_title).setContentText(content_text).setWhen(new Date().getTime()).setSmallIcon(icon).setTicker(ticker).setOngoing(true).build();
} else {
notification = new android.app.Notification.Builder(context).setContentTitle(content_title).setContentText(content_text).setWhen(new Date().getTime()).setSmallIcon(icon).setTicker(ticker).build();
}
manager.notify(1, notification);
} catch (error) {
log("前台保活服务启动失败:" + error);
log("保活服务启动失败,不影响辅助的正常运行,继续挂机即可.");
}
},
/** 停止 */
stop: function () {
let manager = context.getSystemService(android.app.Service.NOTIFICATION_SERVICE);
manager.cancelAll();
},
};
//真实启动
KeepAliveService.start("test", "造雾-脚本合集");
var QQ群1 = "740578431"
var QQ群2 = "1035264291"
var QQ = "1340468168"
var bj1 = "https://z3.ax1x.com/2021/08/30/hJN956.jpg" //壁纸1
var bj2 = "https://z3.ax1x.com/2021/09/04/h2pebR.png" //像
var bj3 = "https://ps.ssl.qhmsg.com/t02df15b2ff095014ed.jpg" //壁纸2
var 软件名 = "造雾-脚本合集"
var storage = storages.create("存储");
importClass(android.view.View);
ui.statusBarColor(colors.TRANSPARENT);
const AllColor = "#000000"
const alpha = 0.7
const resources = context.getResources();
const statusBarHeight = resources.getDimensionPixelSize(resources.getIdentifier('status_bar_height', 'dimen', 'android'));
const scale = resources.getDisplayMetrics().density;
var dp2px = dp => {
return Math.floor(dp * scale + 0.5);
};
var px2dp = px => {
return Math.floor(px / scale + 0.5);
};
var SystemUiVisibility = ve => {
var option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | (ve ? View.SYSTEM_UI_FLAG_LAYOUT_STABLE : View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
activity.getWindow().getDecorView().setSystemUiVisibility(option);
};
var ButtonLayout = function() {
importClass(android.graphics.Color);
importClass("androidx.core.graphics.drawable.DrawableCompat");
util.extend(ButtonLayout, ui.Widget);
function ButtonLayout() {
ui.Widget.call(this);
this.defineAttr("leftDrawable", (view, attr, value, defineSetter) => {
view.widget.mLeftDrawable = value;
var lDrawable = context.getResources().getDrawable(getResourceID(value));
lDrawable.setBounds(0, 0, view.widget.mLeftDrawableSize, view.widget.mLeftDrawableSize);
let wrappedDrawable = DrawableCompat.wrap(lDrawable);
DrawableCompat.setTint(wrappedDrawable, Color.parseColor("#FFFFFF"));
view.setCompoundDrawables(lDrawable, null, null, null);
});
};
ButtonLayout.prototype.mLeftDrawable = null;
ButtonLayout.prototype.mLeftDrawableSize = dp2px(20);
ButtonLayout.prototype.render = function() {
return (
<TextView
bg="?attr/selectableItemBackground"
gravity="left|center_vertical"
textColor="#FFFFFF"
textStyle="normal"
typeface="monospace"
padding="20 10"
drawablePadding="20" />
);
};
function getResourceID(name) {
var resource = context.getResources();
return resource.getIdentifier(name, "drawable", context.getPackageName());
};
ui.registerWidget("button-layout", ButtonLayout);
return ButtonLayout;
}();
ui.layout(
<viewpager
id="viewpager"
bg="#9E9E9E"
>
/*子页面背景颜色*/
{/**drawer侧边栏 */}
<frame>
<img scaleType="fitStart" src="{{bj3}}"w="1080"alpha="0.6" />
<relative
w="*"
clickable="true"
>
<relative
id="drawerToolbar"
marginTop="10"
paddingTop="{{statusBarHeight}}px"
>
<img
id="icon"
w="40"
h="40"
margin="20 0"
scaleType="fitXY"
circle="true"
src="{{bj2}}" />
<text
id="title"
layout_toRightOf="icon"
layout_alignParentTop="true"
w="auto"
h="auto"
text="造雾者"
textSize="16sp"
textStyle="bold"
textColor="#ffffff"
typeface="monospace" />
<text
id="subtitle"
layout_below="title"
layout_toRightOf="icon"
w="auto"
h="auto"
text="QQ:{{QQ}}"
textSize="12sp"
textStyle="bold"
textColor="#7fffffff"
typeface="monospace" />
</relative>
<frame
id="drawerFrame"
layout_below="drawerToolbar"
layout_above="drawerHorizontal"
h="*"
>
<list
id="drawerList"
w="auto"
h="auto"
padding="0 20"
layout_gravity="center_vertical"
>
<button-layout
w="*"
text="{{this.text}}"
leftDrawable="{{this.drawable}}" />
</list>
</frame>
<horizontal
id="drawerHorizontal"
paddingBottom="{{statusBarHeight}}px"
layout_alignParentBottom="true"
>
<button-layout
id="settingsBtn"
text="待添加"
leftDrawable="ic_settings_black_48dp" />
<View
bg="#ffffff"
w="2px"
h="16"
layout_gravity="center_vertical" />
<button-layout
id="logBtn"
text="退出软件"
drawablePadding="0" />
</horizontal>
</relative>
</frame>
//
//
//
//
//
//
//
{/**主界面 */}
<frame>
<card
id="card"
cardElevation="0"
cardCornerRadius="0"
cardBackgroundColor="#f6f6f6"
>
<img scaleType="fitStart" src="{{bj1}}"w="1080"alpha="0.7" />
<vertical >
<toolbar
w="*"
h="auto"
marginTop="10"
paddingTop="{{statusBarHeight}}px"
>
<text
w="*"
h="auto"
text="{{软件名}}"
textSize="21sp"
textStyle="bold|italic"
textColor="#E65100"
gravity="center" />
<img
id="kjid"
w="40"
h="40"
margin="20 0"
scaleType="fitXY"
circle="true"
layout_gravity="right"
src="{{bj2}}" />
</toolbar>
<vertical textSize="100sp" >
<card margin="3 1" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="{{AllColor}}" alpha="{{alpha}}" >
<card margin="1 1" w="*" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="#161824">
<TextView id="tv_text" singleLine="true" ellipsize="marquee" textSize="12" focusable="true"
text="本作品仅供学习交流,不得用于任何商业以及非法用途,下载试用后请正确使用,因使用软件造成的使用者以及任何网站的一切损失, 皆由使用者承担。如不接受本条款,请立即删除本软件,如不慎软件被破解,皆由破解者承担一切责任本作品仅供学习交流!请于24小时内自行删除!"
textColor="#ffffff" />
</card>
</card>//
<card margin="3 1" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="{{AllColor}}" alpha="{{alpha}}" >
<card margin="1 1" w="*" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="#161824">
<horizontal h="35" gravity="vertical_center" >
<Switch id="autoService" text="无障碍服务" textColor="#ffffff" w="150" checked="{{auto.service != null}}" padding="8 8 8 8" textSize="14sp" />
<text id="cs" textSize="11sp" textColor="#ffffff" layout_weight="1" text="点击左边按钮转跳到 开启无障碍" gravity="center" w="18" singleLine="true" />
</horizontal>
</card>
</card>
<card margin="3 1" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="{{AllColor}}" alpha="{{alpha}}" >
<card margin="1 1" w="*" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="#161824">
<horizontal gravity="vertical_center" h="35" >
<text text="屏幕识别率:" textColor="#ffffff" marginLeft="7" w="auto" marginTop="9" textSize="14sp" />
<seekbar marginLeft="-15" w="180" id="识别" progress="-10" max="9" marginTop="11" textColor="#ffffff" textSize="14sp" />
<text id="sb" text="1" textColor="#ffffff" w="35" marginTop="9" textSize="14sp" />
<text text="率" textColor="#ffffff" w="30" marginTop="9" textSize="14sp" />
</horizontal>
</card>
</card>
<card margin="3 1" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="{{AllColor}}" alpha="{{alpha}}" >
<card margin="1 1" w="*" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="#161824">
<vertical h="35" >
<text text="开始运行" id="开始运行" w="*" h="*" textColor="#ffffff" gravity="center" textSize="14sp" />
</vertical>
</card>
</card>
<text radius="66dp" gravity="center" text="右滑加入褥羊毛Q群"/>
<text radius="66dp" gravity="center" text="收徒‖定制脚本‖问题‖请联系作者!"/>
<card margin="3 1" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="{{AllColor}}" alpha="{{alpha}}" >
<card margin="1 1" w="*" cardElevation="0" cardCornerRadius="10" cardBackgroundColor="#161824">
<ScrollView>
<card w="*" h="*" margin="5"bg="#00FFFFFF" cardCornerRadius="3dp" cardElevation="2dp" gravity="center">
<vertical bg="#00FFFFFF" margin="5" >
<vertical>
<linear>
<checkbox id="暴打肥龙2" text="1、暴打肥龙2" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime1" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接1"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<vertical>
<linear>
<checkbox id="暴打肥龙3" text="2、暴打肥龙3" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime2" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接2"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<vertical>
<linear>
<checkbox id="全民大丰收" text="3、全民大丰收" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime3" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接3"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<vertical>
<linear>
<checkbox id="全民大丰收OL" text="4、全民大丰收OL" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime4" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接4"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<vertical>
<linear>
<checkbox id="魔性小飞机3" text="5、魔性小飞机3" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime5" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接5"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<vertical>
<linear>
<checkbox id="梦幻餐厅" text="6、梦幻餐厅" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime6" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接6"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<vertical>
<linear>
<checkbox id="富贵美食街" text="7、富贵美食街" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime7" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接7"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<vertical>
<linear>
<checkbox id="捉妖特工队OL" text="8、捉妖特工队OL" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime8" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接8"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<vertical>
<linear>
<checkbox id="猜歌红包群" text="9、猜歌红包群" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime9" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接9"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<vertical>
<linear>
<checkbox id="红包聊天室" text="10、红包聊天室" textStyle="bold" textColor="#ffffff" layout_weight="1" />
<text text="运行" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<input id="Runningtime10" hint="null"text="30" gravity="center" singleLine="true" textStyle="bold" w="60" backgroundTint="#000000" textColor="#000000" textSize="13" />
<text text="分" w="auto" h="auto" textStyle="bold" textColor="#ff0000" />
<button id="下载链接10"text="下载"style="Widget.AppCompat.Button.Borderless.Colored"margin="-13 0 -17 0"textColor="#ff00bfff"textSize="13sp" h="auto"w="auto"/>
</linear>
</vertical>
<webview id="webview" h="auto" margin="0 16"/>
// <radiogroup marginLeft="16" marginTop="16">
// </radiogroup>
{/*运行日记*/}
</vertical>
</card>
</ScrollView>
</card>
</card>
</vertical>
</vertical>
</card>
</frame>
</viewpager>
);
ui.tv_text.setSelected(true);
function putStorage(name, value) {
var storage = storages.create("存储");
storage.put(name, value);
}
function getStorage(name) {
var storage = storages.create("存储");
return storage.get(name);
}
storage = storages.create("awtlq")
识别率 = storage.get("识别率", 0.70)
ui.sb.setText(String(识别率))
ui.识别.progress = 识别度返回(识别率)
ui.识别.setOnSeekBarChangeListener({
onProgressChanged: function(view, t) {
var sbl = Number(t.toString())
识别率 = 识别度(sbl)
storage.put("识别率", 识别率);
}
})
$debug.setMemoryLeakDetectionEnabled(false)
if (getStorage("Runningtime1")) {
ui.Runningtime1.setText(getStorage("Runningtime1"))
}
if (getStorage("Runningtime2")) {
ui.Runningtime2.setText(getStorage("Runningtime2"))
}
if (getStorage("Runningtime3")) {
ui.Runningtime3.setText(getStorage("Runningtime3"))
}
if (getStorage("Runningtime4")) {
ui.Runningtime4.setText(getStorage("Runningtime4"))
}
if (getStorage("Runningtime5")) {
ui.Runningtime5.setText(getStorage("Runningtime5"))
}
if (getStorage("Runningtime6")) {
ui.Runningtime6.setText(getStorage("Runningtime6"))
}
if (getStorage("Runningtime7")) {
ui.Runningtime7.setText(getStorage("Runningtime7"))
}
if (getStorage("Runningtime8")) {
ui.Runningtime8.setText(getStorage("Runningtime8"))
}
if (getStorage("Runningtime9")) {
ui.Runningtime9.setText(getStorage("Runningtime9"))
}
if (getStorage("Runningtime10")) {
ui.Runningtime10.setText(getStorage("Runningtime10"))
}
ui.autoService.on("check", function(checked) {
if (checked && auto.service == null) {
app.startActivity({
action: "android.settings.ACCESSIBILITY_SETTINGS"
});
}
if (!checked && auto.service != null) {
auto.service.disableSelf();
}
})
// 当用户回到本界面时,resume事件会被触发
ui.emitter.on("resume", function() {
// 此时根据无障碍服务的开启情况,同步开关的状态
ui.autoService.checked = auto.service != null;
});
SystemUiVisibility(false);
ui.viewpager.overScrollMode = View.OVER_SCROLL_NEVER; //删除滑动到底的阴影
ui.viewpager.currentItem = 1; //跳转到1号子页面
ui.viewpager.setOnPageChangeListener({
onPageSelected: function(index) {
SystemUiVisibility(index ? false : true);
}
});
ui.viewpager.setPageTransformer(true, new MyPageTransform()); //设置viewpager切换动画
var items = [{
text: "①脚本项目群",
drawable: "ic_games_black_48dp"
},
{
text: "②脚本交流群",
drawable: "ic_favorite_black_48dp"
},
{
text: "联系作者",
drawable: "ic_favorite_black_48dp"
},
{
text: "抓包工具",
drawable: "ic_favorite_black_48dp"
},
{
text: "学习脚本",
drawable: "ic_favorite_black_48dp"
},
];
ui.settingsBtn.on("click", () => {
toastLog("待添加");
});
ui.logBtn.on("click", () => {
toast("退出脚本")
exit()
});
/**
* 自定义viewpager动画
*/
//暴打肥龙2
ui.下载链接1.on("click", () => {
app.openUrl("http://hczd.iwz123.cn/hczd/share/html/download_share.html?invitation=1901429")
})
//暴打肥龙3
ui.下载链接2.on("click", () => {
app.openUrl("http://hczd.iwz123.cn/hczd/share/html/download_share.html?invitation=3139948")
})
//全民大丰收
ui.下载链接3.on("click", () => {
app.openUrl("http://fhnc-ii-share.xlzxtj.cn/fhnc_ii/share/html/download_share.html?invitation=16353783")
})
//全民大丰收OL
ui.下载链接4.on("click", () => {
app.openUrl("http://qmdfsol.zhenyejt.cn/qmdfsol/share/html/download_share.html?invitation=1169105")
})
//魔性小飞机3
ui.下载链接5.on("click", () => {
app.openUrl("http://fjtf.privategardener.cn/lwfj_ii/share/html/download_share.html?invitation=10036905")
})
//梦幻餐厅
ui.下载链接6.on("click", () => {
app.openUrl("https://www.joyo.games/share/mhct/qrcode.html?os=android&userId=100225372")
})
//富贵美食街
ui.下载链接7.on("click", () => {
app.openUrl("https://www.joyo.games/share/fgmsj/qrcode.html?os=android&userId=100091476")
})
//捉妖特工队OL
ui.下载链接8.on("click", () => {
app.openUrl("http://zytgdol.watchuq.cn/zytgdol/share/html/download_share.html?invitation=1288243")
})
//猜歌红包群
ui.下载链接9.on("click", () => {
app.openUrl("http://cghbq1.huyuyouxi.com/loadingPage.html?i=125457146&n=7")
})
//红包聊天室
ui.下载链接10.on("click", () => {
app.openUrl("http://hbltsh5.huyuyouxi.com/loadingPage.html?i=125473564&n=4")
})
function MyPageTransform() {
var mDp30 = dp2px(30);
var mRadius = 0;
var pageWidth;
this.transformPage = (function(view, position) {
pageWidth = view.getWidth();
if (position < -1) {
view.setAlpha(0);
} else if (position <= 0) {
view.setTranslationX(pageWidth * position);
} else if (position <= 1) {
view.setTranslationX((pageWidth * 0.5) * -position);
view.setScaleX(1 - (0.3 * position));
view.setScaleY(1 - (0.3 * position));
if (mRadius != parseInt(mDp30 * position)) { //圆角切换
ui.card.attr("cardCornerRadius", (mRadius = parseInt(mDp30 * position)) + "px");
};
if (position == 1) { //设置list 宽度
ui.drawerList.attr("w", parseInt(pageWidth * 0.65) + "px");
};
} else {
view.setAlpha(0);
}
});
};
ui.drawerList.setDataSource(items);
ui.drawerList.overScrollMode = View.OVER_SCROLL_NEVER;
ui.drawerList.on("item_click", items => { //列表控件点击事件
switch (items.text) {
case "联系作者":
app.startActivity({
action: "android.intent.action.VIEW",
data: "mqq://im/chat?chat_type=wpa&version=1&src_type=web&uin=" + QQ,
packageName: "com.tencent.mobileqq",
})
break;
case "①脚本项目群":
toast("欢迎你的加入~")
app.startActivity({
action: "android.intent.action.VIEW",
data: "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=" + QQ群1 + "&card_type=group&source=qrcode",
packageName: "com.tencent.mobileqq",
})
break
case "②项目交流群":
toast("暂无")
/*
app.startActivity({
action: "android.intent.action.VIEW",
data: "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=" + QQ群2 + "&card_type=group&source=qrcode",
packageName: "com.tencent.mobileqq",
})
*/
break
case"抓包工具":
toast("正在跳转~")
app.openUrl("https://wwa.lanzoui.com/ihTIannl00h")
break;
case "学习脚本":
toast("请联系作者~")
app.startActivity({
action: "android.intent.action.VIEW",
data: "mqq://im/chat?chat_type=wpa&version=1&src_type=web&uin=" + QQ,
packageName: "com.tencent.mobileqq",
})
break;
}
});
ui.kjid.click(function() {
app.startActivity({
action: "android.intent.action.VIEW",
data: "mqq://im/chat?chat_type=wpa&version=1&src_type=web&uin=" + QQ,
packageName: "com.tencent.mobileqq",
})
})
ui.开始运行.click(function() {
threads.start(function() {
setInterval(() => {}, 1000);
if (!requestScreenCapture()) {
toastLog("请求截图失败");
exit();
}
//第二种电池优化
events.observeKey();
主程序()
})
})
events.onKeyDown("VolumeDown()", function(event) {
//toastLog("音量上键弹起");
});
function 主程序() {
threads.start(function() {
while (true) {
关闭广告()
}
})
threads.start(function() {
while (true) {
sleep(300000)
toastLog("每运行10分钟会清理后台一次,以防止开到某个界面")
清理后台()
}
})
while (true) {
if (ui.暴打肥龙2.checked) {
第1个脚本()
}
if (ui.暴打肥龙3.checked) {
第2个脚本()
}
if(ui.全民大丰收.checked) {
第3个脚本()
}
if(ui.全民大丰收OL.checked) {
第4个脚本()
}
if(ui.魔性小飞机3.checked) {
第5个脚本()
}
if(ui.梦幻餐厅.checked) {
第6个脚本()
}
if(ui.富贵美食街.checked) {
第7个脚本()
}
if(ui.捉妖特工队OL.checked) {
第8个脚本()
}
if(ui.猜歌红包群.checked) {
第9个脚本()
}
if(ui.红包聊天室.checked) {
第10个脚本()
}
}
}
function 第1个脚本() {
var 软件名 = "暴打肥龙"
var 包名 = "com.lwhy.hczddl"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime1 = ui.Runningtime1.getText().toString() //分钟
putStorage("Runningtime1", Runningtime1);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("暴打红包1", 识别率, 5, 5)
图("暴打元宝1", 识别率, 5, 5)
图("暴打领取1", 识别率, 5, 5)
图("暴打领取2", 识别率, 5, 5)
图("暴打确定1", 识别率, 5, 5)
图("暴打关闭1", 识别率, 5, 5)
图("暴打关闭2", 识别率, 5, 5)
图("关闭1", 识别率, 5, 5)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime1.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 第2个脚本() {
var 软件名 = "暴打肥龙"
var 包名 = "com.lwhy.hczddl.ol"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime2 = ui.Runningtime2.getText().toString() //分钟
putStorage("Runningtime2", Runningtime2);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("暴打红包1", 识别率, 5, 5)
图("暴打元宝1", 识别率, 5, 5)
图("暴打领取1", 识别率, 5, 5)
图("暴打领取2", 识别率, 5, 5)
图("暴打确定1", 识别率, 5, 5)
图("暴打关闭1", 识别率, 5, 5)
图("暴打关闭2", 识别率, 5, 5)
图("关闭1", 识别率, 5, 5)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime2.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 第3个脚本() {
var 软件名 = "全民大丰收"
var 包名 = "com.lwhy.qmdfs"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime3 = ui.Runningtime3.getText().toString() //分钟
putStorage("Runningtime3", Runningtime3);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("丰收领取1", 识别率, 5, 5)
图("丰收关闭1", 识别率, 5, 5)
图("丰收关闭2", 识别率, 5, 5)
图("丰收红包1", 识别率, 5, 5)
图("丰收红包2", 识别率, 5, 5)
图("丰收红包3", 识别率, 5, 5)
图("关闭1", 识别率, 5, 5)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime3.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 第4个脚本() {
var 软件名 = "全民大丰收"
var 包名 = "com.lwhy.qmdfsol"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime4 = ui.Runningtime4.getText().toString() //分钟
putStorage("Runningtime4", Runningtime4);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("丰收领取1", 识别率, 5, 5)
图("丰收关闭1", 识别率, 5, 5)
图("丰收关闭2", 识别率, 5, 5)
图("丰收红包1", 识别率, 5, 5)
图("丰收红包2", 识别率, 5, 5)
图("丰收红包3", 识别率, 5, 5)
图("关闭1", 识别率, 5, 5)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime4.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 第5个脚本() {
var 软件名 = "魔性小飞机"
var 包名 = "com.lwhy.fjtf.v3"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime5 = ui.Runningtime5.getText().toString() //分钟
putStorage("Runningtime5", Runningtime5);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("魔性关闭1", 识别率, 5, 5)
图("魔性关闭2", 识别率, 5, 5)
图("魔性红包1", 识别率, 5, 5)
图("魔性红包2", 识别率, 5, 5)
图("魔性领取1", 识别率, 5, 5)
图("魔性领取2", 识别率, 5, 5)
图("魔性领取3", 识别率, 5, 5)
图("魔性领取4", 识别率, 5, 5)
图("魔性确定1", 识别率, 5, 5)
图("关闭1", 识别率, 5, 5)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime5.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 第6个脚本() {
var 软件名 = "梦幻餐厅"
var 包名 = "com.yunhoon.mhct"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime6 = ui.Runningtime6.getText().toString() //分钟
putStorage("Runningtime6", Runningtime6);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("梦幻关闭1", 识别率, 5, 5)
图("梦幻关闭2", 识别率, 5, 5)
图("梦幻关闭3", 识别率, 5, 5)
图("梦幻红包1", 识别率, 5, 5)
图("梦幻红包2", 识别率, 5, 5)
图("梦幻揽客1", 识别率, 5, 5)
图("梦幻自动1", 识别率, 5, 5)
图("梦幻修锅1", 识别率, 5, 5)
图("梦幻领取1", 识别率, 5, 5)
图("关闭1", 识别率, 5, 5)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime6.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 第7个脚本() {
var 软件名 = "富贵美食街"
var 包名 = "com.yunhoon.fgmsj"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime7 = ui.Runningtime7.getText().toString() //分钟
putStorage("Runningtime7", Runningtime7);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("梦幻关闭1", 识别率, 5, 5)
图("梦幻关闭2", 识别率, 5, 5)
图("梦幻关闭3", 识别率, 5, 5)
图("梦幻红包1", 识别率, 5, 5)
图("梦幻红包2", 识别率, 5, 5)
图("梦幻揽客1", 识别率, 5, 5)
图("梦幻自动1", 识别率, 5, 5)
图("梦幻修锅1", 识别率, 5, 5)
图("梦幻领取1", 识别率, 5, 5)
图("关闭1", 识别率, 5, 5)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime7.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 第8个脚本() {
var 软件名 = "捉妖特工队OL"
var 包名 = "com.lwhy.zytgdol"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime8 = ui.Runningtime8.getText().toString() //分钟
putStorage("Runningtime8", Runningtime8);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("捉妖关闭1", 识别率, 5, 5)
图("捉妖红包1", 识别率, 5, 5)
图("捉妖红包2", 识别率, 5, 5)
图("捉妖红包3", 识别率, 5, 5)
图("捉妖领取1", 识别率, 5, 5)
图("关闭1", 识别率, 5, 5)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime8.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 第9个脚本() {
var 软件名 = "猜歌红包群"
var 包名 = "com.xiaoniu.hongbao.cghbq"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime9 = ui.Runningtime9.getText().toString() //分钟
putStorage("Runningtime9", Runningtime9);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("猜歌红包群", 识别率, 1, 1)
图("猜歌红包", 识别率, 1, 1)
图("猜歌开红包", 识别率, 1, 1)
图("猜歌同意1", 识别率, 1, 1)
图("猜歌同意2", 识别率, 1, 1)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime9.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 第10个脚本() {
var 软件名 = "红包聊天室"
var 包名 = "com.xiaoniu.hongbao.liaotian"
// 检测APP没有安装
if (!packageIsExists(包名)) {
toastLog("您的设备未安装" + 软件名 + ".")
sleep(2000)
return;
};
var Runningtime10 = ui.Runningtime10.getText().toString() //分钟
putStorage("Runningtime10", Runningtime10);
var 时间开始 = new Date().getTime() //记录开始运行时间
launchPackage(包名)
toastLog("启动 " + 软件名 + "...");
toastLog("识别率" + 识别率)
sleep(5000)
//第1个脚本
while (true) { //这里有循环了
图("猜歌红包群", 识别率, 1, 1)
图("猜歌红包", 识别率, 1, 1)
图("猜歌开红包", 识别率, 1, 1)
图("猜歌同意1", 识别率, 1, 1)
图("猜歌同意2", 识别率, 1, 1)
检测界面(包名, 软件名)
//判断时间是否已到指定时间,并且跳出
var 时间结束 = new Date().getTime()
var 时间间隔 = Math.floor((时间结束 - 时间开始) / 1000);
if (时间间隔 >= Runningtime10.toString() * 60) {
toastLog("定时时间已到")
sleep(1000)
清理后台()
toastLog("当前平台运行结束,即将开始下一个平台~~")
break
}
}
}; //脚本结束
function 图(所找图, 识别率, a, b) {
let 大图 = captureScreen()
let 小图1 = images.read("图片/" + 所找图 + ".jpg" );
let 缩放x = device.width / 720
let 缩放y = device.height / 1600
let 小图 = images.scale(小图1, 缩放x, 缩放y)
let result = images.matchTemplate(大图, 小图, {
max: 5,
region: [0, 0, device.width, device.height], //区域
threshold: 识别率,
});
if (result != null) {
for (let i = 0; i < result.matches.length; i++) {
let pp = result.matches[i].point
// log(pp)
// console.nk
toastLog("找到" + 所找图, pp.x, pp.y)
click(pp.x + a, pp.y + b)
// log(pp.x, pp.y)
toastLog("点击--" + 所找图)
sleep(200)
break;
}
}
}
//广告
关闭1 = images.fromBase64("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")
//关闭2 = images.fromBase64("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")
关闭3 = images.fromBase64("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")
//关闭4 = images.fromBase64("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")
关闭5 = images.fromBase64("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")
//关闭6 = images.fromBase64("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")
关闭7 = images.fromBase64("/9j/4QD4RXhpZgAATU0AKgAAAAgABwEAAAQAAAABAAAAIAEQAAIAAAAJAAAAYgEBAAQAAAABAAAAHwESAAMAAAABAAEAAAEyAAIAAAAUAAAAa4dpAAQAAAABAAAAhgEPAAIAAAAHAAAAfwAAAABQQVItQUwwMAAyMDIxOjA0OjI4IDEwOjE2OjIyAEhVQVdFSQAABZIIAAQAAAABAAAAAJAEAAIAAAAUAAAAyJADAAIAAAAUAAAA3KADAAQAAAABAAAAH6ACAAQAAAABAAAAIAAAAAAyMDIxOjA0OjI4IDEwOjEzOjU3ADIwMjE6MDQ6MjggMTA6MTM6NTcA/+AAEEpGSUYAAQEAAAEAAQAA/9sAQwABAQEBAQEBAQEBAQEBAgIDAgICAgIEAwMCAwUEBQUFBAQEBQYHBgUFBwYEBAYJBgcICAgICAUGCQoJCAoHCAgI/9sAQwEBAQECAgIEAgIECAUEBQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI/8AAEQgAHwAgAwEiAAIRAQMRAf/EABkAAQACAwAAAAAAAAAAAAAAAAoFCQYHCP/EACwQAAAFBAIBAgYCAwAAAAAAAAECAwQFBgcIEQAJMRIhChMUIjJRFkEkQpH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8Aq8x+xLwo7acIIW3+PcRA2azpoeMEzlmooBAqopC7ES7/ACMOh8eOGMu5aOvbH1/Udtbk07JUzVcW5O2ctnKQkMBijrYb8gP75MWIvvczHG5dNXVtRU8lS9VxjkjhJZuqJfmekd+kwB5KPgQHi3piAx2+Iax0Uqami09arsOpWPD6lkX0pBVoELrYB/sYf+74Ay4+OfSz5rGxjRw+frnBJFFIgmOoYR0AAAeR4rDDbrdx2wMxmfZ2dmkYwknMpHn/AIbQLgwFcvFDE+xRRP8AIPcQHx7c2Thv1t2k6obYyudnZSzjQuJHKKFo+3zkxTrPHJd+lQ5P7DYAP64frsI7CLx5/wB5Ze4dwJVyypZNQUoWCSOJWsW2AftIRMPYB1r34HBkdHPpd+0jIxqu+kF1CpIoplExlDiOgAADyPGBdaOItvOpW0iHZVnDOu6UuMZoZagqNIuKbiQOYv2mVJsB0If0Icw7rSwJsXg9jKn2kZtxyFdM/kfU0RTLVL6kqjnW01FxKBgL92vOtcoi7Cuwi82f95JWv7iyy6FMIKmRgoVIwlbRbUB0QhCeAHWuAqO+9xLIfErWFfylJSxLXZs0eiseLpdZ3/jyzX3EAIHtsw6D31wU13bRV/Yyv6itncynX9MVfFuDtnTVwmJTFMUdbDfkOTFh78XNxuubTV2rS1LIUtWMW4KugugoJfVod+k2vJR/XF4zNCWP+IUxVkrk0nAtLZ560bG/MmnP0wps6gImTYiZXQFAw6HyPA//2Q==")
//关闭8 = images.fromBase64("我")
关闭8 = images.fromBase64("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")
//广告弹窗1 = images.fromBase64("/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIACEAIQMBIgACEQEDEQH/xAAbAAACAgMBAAAAAAAAAAAAAAAACgUIAQQJBv/EADcQAAEEAgEDAgEFEQAAAAAAAAMBAgQFBgcIAAkTEhQRChVU0uEhIjEyNWFicXN0kZOUobGywf/EABgBAAMBAQAAAAAAAAAAAAAAAAABAgUD/8QALREAAQIDBAcJAAAAAAAAAAAAAQARAiExQVFhcRITkaGxwfAyUnKBkrLR4fH/2gAMAwEAAhEDEQA/AKRcM+B3CzuX8Ii630BJfqzuU6fj39/Y0uTZOYtRyAp0KaYEFVEnyHRYZI8ZQwQsrI4CwZAvPMQ8U7yi4FbJ1rm+oc4yXWuycbssSzbD7SVSZFj1xGfGnV1hDIozCKN6J8Wq5nrEVvqGUasINytciruai29sbRGxMX2tqjKrfDM7w+0j21Ff0sokWZFlRyNJ6VcNUQoDIijkxyI8RxPcMjHNcqK11Z1ehPlE2g33+PNxXT/dR1Di7vnOjU8OopOQtPVRhtWSP4jGhJp1Z8GuRCSamSRWlcSuIix4ismxm1Z0uQlEqmqsryzrqemgyrO3tZcevra6EB8mbNmyitDGixo4muIY5zEYMY2NVznuRERfuJ0yQTts8VO3vwXybeXcjhy8k5R7ywqdD47ccabIzVN7hMqwjuSszbJGV0kEhsivKQEyWKahq8A2LXeCRLKXw2O49cTtHdi/TIuZnPWqx/NuauQxZzOOfGZ1hAtGYvPG5RR8sv2CbIGkiKRGSCT08keENUjQnknEcQC1/LXlxunmjujKd37wymbkmTZDNM+HFIVzavHKjyvdBoKKEioCBV14VaCOALGIqN8hPWVXOWdIwgzc2AvKgNRZM1wZCr55Kv6Ib+qJ9Xo6ifJ+b+/2dHUayLvw7B8psbjsK3aqotLyzgU1LXzLW2s5YINdW18YsuZOmSSNFHjRYwGPMcxiPawYhsc9zlRGoqr8Om3+I/HzTnYr0dVc9OZY4+Qc0s6x+cvGzjaOzICZjoLOG1jb3LwR0aaMdBmT375DPHBAR0ON65z3vj1/7dVdwc7cXFir7kW9cswHfXKDLfnuBxt481VvDtj4XdQCGhNyHOaoRDHq5gJAvcpIsYwEjw3hStUsk/mFww5a8td0c0d0ZTvDd+UTchyfI5hSRYb5BnVOOVaPX2VFQQXvcGvq4APQEAANb8UYr3+p7lctmJ20rCCG32vS7IoAJp05A5porYFppD5SRo4uR0a0Gl+5vpTG7BYGCvtpAcU29iUQz5SQqVs0hFUn3yoL0qWbXTCr5lLBMrgqIbI1nnGoc6yXW+x8ctcSzTELaZSZBQXMQ0KdXz4RnBOIgjNY5zHOarhGY1RGE5pBucxyKsrqHb2xdE7Exfauqcqt8NznDrWLcUd7SzDQ5caTEMwqMc8L2qWMb0eKRGJ6hHE54yMc1yorN27tlcP+9hxHybeGa5TrrjX3GuOmBntswJd2MTGsY3zjdBHcV74fuSxxWF5MGFWxIwPcWsaxMyMIRoJWIFdq554PRhnsVCEgwk0cO02mMEq57YX6P8fs6OvQ+wT6XA/np9To6horofWOvw4Po6vHd9qAlfkqu/aSf9k6iejo6DTzh4hZ0FTlzCwv4W/r/wCL1M1X4879zN/lOjo6qGozHFdbYfFD7gjo6OjpLQX/2Q==")
//关闭广告()
function base64找图广告(识别率) {
var arr = [
//广告弹窗1,
关闭1,
//关闭2,
关闭3,
//关闭4,
关闭5,
//关闭6,
关闭7,
关闭8,
]
var arr1 = [
// "广告弹窗1",
"关闭1",
// "关闭2",
"关闭3",
//"关闭4",
"关闭5",
//"关闭6",
"关闭7",
"关闭8",
]
//$debug.setMemoryLeakDetectionEnabled(true);
for (var i = 0; i < arr.length; i++) {
var sfk = device.width / 1080 //得到 宽缩放比
var gdg = 2340 * sfk //得到 固定高
// var img = images.read(软件名 + "/" + hzm + ".jpg");
var 小图1 = images.scale(arr[i], sfk, gdg / 2340) //进行缩放
var 小图 = images.threshold(小图1, 130, 255, "BINARY")
var 大图1 = captureScreen().clone() //截图
var 大图 = images.threshold(大图1, 130, 255, "BINARY")
图片 = findImage(大图, 小图, {
region: [0, 0, device.width, device.height], //区域找图
threshold: 识别率, //识别率
});
if (图片) {
var a = 小图.getWidth()
var b = 小图.getHeight()
var c = random(1, a)
var d = random(1, b)
var 偏移x = Number(图片.x) + Number(c)
var 偏移y = Number(图片.y) + Number(d)
click(图片.x + c, 图片.y + d) //点击
toastLog(arr1[i])
sleep(1000)
} else {
// log("未找到" + arr1[i])
}
大图1.recycle();
小图1.recycle();
大图.recycle();
小图.recycle();
}
};
关闭广告次数 = 0
function 关闭广告(包名) {
var arr = [
"ksad_detail_close_btn",
"ksad_end_close_btn",
"tt_video_ad_close",
"confirm_tv",
"tt_negtive",
"close_imageview",
"tt_titlebar_close",
"detail_back",
"close",
"reward_ad_close",
"ksad_top_toolbar_close_tip",
"tt_video_ad_close_layout",
"tt_insert_dislike_icon_img",
]
for (var i = 0; i < arr.length; i++) {
if (id(arr[i]).exists()) {
id(arr[i]).findOne().click()
关闭广告次数 = 关闭广告次数 + 1
toastLog("本次累计关闭_广告" + 关闭广告次数 + "次");
//console.info("关闭广告");
}
}
if (id("kleinAd_iv_close").exists() && text("奖励已发放").exists()) {
id("kleinAd_iv_close").findOnce().click();
关闭广告次数 = 关闭广告次数 + 1
toastLog("本次累计关闭_广告" + 关闭广告次数 + "次");
// console.info("关闭广告");
sleep(500)
}
//抖音
if (id("android:id/content").find().length > 0) {
if (id("android:id/content").findOne().childCount() == 1) {
if (id("android:id/content").findOne().childCount() == 1) {
if (id("android:id/content").findOne().child(0).childCount() == 1) {
if (id("android:id/content").findOne().child(0).child(0).childCount() == 2) {
if (id("android:id/content").findOne().child(0).child(0).child(1).className() === "android.widget.ImageView") {
log("找到视频X");
id("android:id/content").findOne().child(0).child(0).child(1).click();
}
} //
}
}
}
}
关闭广告2 = 包名 + ":id/tt_video_ad_close_layout" //穿山甲 抖音右上角X
广告X = 包名 + ":id/tt_insert_dislike_icon_img"
广告内X = 包名 + ":id/tt_bu_close"
广告返回 = 包名 + ":id/tt_titlebar_back"
右广告X = 包名 + ":id/tt_playable_ad_close_layout"
倒计时X = "anythink_file_paths" //抖音=提前结束左上角X
//function 广告检测() {
fqjs = 0
if (id("img_close").findOnce()) {
id("img_close").findOnce().click();
// 关闭广告次数=关闭广告次数+1
toastLog("8关闭弹窗")
sleep(500)
}
if (text("浏览页面25s 领取奖励").exists()) {
随机往上滑()
sleep(2000)
}
控件点击(text, "无法关闭", "无法关闭")
var ggx = id(广告X).findOne(100)
if (ggx) {
toastLog("点击-广告X")
try {
dadclick(ggx).click()
} catch (error) {}
sleep(500)
}
var yggx = id(右广告X).findOne(100)
if (yggx) {
toastLog("点击-广告X")
try {
dadclick(yggx).click()
} catch (error) {}
sleep(500)
}
var ggfh = id(广告返回).findOne(100)
if (ggfh) {
toastLog("点击-广告返回1")
try {
dadclick(ggfh).click()
} catch (error) {}
sleep(500)
}
/*
var ysqh = className("android.view.View").depth(11).drawingOrder(0).indexInParent(0).findOne(100)
if (ysqh) {
toastLog("点击-广告返回2")
try {
dadclick(ysqh).click()
} catch (error) {}
sleep(500)
}
*/
var gbyy = text("关闭应用").findOne(100)
if (gbyy) {
toastLog("发现-关闭应用")
try {
dadclick(gbyy).click()
} catch (error) {}
}
var azyy = textContains("您要安装此应用").findOne(100)
if (azyy) {
toastLog("发现-狗币快手回家")
back()
sleep(1000)
}
var gxhd = text("恭喜获得奖励").findOne(100)
if (gxhd) {
toastLog("发现-狗币快手回家")
back()
sleep(1000)
}
var ggnx = id(广告内X).findOne(100)
if (ggnx) {
var fw = ggnx.bounds()
if (fw.bottom < (device.height / 2)) {
toastLog("点击-广告内X")
try {
dadclick(ggnx).click()
} catch (error) {}
sleep(500)
}
}
var djsx = id(倒计时X).findOne(100)
if (djsx) {
try {
var djsx = djsx.bounds()
if (djsx.left < device.width / 3 && djsx.bottom < device.height / 6) {
toastLog("点击-倒计时X")
try {
dadclick(djsx).click()
} catch (error) {}
sleep(300)
}
} catch (error) {}
}
var wkgb = className("android.widget.ImageView").clickable(true).findOne(100)
if (wkgb) {
try {
//判断属性值都为空在点
if (!wkgb.text() && !wkgb.id()) {
var wkgb = wkgb.bounds()
if (wkgb.left < device.width / 3 && wkgb.bottom < device.height / 6) {
press(wkgb.centerX(), wkgb.centerY(), random(200, 400))
} else {
toastLog("NO点击-无控点X")
back()
}
}
} catch (error) {}
sleep(500)
}
var wkfh = className("android.view.View").clickable(true).findOne(100)
if (wkfh) {
try {
//判断属性值都为空在点
if (!wkfh.text() && !wkfh.id()) {
var wkfh = wkfh.bounds()
if (wkfh.left < device.width / 3 && wkfh.bottom < device.height / 6) {
toastLog("点击-无控返回")
press(wkfh.centerX(), wkfh.centerY(), random(200, 400))
back()
}
}
} catch (error) {}
sleep(300)
}
var wkfh = className("android.view.View").clickable(true).findOne(100)
if (wkfh) {
try {
//判断属性值都为空在点
if (!wkfh.text() && !wkfh.id()) {
var wkfh = wkfh.bounds()
if (wkfh.left < device.width && wkfh.bottom < device.height) {
toastLog("无控返回--")
//press(wkfh.centerX(), wkfh.centerY(), random(200, 400))
back()
} else {
// toastLog("无控未找到")
}
}
} catch (error) {}
sleep(300)
}
var tc = className("android.webkit.WebView").clickable(false).find()
if (tc) {
try {
for (let i = 0; i < tc.length; i++) {
var fw = tc[i].bounds()
if ((fw.right - fw.left) > 300) {
var zb = fw
break
}
}
var zuo = zb.left
var shang = zb.top
var you = zb.right
var xia = zb.bottom
if (shang > (device.height / 3) * 0.9 && xia < (device.height / 3) * 2.1) {
//981
//log("点击")
x = (you - zuo) * 0.95 + zuo
y = (xia - shang) * 0.1 + shang
press(x, y, random(300, 400))
sleep(100)
}
} catch (error) {}
}
if (fqjs >= 2) {
fqjs = 0
var fqjl = textContains("放弃奖励").findOne(100)
if (fqjl) {
toastLog("发现放弃奖励")
try {
dadclick(fqjl).click()
} catch (error) {}
try {
click("放弃奖励")
} catch (error) {}
}
} else {
var jxsw = text("继续试玩").findOne(100)
if (jxsw) {
log("发现继续试玩")
fqjs++
console.error("点击继续试玩")
try {
dadclick(jxsw).click()
} catch (error) {}
sleep(200)
var x = device.width / 2
var y = device.height / 2
RandomClick(x, y, 15, 1)
}
}
var hddj = textContains(" 领取奖励").findOne(100)
if (hddj) {
try {
console.info("点击-参与互动-领取奖励")
var dj = hddj.bounds()
press(dj.centerX(), dj.centerY(), random(250, 400))
sleep(200)
} catch (error) {}
}
var hddj = desc("参与互动 领取奖励").findOne(100)
if (hddj) {
try {
console.info("点击-参与互动-领取奖励")
var dj = hddj.bounds()
press(dj.centerX(), dj.centerY(), random(250, 400))
sleep(200)
} catch (error) {}
}
var gggb = id(关闭广告2).findOne(500)
if (gggb) {
console.info("点击-关闭广告")
toastLog("点击-关闭广告")
dadclick(gggb).click()
sleep(500)
var jxsw = text("继续试玩").findOne(500)
if (jxsw) {
console.error("点击继续试玩")
toastLog("点击-关闭广告")
dadclick(jxsw).click()
sleep(500)
var x = device.width / 2
var y = device.height / 2
RandomClick(x, y, 15, 1)
sleep(2000)
}
}
// };
function 随机往上滑() {
var x1 = random(device.width / 4, (device.width / 4) * 3);
var y1 = device.height / 6 * 5;
var x2 = random(device.width / 4, (device.width / 4) * 3);
var y2 = device.height / 6 * 1
swipe(x1, y1, x2, y2, random(1000, 1500));
console.log("随机上滑");
}
function dadclick(id) {
try {
if (/UiObject/.test(id)) {
if (id.clickable()) {
return id
}
while (true) {
//log(id)
var id = id.parent()
if (id) {
if (id.clickable() == true) {
//log("找到可点ID了")
return id
}
} else {
return false
}
}
} else {
//console.error("参数错误,不符合控件ID")
return false
}
} catch (error) {}
};
function 控件点击(dshuxing, dzhi, dname) {
var a = dshuxing(dzhi).boundsInside(0, 0, device.width, device.height).findOnce();
if (a != null) {
var x1 = a.bounds().left;
var x2 = a.bounds().right;
var y1 = a.bounds().top;
var y2 = a.bounds().bottom;
var x = random(Math.floor(x1 + 1), Math.floor(x2 - 1)); //删除控件四周1的边界,防止边框位置点击无效
var y = random(Math.floor(y1 + 1), Math.floor(y2 - 1));
var timedelay = random(50, 150);
toastLog("点击 [" + dname + "]");
press(x, y, timedelay);
sleep(400);
return true;
}
else {
//toastLog("无法找到 [" + dname + "]");
//其他内容
}
}
};
function 清理后台() {
toastLog("返回脚本")
sleep(1000)
launchApp("造雾-脚本合集")
toastLog("五秒后开始清理后台")
sleep(5000)
toastLog("开始清理后台")
recents();
sleep(3000)
x=device.width;
y=device.height;
click(x*0.5,y*0.925)
toastLog("运行等待5秒")
sleep(5000)
}
function 检测界面(包名, 软件名) {
if (currentPackage() != 包名) {
toastLog("当前界面不在"+软件名)
sleep(1500)
toastLog("返回脚本")
sleep(1000)
launchApp("AutoJsPro")
toastLog("五秒后开始清理后台")
sleep(5000)
toastLog("开始清理后台")
recents();
sleep(3000)
x=device.width;
y=device.height;
click(x*0.5,y*0.925)
toastLog("运行等待5秒")
sleep(5000)
toastLog("打开"+软件名)
launch(包名)
}else{
base64找图广告(识别率)
}
}
//指定的APP包是否存在
function packageIsExists(p) {
if (getAppName(p) == null) {
return false;
} else {
return true;
}
};
function 识别度(sbl) {
switch (sbl) {
case 0:
ui.sb.setText("0.5") //这个是数字显示
return 0.5
case 1:
ui.sb.setText("0.55") //这个是数字显示
return 0.55
case 2:
ui.sb.setText("0.6") //这个是数字显示
return 0.6
case 3:
ui.sb.setText("0.65") //这个是数字显示
return 0.65
case 4:
ui.sb.setText("0.7") //这个是数字显示
return 0.7
case 5:
ui.sb.setText("0.75") //这个是数字显示
return 0.75
case 6:
ui.sb.setText("0.8") //这个是数字显示
return 0.8
case 7:
ui.sb.setText("0.85") //这个是数字显示
return 0.85
case 8:
ui.sb.setText("9") //这个是数字显示
return 0.9
case 9:
ui.sb.setText("0.95") //这个是数字显示
return 0.95
case 10:
ui.sb.setText("1") //这个是数字显示
return 1
default:
return 0.6
}
}
function 识别度返回(sbl) {
//log(sbl)
switch (sbl) {
case 0.5:
return 0
case 0.55:
return 1
case 0.6:
return 2
case 0.65:
return 3
case 0.7:
return 4
case 0.75:
return 5
case 0.8:
return 6
case 0.85:
return 7
case 0.9:
return 8
case 0.95:
return 9
case 1:
return 10
default:
return 2
}
}
标签:包名,AutoJsPro,识别率,源码,线程,var,ui,toastLog,sleep
From: https://blog.csdn.net/m0_57628462/article/details/142623109