各位老铁支持我这么久小弟首先感谢了~
微博小助手UI
刷微博的项目是个老项目,多少年了,我也参于一下,其实没啥东西很简单就是会遇到个三无的ad控件。我实在是没办法了就强制停止在打开了,AD就没了。另外就是做任务有个0-2的任务做起来也不难,我测试了3个手机问题不大。最主要的是微博专业版我做了2个群刷模式,一个是切号模式一个是分身模式,分身我就不多说了大家都知道而且我在之前的快手、凹音和秘乐都说过,今天就简单说说切号模式。其实就是一个给客户端多个帐号来回登录和登出。
分身模式也做了很多修改可以保存动态的名和刷新UI,无须重启就可以刷新UI和执行任务。
其实这个微博项目就是我亚丁号(原薅羊毛专业版)的代码修改的。公共方法和UI构建都都有,绝对值得大家入门一看,高手工作室专业选手请绕行。我意在未大家抛砖引玉。全部代码如下:
"ui";
//#region UI和系统变量
var rootUrl = "http://49.234.93.82";//各位大神小弟自己的服务器别黑谢谢
var rootPath = "/sdcard/亚丁号/微博/";
var storageSign = "[email protected]";
var softVersion = "0.6"
var softName = "微博小助手"
var woolStorage = storages.create(storageSign);//创建本地存储
var videoArray = new Array("微博", "微博1", "微博2", "微博4", "微博5");
var havedVideoChecked = new Map();//已经被选择的小视频集合
var havedVideoTimes = new Map(); //
var videoBrushThread = null;
var videoSignThread = null;
var videoItems = [];//小视频集合
var probabilityValue = 10; //系统默认概率
var loginInfoArray = [];
ui.layout(
<drawer id="drawer">
<relative id="mainWindows">
<viewpager id="viewpager">
<relative id="welecome">
<vertical w="*" h="*" id="firstPage" gravity="center">
<img w="64" h="64" src="data:image/png;base64,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" />
<text text="欢迎使用{{softName}}" textSize="32sp" textColor="#FFFFFF" gravity="center" />
<text text="滑动屏幕来了解更多信息" marginTop="10" textSize="25sp" textColor="#A0FFFFFF" gravity="center" id="txtTimeTip" />
</vertical>
<text id="skip" text="单击此处以跳过" marginBottom="100" textSize="13sp" textColor="#30FFFFFF" gravity="center" layout_alignParentBottom="true" layout_centerHorizontal="true" />
</relative>
<vertical id="secondPage" gravity="center">
<text text="{{softName}}" textSize="45sp" textColor="#FFFFFF" gravity="center" />
<text text="让生活更简单" marginTop="10" textSize="15sp" textColor="#A0FFFFFF" gravity="center" />
<webview id="adWebview1" h="*" margin="0 16" />
</vertical>
<vertical id="threePage" gravity="center">
<text text="{{softName}}" textSize="45sp" textColor="#FFFFFF" gravity="center" />
<text text="让生活更简单" marginTop="10" textSize="15sp" textColor="#A0FFFFFF" gravity="center" />
<webview id="adWebview2" h="*" margin="0 16" />
</vertical>
<vertical id="startpage" >
<vertical>
<appbar>
<toolbar bg="#FF5c50e6" id="toolbar" title="{{softName}}" paddingTop="2dp" h="auto" >
</toolbar>
<tabs id="drawerTabs" />
</appbar>
<viewpager id="woolView" >
<frame id="frameFirstTab">
<scroll>
<vertical>
{/* 开启无障碍服务 */}
<vertical>
<horizontal >
<img w="45" h="45" padding="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAZklEQVRYR+2WQQrAMAgEJy9v+vKWQAmhN0VIKePZXWUQ1gZ04CBW56NbVSmfBlyx2bN7aNdK+biABCQgAQl8gkAqRCrDKJlFNbJ3otW4BlxcYBDYfoSpTwbwI5KABCQggf8Q2BpGNzebPgmO8w3jAAAAAElFTkSuQmCC"></img>
<Switch id="autoService" paddingTop="12" text="开启无障碍服务" checked="{{auto.service != null}}" textColor="red" textSize="15sp" />
</horizontal>
</vertical>
{/* 开启悬浮窗权限 */}
<vertical>
<horizontal >
<img w="50" h="50" padding="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAKAklEQVR4Xu2djbUmQxCGeyNABIgAESACRIAIEAEiQASIABEgAkSACBAB59mdvubOzkxVddX0N/N1zTn37O65PdX18051dVV175OSz9AaeDK09Cl8SQAMDoIEQAJgcA0MLn56gATA4BoYXPz0AAmAwTUwuPjpARIAg2tgcPHTAyQABtfA4OKnB0gADK6BwcVPD5AAGFwDg4ufHiABMLgGBhc/PUACYHANDC5+eoAEwOAaGFz89AAJgME1MLj46QESAINrYHDx0wPcFgAvllI+KqW8tWDj71LKV6WUn45mLwFwtIb36X9WSvl0YwggeLWUwp+HPQmAw1SrIswX/ubOyLeP9gIJAJWdDhuUADhMtdcgnAC4hp3UXL4+jfxV+cbvpZRXdsZ+WEr5RkGLYPK1Uspv1pghlwCFdpVDPiilfD2N/bKU8onw3hellI+FMQSAxAF7gML4P5ZSAB/jGK8OHBMASusKw+bGr0P5cvmC5w/GeqeUQvS/9+Uvp4MW28IlEObGr++YQJAA8ANgzfiV6velFLwBD+PeLaVgtNYH40LvjwlA/H2NnhoECYBWU/xv1Or2fZTi31aBIAHgU7wUxfuo+98W8wgJAJ+S9zJ5Psr+t/+ZlondgDAB4Fc0Adr7fjKhFDA+9QVxO5oAiNH7mUCgNj6iJwBiAAAVXO0LceSaKX0+bTNVBBIAKjWpBp0lIBQDv7k0CQCVbVWD/mrY45O6Zflgra61fxJEZPXIGfBj9SpkIGvuQWQ8ASCqSDUAQ32nGvls0J9TYkhq+CDJQ7p4q2dgbUqSRPQRqJ4EgEpN4iBy8cuunq2Xfp6+bHW+fhqPp9B6A/UykAAQbSsOwGVT1dM8uHyAYjF+pWvxMt9OHkbkKQEgqkgcoN0CqhIzwmyWxNMbmQcQbecaQKDG2syXqXlM27MNgsQErPGapQAvQ/zww57HObsH2OuX44sSM10ayyjHEORpjb1G8qVG17+kRYRPJ3HLAygoUVOlfPqcFQBrde41gamRS00VLYpavsPX/ouDEGt/7RZykHn6KjEEQWfrQxD6ELCeFQAYlY4ZzcOWB7d45ONVejRQ/3UIewkAWIId9ZbHoTQvACLW/zn7CYCZNhIANmSnB7DpK2TdJRL3BJBzli15hzVREwANAPAq3ZSeFfjb60HUiPYoSXTWINBSWdP2zmuUszeGL3i549jbpi5pRS1VbOHoLNY81BzmATJ/R4aHTOQRAGCPirKYhODHule3brlavy54hNdWPjEAvAJWTWKGcYDA81iCUb70R8ZemzgaAHTI4qLqoznYMOcLhbLHtbZOk46lDKrNsS/dqJXPOc8Wl+z1VuQiNPkEvnzVuYNIACyNbwEBLq32zbd+IRixHqDYywtsGawVBNb0rHTSZ0v+Lf2ujVdvO6MAIDH3XApy+spppsRNqdBqQAbulpQp0Xd96mUM5Bi2nlYQWNKzzIG30pz5g0/4Rr+WXYQ6ORYBAMn4c2UTD/CDwbX1c4PdnxuKJ6gxCK5TA7QWELTsEgApQNiLkfhAtk7/bOlFXQqGgBcAlpStx5C93wUElFMtKWYMyQld68McRPbz+KW2hFlpMf69ebFHIuAFgGW7JvFytt+r19GJcW2AdrScXQFg2ZMeLXg0fUvEbt26RvM6p4dNAIHq8XoAyz5YxdBJBlnKt9rSdU/R1o6mr87vBQBE7w0Elr69Mxq/GlpVgo4AwD2BwGJ85D77Eij2BUYBAGVYulZ7ukPtXC1NmwmAhXZbt0JaIx05zhr1az0faVm2eC1bxDV5ay+kVIhS5QMiPQDMXnlb2Fqt24qBMBResZ7+YRx5k5bjXuiW5YmkUM0ZEH/w77Wj6SrjQ/TsAEDo2sFKwgSh+amZxJcDXYJl27ecdgmCvSPa9bgXYNBUEWngIH29dYxseS5BbfxoACAYByS9D8oD2QgmZeLqVxVxQYO3XAsvtc7An1IZXJM70HYSMR+pdWTYq3U8Z5tID2Bp5NwCCeswxteWdSsdPAKAkdZFCZzqIopESPl7aclsXZaU08cuAdKtl3tM8dVTpn04sKCW4PFAS1VubQrV3rmRt7XX7gYAni2g6UoThfI9BSo8Dyd4ej13AwDPfthUvFBaRntgc42cJxhUsvcwTNKbmMixTrgcHxEDWPrUlvO37L21MhNAtuwSWnsMtXzNx+15Tks9omXup+94AdDaw8fcLZk3i6AeYFp7DC18LccSwK41qrCLsAbDZj40AGB7xzZr2aiJgj1dPaa7bMySPXtBWmP3yKJ83l9u5/AQ7LXv4tEA4KhGhx5bLk9AuGfgI5eursCSAOBxo3uCdFnfJteqvb7FovjeuwULb6axtwJAzy+oNRiUFCnpTnr/FL+XhDjKA/QEgCcO2DOSpLtTGFhiQhLiKAAcsfffkjUBsIOCWwGgZ7IlAXBCAOQSIPnmTr+/lQfoWXTxXKcyfAygqVm3YLVXuvUo/tWnb1uU0/MdyQPAi6ewsifL4YWOqbeg9U69Ld6jStc97bw5lwYAvMyXtEwF126cloILNE2tS43a8vQo0Iq11pXUJUffKK/5NS0A9gh7PMSR6WBPh1LPXYrZaJEvRADAckHCknfTOTaD4FTXqGFYbxphike3aBnmvOTQCAB444ToHYH3uNbhfXhnQkoUALzRdpTLxfhcMTu/p8ii77uJ7rVCRwGA+bwZN/WJ1g3hcPvc6K25RGlLPz16FLS26TIuEgCW27K2hCPCxgjS/6WzfJ97+6n9t6z5ldbRHUpdDGqdJBIAzB31f+cBADwCAdnW4RC+dDqV6KvT3P0j6abHtlTiofvvowHgXQbWFAAAliBYy0t4ldezQunlNez9KwAgTFiBUAIgQNMt/3liwLQhJKK3oyFMHU0k0gN4Mm9Hy6ml36M+oeWly7goAETsALoILEzScknkGfhu5iECAPdi/KrEoUDgBcC9GX8OAgpVh5/Maf50g170AuCIbV+QaG4yPdvW3My2EkgAbGtuiLSwFwD3dklkhYP1vsDWD/Dm73kBgABaEJBrJ73LskHqlvgh6uq0LUWS3qXngBoBZxw0dwkNY3yUFgEADQi2lOq9Om3N8JR06yVTyyAOEACIrdu5hjJ+JAD2QKBRKl8oRR2SSa09htJ1ahUsWx5Lw+fNXXY0A1EeYEu5LUqVrk1Z04G1oWQJghY+o21xE3rRAECIur7jfnHF1sfaY6i9S2/Jx5xPYpO73/OvGeIIAFgNvjbe4gWGrOJFKDk6BojiCTqWwtJQTZyRSk4ARGvzgvTOugSkB+gEpgRAJ0WfdZqzAkBbZRyykzcSTGcFADKyhQQIW1k7Mn60gnsvmI7U5+VonRkAl1PmFRlOAFzRaoE8JwAClXlFUgmAK1otkOcEQKAyr0gqAXBFqwXynAAIVOYVSSUArmi1QJ7/A/Ab75CB6LdKAAAAAElFTkSuQmCC"></img>
<Switch id="switchEnbleFloating" paddingTop="16" text="开启悬浮窗权限" checked="{{auto.service != null}}" textSize="15sp" textColor="red" />
</horizontal>
</vertical>
{/* 分身模式Or切号模式 */}
<vertical>
<horizontal >
<img w="50" h="50" padding="16" src="data:image/png;base64,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"></img>
<Switch id='switchSeparationOrSingleApp' text="分身模式OR切号模式(开启是分身模式)" paddingTop="16" textColor="black" />
</horizontal>
</vertical>
{/* 是否开启控制台 */}
<vertical>
<horizontal >
<img w="50" h="50" padding="16" src="data:image/png;base64,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"></img>
<Switch id='switchIsShowConsole' text="是否开启控制台" paddingTop="16" textColor="black" />
</horizontal>
</vertical>
{/* 是否显示Toast */}
<vertical>
<horizontal >
<img w="50" h="50" padding="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAC50lEQVRYR8XXTYiVdRQG8J8glhlZaB9gkIhCEFELU/owV7WQFgZSizYhfaxqU6aVoGAUBW1K+tTaFBTYrkhcDWNUoNWmRY0FBQVShsEgmUXFc3nf4Z2XOzP//+2CZ3nvOc957v+e85xzFim3pdiCe7AOK3EF/sFvOIVv8AE+xNkS6EUFTpfjWdyHkCixP/AunsKv8wXMR2AxduJJLCvJOsTnDJ7D8/h7GMZcBC5rnvGWERP3wz7FXTjd/2IYgfy/R7B6TMlbmB9wJ050cfsErsQXWDXm5F0SNzUFO/isSyD/82e4viL5v3gV+5ti24oXcck8GMdxO1KoswikUJ6oSB7XJHu8F5M2fX8BnOTa1SWQJ/8OF1YSeBQv92LW4PsFcKIRqbWf2r/gTTxQmTzux3Ar/urE7sHeAqwDeDAEluD3CpHpY3+NV5oa2IZ7C5LHJTVwaQhEXj8qDBq325YQeA0PVyJH1b7EOazFVZXxrfvrITCBzYUA8c1cONobNmndt7C+EKd1mwiBqaYiS2Lvx4+NYzTjz05QOiif3VgC1PhMhUAGxkUVQa1rqj8a37WX8EgF1nQITOPiiqDWNc+eDujaexVdkLgBgQyHFFKNRYKXN+TbuIzvk1hRAXQiBCaxqSIorp/j5l5MFpZ3KnEmR23DLCov9JJ90qhiDYdBG44iRNkV2m5IwuuG1EMJkYEQRYqzqZR2wre4toe+D7tLMnZ8ZqQ4n72RwVAI8Da293wj5XnJGssAfKidhtmEsjKVjONBYC/TwQ6piNMFCzDJOL4Gv3Q3ohTVjoKfEOW8oSfFWdc3NG2Yl3xsAZzkSiHP2ogCkpYs0fPsAdlq0o4/I7fDHchKdjeiCXNZhthtw1ayBOTa+QpXF7zEKC4hm1mRK2pgc63lh5HVapyWGssrZfWbsfkOk4+xcUwMqg6TNmf0IUX59P9Y10Y+zbo/PC36zPk4TvuvP9d5nsmYomrP80PNjll0nv8HJ92OBlNZpcIAAAAASUVORK5CYII="></img>
<Switch id='switchIsShowToast' text="是否开启Toast提示" paddingTop="16" textColor="black" />
</horizontal>
</vertical>
{/* 是否强制停止 */}
<vertical>
<horizontal >
<img w="50" h="50" padding="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAD60lEQVRYR9WXX2gUVxTGfze7haBEES1Rog2IgRATSERqfLDFh0Y0iZXAJjv7poIhPiipiRJjBCvWmPinb5aaJ4WdiSmkFomavNggYhRKq6JiVhRiUVEoZhFF2Z1y5u7kj0l2d5K2oRfm4c6955xvvnvOd+4oZnmoWY7P/wOAHQrlEY/neGIrI+NPFQ4PprJJyYBtGE3Ad6kcTbHepEyzNZltUgB2ILACn+8Ba9b42LDBG4YrV2BgIEYslq+6uiJTGScHYBi9ZGZ+xZEjcPAgvHmTHoi5c+HQIdi/H96/71OmWeYZgG0YlcAvhELw6hX09qYX3N21cSPMnw+WBUqVq3C4ZzIHkzJg79jxCcPD98jOXkFjI+zdC7btDYDPB0ePwrFj8gGRxFHEPnYyOYBgsAGl2mlqgosX4c4db8Hd3atWwfr1cOKEvKlXpvl9SgB2IPApfv8jiouzKCuDtrbpBXetWlqguxvu3o2iVK4Kh/8a63ACA3Yw2IHfv92hrr0dXryYGYCcHNizRz/x+A/KsuqmBGCHQsXE479RWalYsADOnZtZcNd62zZ49gx6emxisULV1XXPXRrHgG0YA2Rlfe4kT0MDvHun9y1eDH4/vHwJy5ePgopEYM4cvf74sZScZDzk5+s9sv7hA0hZCqP79kkp9yvT/HICADsYrEEpi7o6bdjXp/ds2QKvX0NBgU7I1ath3Tq4ehX6+2HnTrhwAdau1XMBWlGhwc6bB6dOaT/l5bBkCXR0SEVVKcvqltcjDNiGcZvc3CJ279bn5ZZdVRUUFcH583D/vnYm1SEsSZIOD8ONGyBlJ8IjYJYtg2vXYNcuOHxY28i6VMPx4/D06e/KNEvSAyD0iaAEAnKGMDg4CqC0FPLydK7k5oKIz/XrsGkTPHwIt27B0JAGIEcjwYWRoaE/lGUVfwygGuikthaePAHRchmbN2vnEqi5GaJRnGM6fVqvV1fDypXw/DmEwyBZv2iRPo6xQ8AtXQpnzgi7AWVZP40DIJORJBTtF5rT1f7xoSbO3CQUn9Ho5EnoAHDLsKJCsXAhnD2bynV661u3aoZSlaED4t8Qovp6nJ4Sj/+oLKt2LOqJSuhKcWFhlpNM/7UUJ3KhEWhzuuClS9NvRiUluhmdPCmJ942yrIQojHKQrB1HyM7+zFFEUbDptOPWVpDHazt2WKip+ZqMjJ+dC4momquM6aWd1gRRws5O7xcSN4ZtGL+SmfmFcyU7cADevk0v/D9xJXNYCAQK8PluU1rqc2TXy7h8GW7enNmlNFGWLSj1rZfYI3ttu1lZVtIrfcr/goRAzd6PybS+3INRWgx48Od566wD+Bvm9YYwjOfNDwAAAABJRU5ErkJggg=="></img>
<Switch id='switchIsCloseApp' text="是否强制停止(不是所有手机都支持)" paddingTop="16" textColor="black" />
</horizontal>
</vertical>
{/* 是否保活无障碍服务 */}
<vertical>
<horizontal >
<img w="50" h="50" padding="16" src="data:image/png;base64,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"></img>
<Switch id='switchIsKeepOnline' text="是否保活无障碍服务" paddingTop="16" textColor="black" />
</horizontal>
</vertical>
{/* Splash时间 */}
<vertical>
<horizontal >
<text text="App启动等待时间(秒):" textColor="red" padding="8 8 8 8" />
<input id="txtWateForTime" text="10" hint="App启动等待时间(秒)" inputType="number" padding="8 8 8 8" />
</horizontal>
</vertical>
</vertical>
</scroll>
<horizontal gravity="right|bottom">
<button style="Widget.AppCompat.Button.Colored" id="btnExecuteTasker" text="执行任务" padding="12dp" w="auto" />
<button style="Widget.AppCompat.Button.Colored" id="btnSaveWoolConfig" text="保存配置" padding="12dp" w="auto" />
</horizontal>
</frame>
<frame id="frameSecondTab">
<scroll>
<vertical gravity="center">
<list id="videoList">
<card w="*" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
<horizontal gravity="center_vertical">
<horizontal h="auto" w="0" layout_weight="1">
<input id="appIndex" text="{{this.AppIndex}}" inputType="number" padding="8 8 8 8" w="40" gravity="center" />
<text id="appName" text="{{this.AppName}}" textColor="#222222" textSize="16sp" maxLines="1" />
<text id="isSign" text="{{this.IsSign}}" textColor="{{SignColor}}" textSize="16sp" maxLines="1" />
</horizontal>
<checkbox id="done" marginLeft="4" marginRight="6" checked="{{this.done}}" />
</horizontal>
</card>
</list>
{/* 占位符 */}
<card h="40" w="*" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
</card>
<vertical>
<text text="App名称集合:" textColor="red" padding="8 8 8 8" />
<input line="3" id="txtAppNameArray" text="" inputType="textLongMessage" padding="8 8 8 8" singleLine="false" />
</vertical>
</vertical>
</scroll>
<horizontal gravity="right|bottom">
<button style="Widget.AppCompat.Button.Colored" id="allCheck" text="全选" padding="12dp" w="auto" />
<button style="Widget.AppCompat.Button.Colored" id="unAllCheck" text="反选" padding="12dp" w="auto" />
<button style="Widget.AppCompat.Button.Colored" id="btnSaveAppList" text="保存App配置" padding="12dp" w="auto" />
</horizontal>
</frame>
<frame id="frameThreeTab">
<scroll>
<vertical gravity="center">
<text w="auto" color="#111111" size="26" text="帐号和密码" textColor="black" padding="8 8 8 8" />
<vertical>
<text text="登录帐号和密码集合:" textColor="red" padding="8 8 8 8" />
<input line="3" id="txtLoginInfoArray" text="" inputType="textLongMessage" padding="8 8 8 8" singleLine="false" />
</vertical>
<text w="auto" color="#111111" size="26" text="示例" textColor="black" padding="8 8 8 8" />
<vertical padding="8 8 8 8">
<text w="auto" color="#228B22" size="16" text="[email protected]" />
<text w="auto" color="#228B22" size="16" text="137988@123456687" />
<text w="auto" color="#228B22" size="16" text="使用@符号分割用户名和密码,换行是新的帐号和密码" padding="8" />
<text text="友情提醒:密码里面不能有@符号" textColor="red" padding="8" />
</vertical>
</vertical>
</scroll>
<horizontal gravity="right|bottom">
<button style="Widget.AppCompat.Button.Colored" id="btnSaveLoginList" text="保存配置" padding="12dp" w="auto" />
</horizontal>
</frame>
</viewpager>
</vertical>
</vertical>
</viewpager>
</relative>
{/* drawer */}
<vertical id="drawWindows" layout_gravity="left" bg="#ffffff" w="280">
<img w="280" h="200" scaleType="fitXY" src="{{rootUrl}}/upload/profile/WX赞赏码.jpg" />
<scroll>
<list id="menu">
<horizontal bg="?selectableItemBackground" w="*">
<img w="50" h="50" padding="16" src="{{icon}}" />
<text textColor="black" textSize="15sp" text="{{title}}" layout_gravity="center" />
</horizontal>
</list>
</scroll>
</vertical>
</drawer>
);
//#endregion
//#region 初始化方法
initializeUI();
initializeData();
initializeEvent();
/**
* 初始化UI
*/
function initializeUI() {
ui.woolView.setTitles(["自动刷", "分身设置", "切号配置"]);//设置滑动页面的标题
ui.drawerTabs.setupWithViewPager(ui.woolView);//让滑动页面和标签栏联动
activity.setSupportActionBar(ui.toolbar);
activity.window.addFlags(android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
ui.viewpager.overScrollMode = android.view.View.OVER_SCROLL_NEVER;//删除滑动到底时的边缘阴影
//为页面设置渐变色背景
ui.firstPage.backgroundDrawable = GradientDrawable("TL_BR", ["#81C784", "#2E7D32", "#2E7D32"]);
ui.secondPage.backgroundDrawable = GradientDrawable("TL_BR", ["#4FC3F7", "#0277BD", "#0277BD"]);//蓝色
ui.threePage.backgroundDrawable = GradientDrawable("TL_BR", ["#FFF176", "#F9A825", "#F9A825"]);//黄色
//ui.fourPage.backgroundDrawable = GradientDrawable("TL_BR", ["#80DEEA", "#0097A7", "#0097A7"]);//浅蓝色
ui.skip.click(() => ui.viewpager.currentItem = ui.viewpager.childCount - 2);//点击跳过则跳转到最后一页
permissionpage = ui.viewpager.childCount - 3;//授权页下标(启动页前一页)(启动页固定最后一页)
ui.txtTimeTip.setText("今天是:" + getDate());
ui.adWebview1.loadUrl(rootUrl + "/upload/profile/副业赚钱课.jpg");
ui.adWebview2.loadUrl(rootUrl + "/upload/profile/副业赚钱.jpg");
initializeSDCardConfig();
initializeSecondFrame();
initializeThreeFrame();
initializeRightMenu();
initializeHeaderMenu();
threads.start(function () {
woolFloaty();
});
}
/**
* 初始化第2个frame页
*/
function initializeSecondFrame() {
//ui.woolVideo.visibility=8
for (let i = 0; i < videoArray.length; i++) {
let appName = videoArray[i];
let signMessage = "未签";
let signValue = getSignTime(appName);
let signColor = "#FF0000";
if (getDate() == signValue) {
signMessage = "已签";
signColor = "#228B22";
}
let execTimesMessage = "";
let key = appName + storageSign + getDate();
let havedRunTimes = woolStorage.get("" + key + "");
if (havedRunTimes == null) {
execTimesMessage = ("已刷:0分");
} else {
if (parseInt(havedRunTimes) < 1000 * 60) {
execTimesMessage = ("已刷时间小于1分钟");
}
let havedMinute = (havedRunTimes / 1000) / 60;//读取到的时间是毫秒需要转换成秒,转换成秒后在转换成分钟
execTimesMessage = ("已刷:" + havedMinute.toFixed(2) + "分");
}
let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), IsSign: signMessage, done: false };
videoItems.push(row);
}
ui.videoList.setDataSource(videoItems);
ui.videoList.on("item_bind", function (itemView, itemHolder) {
itemView.done.on("check", function (checked) {
let item = itemHolder.item;
item.done = checked;
let appName = item.AppName;
let appIndex = itemView.appIndex.getText();
item.AppIndex = appIndex;
if (checked) {
havedVideoChecked.put(appName, appIndex);
} else {
havedVideoChecked.remove(appName);
}
});
});
ui.videoList.on("item_click", function (item, i, itemView, listView) {
itemView.done.checked = !itemView.done.checked;
});
}
/**
* 初始化第三张选项卡
* 同时将帐号信息读取
*/
function initializeThreeFrame() {
let appArrayFile = rootPath + "配置/" + "Login集合.txt";
if (files.exists(appArrayFile)) {
let loginInfos = files.read(appArrayFile).split("\n");
loginInfoArray = loginInfos;
ui.txtLoginInfoArray.setText(files.read(appArrayFile));
} else {
toastError("文件不存在,文件不存在");
ui.txtLoginInfoArray.setText("文件不存在");
}
}
/**
* 初始化权限菜单
*/
function initializeRightMenu() {
ui.menu.setDataSource([
{ title: "注册", icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADDElEQVRYR6XXa+iecxgH8M8cyqk1Zs4vLKfmNENJihcOyyHEUJOyVsyU8oIXDiNGyiGyLBRLbEmOG6klRAu1pCTKISJqWNJiTaNv/f7r7tl9+D2Pq543z/29vr/vdf+u0z1NnV2Am3A2dsO/+Bhr8Qx+qaPZGTVtwHFXPInFPbjfcQdWTiJiSMCzuLaS+Do8XYndAesTsBAvjEH4N47Cj2P46BPwFY4ehwzLcO84Pl0CjsDX4xAV7Cc4bRy/LgFX4sVxiAp2O/bBX7W+XQLuwt21JCO4k/FprW+XgCdwQy3JCO48rK/17RLwEhbUkozgLsXrtb5tAg4qpZQmNIl9hpNqHdsEHIfPawlacF8gHFXWJmAX/Ip9qxh2Bi3HnbW+XTmQjvYuDq0lKrg3cRW21Pr1dcL7cFstUcGdjo/G8ekTcDC+wZ6VhG/gkkrsDtjQNDwS7+OQAeKM5MyN3wpuJq4v+0P++hZJzvdGm9SQgDhnHGcs91nGcMZxbC7W4bAOh1VYgq15XiPgDHzYc/rmUnY/l6gfx+4Fn0OSExlQezQ4kuDnR0SNgHS2V3sE5FU/haxtibzJ+RBuKcmcpG5a3sSiIQGzkbZ8SoeAPzEL/5TxffgI7mY8imvwXAvHvD4BZ+EV7NcT/fOF/JyOATQkYGVTwHRchDORez++oqSm9sAspVOb0MPlKuKepSYr2oGYU/iOwQOYkYqYEpB7vH8g2jY9l5X8eASJNlexF7YNiF+BG/FDBITk5Ypo2yBXY/VIkmWT+rKA3y5VcGI5J3+nQpaWN7AxAl6bpIOVA7I53YP/lQMbkTVqEnunHJ7d4fuW4TWUhHPzBtImU26TWD7Rji2vPJ9uj42QPIhbcTsyppu2BgsjYJL9v0n0Fi4sDSj3f0XjYZJxQ0sn/AknYHMEJFHmTxJ+wyfNJpHmwGR3Kipl3WbZti7Gd3kYAan5zP1zGz18Ej3JpctLLhxQgkqU+WWk56oz1D5okjcb0d6YV+o4SXkq9i+RpClNDZhRcZtKDuSjJKtcvqT/qI3gP3MgjiY84hPxAAAAAElFTkSuQmCC" },
{ title: "登录", icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABrUlEQVRYR+3XsUuVURjH8c+1EiQigsJAMAhKKIOgPyIDB12VqKFcwjaDQEhrKisCoyGHxMXFQfoL0iAIEpdKqFaHxhpaaohHTnCF+957sfP6OviM973v+X3P89z7O79TU3HVKtbXCuAA+nEsA+gffMX3+rWaAVzBAo5nEK9f4jWu4md8WARwHuvprSV8yQRxCYN4gVvNACbxACNYzCT+T28tjfUwfhd14BWu42yaW0YGc7iBc9goAojZx5zO4FtOdbzETVzAxz0LcBeXMYrNNjsQ3XqLGTxp8k5bHWhTc9vXjuITejCBxwWLlAYQeqewil7cx70GEKUChF50ICBOpy5EN+qrdIAQ68YK+hpA7ApAQISFv0G46nOMpzY0BOjEO4RVllW3MVvkA13J8WJ+ZdUYWy64N0eQe9eV/ggr/RvWG9EUpnfTiE6kEJPFindyGMXu3+MRnv7vYbSfB+ZxreRIFhb9uSgR3cHDkkLpB1zEEfwqAjiZrLkDzyK9ZnCqQxhKYXQZw81ieTwbQIwiXC1nxT0jUvGPVgDx/GA6Tiu5muXcdeFarS6npUP8BePUcCF8w9CJAAAAAElFTkSuQmCC" },
{ title: "日志", icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAC8klEQVRYR82XT2sTQRjGn3cTaG8mG28eqrATEQ8NePIiFRFURCoigohWVOxORNtP0PQTmKKZHEQoRQQtUpQigmjrBxDqRbGzYj140kziLaXpjszalDSm+bOxxDkF8s7z/N5535nZIfR4UI/90RTAFvJpN4Da1zPFW8n5ZhoNAezc5wzIugngdjcAAE4S4UjBZc52Oo0BhPyuONvTpXkwfff9L0ltrY8XeNJtpPcXwMayzyrOZv8FgNGIC7lQ5OxozwBsId8ozo71EGD5teLJ410BxPKf9qLcXwpE+suxkntgpSoYyy2nQLRri8Fq9ENpfF8Qb+flK+WyE10BJIRc1KABQBvRlOJss39sIZcADNYZjCvOsgGAkC8VZ6dCAZjsLKIrAMbqBLIW4flPly22alZbePOKO6dDASSEN6yh5wB881ejKSNi9VWM6SA0JlWaZVoBJIR8UeDsTCiAjSXUBLwrcDb0p6ZeFlrf8VejcVPnViWIC2+uyJ2zoQDsnMyAMBFM1nqMNK1oC9MAYiCaUq4zZsoUtShWa1ApR5c2m1B4zxR3zoUCiN39Gov2V1K+DkwHNkR+EWhkndaWanfDdqWw83JWuex8KIDqJFssT4OsEnxdAmFYcRb0Q7UkWustuyBCmKw2qJ2TT1SaXegKoFmjmTIRIegPM3xCKQJkNwHy3mPlOhd3DKDlLsjLRwWXXQoFkMgtj2jLHECdDb8cnao2YVzImSJnl0MB2EKaI7djANL6aiGdNI0L0z+KJ0dCAXSWd+NoOy8fKpdd6x2A8B4o7twIBWALaS6frTdde8tScxl1AdDolGvHv+4kDL8C7Zi1irG7KUEr8Xb+j+fk+2KaHQrVA+0YNIsxH6SkdR+IDsPCQTXKPtbG7+hnefC+AKDS+zOxe3LIsvwh87s1QF5OQGO07YeJBU0+VXzQGpFfIdBawXXeGqNEXnrrFVy3IliIaGI/0o7XEqAaUM0gTBlqMzU69ZlXNf/vx2mYzDud8xtjzpswrqCXXwAAAABJRU5ErkJggg==" },
{ title: "检查更新", icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADnUlEQVRYR+2WTWgcZRjHf890k6KoTQ8F6xcRRcXWj9DubKmXFLQoRCtCg1KwTYspFrzYmJ3RwzYHs7PRXvSgCW20wQ9owWDAQ6jS3NZMElqKGkKbUhE/etBCDqE2yTwy484yHbLZ2cS2F9/bzPs8//+f//O8z/sKN3nJTebnfwE1O5Ap6DOesl3gceAJgQWFCWBShG9Hs3KylrImFmDm9RDCC0BTFYLTKEOuLYeSCEkkwCxoDiUO+AfwO+AJrFe4K0Y46FryUjURVQVkHD2p8HQIpEKf4dE3aotve3ll8rrJM2gXpT3y+xvXkpalRCwpwCxoD8pbJYApPNrct6W4FKDZoy3i0Vt2RHjdzcrHlXIWFZA+rPfKPDtQPiwlXnItubOandF909FzwIPBP+ENTfH12EH5JY5xjYDNeW0SoVMImu3WcrDS6tpyohYBfklUGI/kzCoMGcr70fKVBfjHS5VPgLujRH7Nx7KyvxbyMDbt6CmB5miuwG8Ke11Lhv81B9ic12ZDOBUJPIrBd6tSDBfflL+WQx7mPJnThvrVNCO0IrwS/veUbeO2jAQCokoNYcf3WRlaCWml3IyjHQrv+fsKI2OWbJPSgMmVkj5yLTlwPchDzExe21XoDb6VLkk7+qXAyygzri1rrid5iG06OgPcDgyK6egU8BDwo2vJxhshIO3opMAjwLSYBb2M0oBSdG3ZeiMEmI76w2yL77rvwCDwInDRteT+WgXs2pW7Y9Utc40DR7rPJs01Hf0ZuA8Y9h3IojjAVUnRNNohPyUFamuzH/UMjgMbVLVroN+pegNuyWujJ/hlrw+aMJPX7SoEQ6GWPoiSBwNFtfPTfic4Ykut2HB6NpgDpqP+uX++lHh6wWDnRKdMVwKKkyucGDiab61CvFXgc6CxFNfjWpINBDz3ga7+c5YrEYBZFT7Do4jHmbF35Ey4FyefT60ZmWrMdlUiF+EeEZ5C2RvYXloLa6mf2C9z5bugqVvX1Rt8Eb37w2BJsSHsjd37bH9kB/N95rbH+HV9ebpWcz/cn/SUlnFbLgSli2elC3pAlNf8xgLqgqCIgFf32ccFdtYo4KrCDyJ85Wbl3ShnxQfJpl6tkxkerpvnStGW88stQcrg0tw05yf6ZG4xi6o+yRZLWk4TVuyRpIWLx8VFoHL4WH93R614y3JgsXIkHURxgSsS4IPt2ZNr0NTfDxw74lzzSk7qxIoFJCX6z3tgpcRh/j9lvlrSBRsylQAAAABJRU5ErkJggg==" },
{ title: "教程", icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAD4ElEQVRYR+1YXWgcVRg9350UpQ91d5NspIhE3UmqghQS3QqKqaDQ6osgYhUK+mBxkpYWoXlRqNSH4oMVutm2YlX6WKWiD33og11FSJEGxAdLMhsLFtLuJp0NrURMM/fIXXZkMk3qTEeDlVy4cO/wfec797vn/swVhErmkDsgFp4RIG8qyS4A+VY1lnVTRaRGoG6qCL7DdYx6u+yrAVTm4IWMdcf8gIZ6NC1WmJ+YTrb8yyOA/4kAfQBOE6gJ2CSkiGltWXUsAErYQaBThJ1sDkLyAJ8DMEWo/Q3ngSO5I+5D0DgB4GEA3wBSJ/S0gqoTvEzhZYille/ntaCzmRRIlwAmMc8CuKh9bJ/daVfCRE1bug5X89fJGsCPKOr4gvLHr+3onYkaLtVff/Tc2jl9V68FeZnkXhFsJ3Ec1O9S1pxsOPf/FAcnsGkvTRSp8Dogb6wR6aq9WTAz+VeRXNn9AsBaz7G3JgGO2ubK7gmQWyHqZ88pPJYS6xSAOc+xX4yS/VUo718ZLJTSBGgvVd+m4n6A73lOzzupsEaqQxTu9Rz73ihZah+bl9JIkoCZkrtbKRzUGntmh+wPk/hGbc1CVxbOeI7dXFNBMTK4gawxjhssGGQQIDrwNFixyGbL7hkBYhEOAJcja5IRZ+AEKg3H3mxsE2U2DvhyU/ePSCqJDFbJJshAIhkYzcbFjuosKoM0WLEX2G1DNi7RsN1yu0EarFiZTRPgf70bmItUkJzg4pJ4gd3sUIhOT3gjT5rZjtJkj1Z6XEH6Z5zCWOJD4e+OyKXuEbeq2dRkV0KzweCisczMmG+xLzIrRlbpAQLtImrIXP5BXtJaNf8Q/lNkg4TcFjIIk6XSuwVy7JYW2ErI4GYxEm1dq2QTZGDZzGbLrqvI4SuDPScT4N1gmi27wwIcAPRbntP7QSqskcltInrEc+xcGEdy5YmjZsvwBnv3RQN0lKt9PtAn9NcD1m+iWKNGTc+3/TC7577ZsH1uxD0mgldJfSCK1f3phTuv/r6wkeBGIe8O/AhVb4Ocnh4sVBdjje+jqOcbjt2/iGy2XN0i4CmIfCb0vyLUUwSebL3OGNspAhMtp3sEKLTaPwKoCPS3GvK0QHaC/BIiLxA8pIgKRbZA8ASIDS2fCQJTpi2CB8HmK4wpZ0GMao2vlcVt5pEDwEueY3++iKzp5MqTrwF8BaB5nBgF9VmqtnOWssZmdnRfCjus+/hizpr/oyj0ixC1CcDjANYZgg2nZ1cIq5+QihDfa82xtjl/bGZ4w7UwVubw+W6lVRFQRShsAptYMC86S830ov/yNDpbCd9Vsv9Wlv8E0mP+P0I4oqkAAAAASUVORK5CYII=" },
{ title: "关于", icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE3ElEQVRYR61Xa4hUZRh+3jOrK1G7M2fGtIug654xS1IqSIpCKKlMtCL3RyCx5YU940oKJmSQCxoUhOU232Sp+K/UH1mkGRiKGV0oumDFzhnTMipx58xgCO26c574zjmj42Vmzkrn38z3vO/7fO/9E0T8EluOtRuet4DkQoF0EEgBkgzEWRRgkEBePG+nnOWBwbW3/BNFtTQDJbP56RDpJfAUgPZm+PC8JMB7IPuLmfQvjWQaEkjk8huE0gugLVRyBsAXAhwmcYpi/K3/F3oTRTCB4D0QmQtibBVPYX+pJ/1iPRJ1CZjK2QVgkS8o8qlHbi6nhvaja8Zwoxu1bT1pxoaHngS4TIA7wxB95trp+68kd0UCpiocBzg5FFjq2tbWiK6/CJZQhWUCbglJDLp2evylei4jYKr8aUBSfmohNrNkd/x4NcarMglVeETAfcFvOeHanVNq9V1EwFT5w4DcpwGubTVN0NEQM5XDEL/bta2uqux5I2HCrQtuLvNKdufHUQyYbzm3soI59PBzudc6VE8moX69XVD5wdcv3FhNTJ+ALjWKfBlme+SYj88evbYirVruNt8wvT43M219PRKmcpYAeAfAGSFn6xINCChHEejR2e72dD4Y5eYaE+935hgxHLyAp+va6bA5XVmLmSscAPmAALmibdk+AVM5vwOY5AELy7b1YVQC120ZSI2pGKfP40V2uD2d3Y3k48pZYAAfAPjTta2bJJ49PsuQke8AlN1TQxPQ17jOL1VuKmeRAIsJDrh2ek1T8ruOjjUHWzXpNhHvbknmCitJvkHInpLd+XhTBf8DwFTOfgAPgVgtZtbZBsEzAqwr2tbLo9Xf/qZzhxBtjSrgUp1J5bxAYCOI7WIq5wiAe0EscTPWtqgEJuQK1w97XAXBKgFam1VArV4z6zwLge6un2sCOh4pwphfsqfujUIgofKbBaJ7+8wafJdrW7ujyR97VOB9BGBw1AT8IUW2VCqyJtaCQtWgERtz4+DyyX+NhgCJ01cdgnY10BGDcSzonPi2ZFt3RTHul30YAgKHrjoJE+q8G5t2wHpJSELpMlxBsh/gXtdOz496i4QqrBHw1aAFjy6Bq2UoZLfoYQIPP0EwPDJm3A1nlkxyo5Aws/m9EJnnYwUPuz3WJ4lcYQb/jf1RXjWlXFdHTSPyZGRKtRUf1QOFkOUlu/PtSASUcw5AS0BAdoDeOAF3Fu1pexrJJ9XAY4TxPsiv3Ex6djgNC+so3BA1mXQPOEeeqjVEcm0pkw5CUueLbzoeN1pH9PCaVb1s4IHNThtaoMfq9CheiGfzswwRrSgOcICM9ZUyU99t5jlTOZsAPFd70ZqFxOkRQgU51Xwh0aNYY6O2YFPluwHZ7keM7C5m0juC9Kn5ajfh/3MlM5UzG4AeQPpdsdW1raVVs5cvpVnnJAQ3R/VEM7fr84RyDgqgPfa158W6yis6fqtLIBT45sJOj9e9oZa+hqXVhIWZHVgPMV4KLsX+kp1e2ZCAPkzmCq+QfD4Efi/w+oqpc/uaPUzqcTGVsxrAa+H5bncEi7HSGmq4eiez+Sc8kd7QfVr2sqcZK97ZKGHwE67Fmyg0gmohj1SET0fa/f1tVtAFYm5UY1Fw/jCKAqxizGxhkgALabCDREpEkiSvGY2OWqyInPgPdzcwBtuCmgYAAAAASUVORK5CYII=" },
{ title: "退出登录", icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADd0lEQVRYR+2XS4hcRRSGv7o9pnHR4/TtnoVBhJDUBE2UiLrxEaISV+LCx+DaxBiqJxGi4iNrxQhGzKTLCYLiwoWOsxIRA5r4wo34IFEmXRnduFFmqmOycYaZKqmem9jT3u7b3bZkY8GFpuucU9/969SpcwWXeYjLvD59A8TarAR4W168kvGtS/2+yL8B8AlA/j8DKGmjF5RUaW8Xa9MRoKhrR+pqbH+WMqkKFI/NXcuKe1vADqtkqk1Jmz895G15MVWBBPBjrmC3fUz+2g4kNXiszSfA3UDNKrk5zbkLgNPAFuBTq+Q9XQMUtXlGwEvABbfC/ef2yZN9AUyZ63G8FyA8PFtX8lBanDUKjFR/2RaJ5c+BAvhHrRp7qx15lgLBb+R1c1PkCfG880Pbz1U2fN8abw1ArM0rwAFg2io53imBugEI/iVtnvPwInDYKvlkW4Dhw6fjofy6UwixPoqiW+f3bvxmEAAhRlyt/QzklxeXbjh/YKttjntJgWLVKCGoAu9aJR/JOj7dKtAA0OYNYLf3VOoVqVMBYl07BmKPJ7qvrjZ+OEiAkUmzI8pxAs+btiJ3pSugzYlw7kVu6LqFxzfMZgFkFaJm//LRuTEXuTPAV1bJO9ptwe9CMBrlR4bnd41eGCjAodmCK+TOA/NWydE2W2CCQYFlrrL7ZfjdccTaLCZ3QSHrLoiPmGGG+CPUFqvkcDuAINEYEVvsXvlTFkAv8/FqUfoxrbL+fQqSHADGrZLTvSyQZVuq1h7wQsx4OFlX8q5UBUraVDwc7aYIZS3YOl+smkkhmBBwcEHJUJQujSYFZm8U5H5ozDhusxPy614XSrNP9v8zYFtagWstxe8DDw5ShVjXXgbxNDBjlXyoFXINQFGfuVMQhcsDvHjKVjaFu6HvEU/VduLE8UY43Pa62vxFR4AwGToZgdjXOGJtmpFuiS4Wq3AZ1ZU8mOaX3hFpYwRsShx6PhWxNg9DoxcI4x/VLzUJW+libb4Ebk/+n8bxalZilvXZmx1uT7hTVmXnbF1J2Umxjl1xUZsXBDzfFOAjL3hHCL5jidU+bx3X4BqtV3jr8KymEH6y76a0mThJzCeS09HN9s943GtpCdd1DqQZlqfmbvHO3etgp4D1wNWAEILfvG88H+Q8x+cn5LfdUF606fvDpJdF+s6BQS3yP0AnBf4C4vh6MKas2UAAAAAASUVORK5CYII=" },
{ title: "退出平台", icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADd0lEQVRYR+2XS4hcRRSGv7o9pnHR4/TtnoVBhJDUBE2UiLrxEaISV+LCx+DaxBiqJxGi4iNrxQhGzKTLCYLiwoWOsxIRA5r4wo34IFEmXRnduFFmqmOycYaZKqmem9jT3u7b3bZkY8GFpuucU9/969SpcwWXeYjLvD59A8TarAR4W168kvGtS/2+yL8B8AlA/j8DKGmjF5RUaW8Xa9MRoKhrR+pqbH+WMqkKFI/NXcuKe1vADqtkqk1Jmz895G15MVWBBPBjrmC3fUz+2g4kNXiszSfA3UDNKrk5zbkLgNPAFuBTq+Q9XQMUtXlGwEvABbfC/ef2yZN9AUyZ63G8FyA8PFtX8lBanDUKjFR/2RaJ5c+BAvhHrRp7qx15lgLBb+R1c1PkCfG880Pbz1U2fN8abw1ArM0rwAFg2io53imBugEI/iVtnvPwInDYKvlkW4Dhw6fjofy6UwixPoqiW+f3bvxmEAAhRlyt/QzklxeXbjh/YKttjntJgWLVKCGoAu9aJR/JOj7dKtAA0OYNYLf3VOoVqVMBYl07BmKPJ7qvrjZ+OEiAkUmzI8pxAs+btiJ3pSugzYlw7kVu6LqFxzfMZgFkFaJm//LRuTEXuTPAV1bJO9ptwe9CMBrlR4bnd41eGCjAodmCK+TOA/NWydE2W2CCQYFlrrL7ZfjdccTaLCZ3QSHrLoiPmGGG+CPUFqvkcDuAINEYEVvsXvlTFkAv8/FqUfoxrbL+fQqSHADGrZLTvSyQZVuq1h7wQsx4OFlX8q5UBUraVDwc7aYIZS3YOl+smkkhmBBwcEHJUJQujSYFZm8U5H5ozDhusxPy614XSrNP9v8zYFtagWstxe8DDw5ShVjXXgbxNDBjlXyoFXINQFGfuVMQhcsDvHjKVjaFu6HvEU/VduLE8UY43Pa62vxFR4AwGToZgdjXOGJtmpFuiS4Wq3AZ1ZU8mOaX3hFpYwRsShx6PhWxNg9DoxcI4x/VLzUJW+libb4Ebk/+n8bxalZilvXZmx1uT7hTVmXnbF1J2Umxjl1xUZsXBDzfFOAjL3hHCL5jidU+bx3X4BqtV3jr8KymEH6y76a0mThJzCeS09HN9s943GtpCdd1DqQZlqfmbvHO3etgp4D1wNWAEILfvG88H+Q8x+cn5LfdUF606fvDpJdF+s6BQS3yP0AnBf4C4vh6MKas2UAAAAAASUVORK5CYII=" }
]);
ui.menu.on("item_click", item => {
switch (item.title) {
case "注册":
var AdenDeanLoginInfoSign = woolStorage.get("AdenDeanLoginInfoSign");
if (AdenDeanLoginInfoSign == null) {
threads.start(function () {
registerWindow(); //注册弹窗
});
return;
} else {
alert("您已经登录无序重复登录!");
}
break;
case "登录":
var AdenDeanLoginInfoSign = woolStorage.get("AdenDeanLoginInfoSign");
if (AdenDeanLoginInfoSign == null) {
threads.start(function () {
loginWindows();
});
return;
} else {
alert("您已经登录无序重复登录!");
}
break;
case "退出登录":
woolStorage.remove("AdenDeanLoginInfoSign");
toastWarn("退出成功!");
break;
case "日志":
app.openUrl(rootUrl + "/app/WoolUpgradeLog.html");
break;
case "检查更新":
threads.start(function () {
let titileAndVersion = ui.toolbar.getTitle();
let appNameAndVersionArray = titileAndVersion.split("v");
let appName = appNameAndVersionArray[0];
let appVersion = appNameAndVersionArray[1];
var url = rootUrl + "/app/WebService.asmx/CheckAppVersion";
var version = appVersion;
var res = http.post(url, { "appName": appName, "version": version });
var returnString = res.body.string();
let json = JSON.parse(returnString);
if (json.success == "true") {
if (json.data.upgrade == "true") {
app.openUrl(rootUrl + "/app/WebService.asmx/DownLoadWoolUIApk");
} else {
toast("已经是最新版");
}
} else {
toast("请求远端服务器出现异常!请稍后重试!");
}
});
break;
case "教程":
app.openUrl("https://blog.csdn.net/zy0412326/article/details/104767602");
break;
case "关于":
dialogs.build({
title: "关于",
positive: "确定",
items: ["薅羊毛专业版纯属个人爱好,如果涉及到侵权请通知作者,作者会尽快解决相应问题。作者邮箱:[email protected]"]
}).on("show", (dialog) => { }).show();
break;
case "退出平台":
ui.finish();
break;
}
});
//让工具栏左上角可以打开侧拉菜单
ui.toolbar.setupWithDrawer(ui.drawer);
}
/**
* 创建选项菜单(右上角)右上角菜单事件
*/
function initializeHeaderMenu() {
ui.emitter.on("create_options_menu", menu => {
menu.add("日志");
menu.add("打赏");
menu.add("教程");
menu.add("关于");
menu.add("退出");
});
ui.emitter.on("options_item_selected", (e, item) => {
switch (item.getTitle()) {
case "日志":
app.openUrl(rootUrl + "/app/WoolUpgradeLog.html");
break;
case "打赏":
app.openUrl(rootUrl + "/app/index.aspx");
break;
case "教程":
app.openUrl("https://blog.csdn.net/zy0412326/article/details/104767602");
break;
case "关于":
dialogs.build({
title: "关于",
positive: "确定",
items: ["薅羊毛UI版纯属个人爱好,如果涉及到侵权请通知作者,作者会尽快解决相应问题。作者邮箱:[email protected]"]
}).on("show", (dialog) => { }).show();
break;
case "退出":
ui.finish();
break;
}
e.consumed = true;
});
}
/**
* 初始化系统配置
*/
function initializeSDCardConfig() {
let appArrayFile = rootPath + "配置/" + "App集合.txt";
if (files.exists(appArrayFile)) {
let appNames = files.read(appArrayFile).split("\n");
videoArray = appNames;
ui.txtAppNameArray.setText(files.read(appArrayFile));
} else {
toastError("文件不存在,使用系统默认配置");
ui.txtAppNameArray.setText("文件不存在,使用系统默认配置");
}
//txtLoginInfoArray
ui.txtLoginInfoArray.setText("文件不存在");
}
/**
* 初始化配置数据
*/
function initializeData() {
var IsShowToast = woolStorage.get("IsShowToast");
if (IsShowToast != null && IsShowToast == "true") {
ui.switchIsShowToast.setChecked(true);
} else {
ui.switchIsShowToast.setChecked(false);
}
var WateForTime = woolStorage.get("WateForTime");
if (WateForTime != null) {
ui.txtWateForTime.setText(WateForTime);
}
var screenSileTimes = woolStorage.get("screenSileTimes");
var isShowConsole = woolStorage.get("isShowConsole");
if (screenSileTimes != null) {
ui.txtScreenSileTimes.setText(screenSileTimes);
}
var IsCloseApp = woolStorage.get("IsCloseApp");
if (IsCloseApp != null && IsCloseApp == "true") {
ui.switchIsCloseApp.setChecked(true);
} else {
ui.switchIsCloseApp.setChecked(false);
}
if (isShowConsole != null && isShowConsole == "true") {
ui.switchIsShowConsole.setChecked(true);
} else {
ui.switchIsShowConsole.setChecked(false);
}
var IsKeepOnline = woolStorage.get("IsKeepOnline");
if (IsKeepOnline != null && IsKeepOnline == "true") {
ui.switchIsKeepOnline.setChecked(true);
} else {
ui.switchIsKeepOnline.setChecked(false);
}
var SeparationOrSingleApp = woolStorage.get("SeparationOrSingleApp");
if (SeparationOrSingleApp != null && SeparationOrSingleApp == "true") {
ui.switchSeparationOrSingleApp.setChecked(true);
} else {
ui.switchSeparationOrSingleApp.setChecked(false);
}
}
//#endregion
//#region 初始化事件
function initializeEvent() {
ui.btnExecuteTasker.click(function () {
var SeparationOrSingleApp = ui.switchSeparationOrSingleApp.isChecked();
if (SeparationOrSingleApp) {
var appArray = mapSort(havedVideoChecked);//排好序列得app
if (appArray.length == 0) {
alert("分身模式下必须选中相应的app~请前往配置界面勾选要执行的分身~");
return;
}
} else {
let appArrayFile = rootPath + "配置/" + "Login集合.txt";
if (!files.exists(appArrayFile)) {
alert("切号模式下必须填写登录帐号和密码~");
return;
}
}
var isShowConsole = ui.switchIsShowConsole.isChecked();
var IsShowToast = ui.switchIsShowToast.isChecked();
var WateForTime = parseInt(ui.txtWateForTime.getText()) * 1000;
var IsCloseApp = ui.switchIsCloseApp.isChecked();
var IsKeepOnline = ui.switchIsKeepOnline.isChecked();
var consoleMessage = "不开启控制台";
if (isShowConsole) {
consoleMessage = "开启控制台";
}
var tipMessage = "确认执行吗?如果配置不正确请点击取消,修正参数达到想要的效果!";
confirm(tipMessage).then(value => {
//当点击确定后会执行这里, value为true或false, 表示点击"确定"或"取消"
if (value) {
threads.start(function () {
//在新线程执行的代码
auto.waitFor();
autoBrush(appArray, isShowConsole, IsShowToast, WateForTime, IsCloseApp, IsKeepOnline, SeparationOrSingleApp);
});
} else {
toastWarn("操作被取消了");
}
});
});
ui.btnSaveWoolConfig.click(function () {
woolStorage.put("isShowConsole", "" + ui.switchIsShowConsole.isChecked() + "");
woolStorage.put("IsShowToast", "" + ui.switchIsShowToast.isChecked() + "");
woolStorage.put("WateForTime", "" + ui.txtWateForTime.getText() + "");
woolStorage.put("IsCloseApp", "" + ui.switchIsCloseApp.isChecked() + "");
woolStorage.put("IsKeepOnline", "" + ui.switchIsKeepOnline.isChecked() + "");
woolStorage.put("SeparationOrSingleApp", "" + ui.switchSeparationOrSingleApp.isChecked() + "");
toastLog("系统配置保存成功!");
});
ui.btnSaveAppList.click(function () {
var appArrayFileName = "App集合.txt";
var configPath = rootPath + "/配置/";
let txtAppNameArray = ui.txtAppNameArray.getText();
if (!files.isDir(rootPath)) {
if (files.create(rootPath)) {
files.create(configPath)
}
} else {
files.create(configPath)
}
let configFullPath = configPath + "/" + appArrayFileName;
files.remove(configFullPath);
files.write(configFullPath, txtAppNameArray);//app集合
toastInfo("App集合文件保存成功!");
let appArrayFile = rootPath + "配置/" + "App集合.txt";
if (files.exists(appArrayFile)) {
let appNames = files.read(appArrayFile).split("\n");
videoArray = appNames;
ui.txtAppNameArray.setText(files.read(appArrayFile));
}
let newVideoItems = [];
havedVideoChecked = new Map();
for (let i = 0; i < videoArray.length; i++) {
let appName=videoArray[i]
let appIndex=parseInt(i)+1
let signMessage = "未签";
let signValue = getSignTime(appName);
let signColor = "#FF0000";
if (getDate() == signValue) {
signMessage = "已签";
signColor = "#228B22";
}
let row = { SignColor:signColor, AppName: appName, AppIndex: appIndex, IsSign:signMessage, done: false};
newVideoItems.push(row);
}
videoItems = newVideoItems;
ui.videoList.setDataSource(videoItems);
});
ui.allCheck.click(function () {
let newVideoItems = [];
havedVideoChecked = new Map();
for (let i = 0; i < videoItems.length; i++) {
havedVideoChecked.put(videoItems[i].AppName, videoItems[i].AppIndex);
havedVideoTimes.put(videoItems[i].AppName, videoItems[i].ExecTimes)
let row = { SignColor: videoItems[i].SignColor, AppName: videoItems[i].AppName, AppIndex: videoItems[i].AppIndex,IsSign: videoItems[i].IsSign, done: true };
newVideoItems.push(row);
}
videoItems = newVideoItems;
ui.videoList.setDataSource(videoItems);
});
ui.unAllCheck.click(function(){
let newVideoItems = [];
havedVideoChecked = new Map();
for (let i = 0; i < videoItems.length; i++) {
havedVideoChecked.remove(videoItems[i].AppName, videoItems[i].AppIndex);
havedVideoTimes.remove(videoItems[i].AppName, videoItems[i].ExecTimes)
let row = { SignColor: videoItems[i].SignColor, AppName: videoItems[i].AppName, AppIndex: videoItems[i].AppIndex, ExecTimes: videoItems[i].ExecTimes, IsSign: videoItems[i].IsSign, done: false, ExecTimesMessage: videoItems[i].ExecTimesMessage };
newVideoItems.push(row);
}
videoItems = newVideoItems;
ui.videoList.setDataSource(videoItems);
});
ui.btnSaveLoginList.click(function () {
var appArrayFileName = "Login集合.txt";
var configPath = rootPath + "/配置/";
let txtLoginInfoArray = ui.txtLoginInfoArray.getText();
if (!files.isDir(rootPath)) {
if (files.create(rootPath)) {
files.create(configPath)
}
} else {
files.create(configPath)
}
let configFullPath = configPath + "/" + appArrayFileName;
files.remove(configFullPath);
files.write(configFullPath, txtLoginInfoArray);//app集合
toastInfo("App登录帐号集合文件保存成功!");
});
//btnSaveLoginList
}
//#endregion
//#region 业务方法
/**
* 自动刷方法
*/
function autoBrush(appArray, isShowConsole, IsShowToast, WateForTime, IsCloseApp, IsKeepOnline, SeparationOrSingleApp) {
device.keepScreenDim();//保持屏幕常亮
/**
* 是否开启控制台,不建议开启偶尔会遮挡click事件
*/
threads.start(function () {
if (isShowConsole) {
console.show();
console.setPosition(0, device.height / 3);
console.setSize(device.width, device.height / 4);
}
});
let x1 = random(device.width * 0.2, device.width * 0.3);
let y1 = device.height * 0.72
let x2 = random(device.width * 0.2, device.width * 0.3);
let y2 = device.height * 0.12
let pressTime = 600;
let timesInterval = random(3000, 6000)
if (!SeparationOrSingleApp) {
toastInfo("切号模式")
let appName = "微博"
if (IsCloseApp)
stopApp(appName);
app.launchApp(appName);//只有一个快手极速版所以直接Launch就可以,不用包名
sleep(WateForTime);//等待splash时间手机不好长点
clickControl(text("不了谢谢"))
for (let i = 0, logins = loginInfoArray.length; i < logins; i++) {
let uNameAndPword = loginInfoArray[i].toString().split("@")
let userName = uNameAndPword[0]
let passWord = uNameAndPword[1]
login(userName, passWord)
clickControl(text("立即签到"))
text("关注").waitFor()
if (clickControl(id("redpacketSave"))) {
text("用户任务中心").waitFor()
swipe(x1, y1, x2, y2, pressTime)
sleep(timesInterval)
for (let i = 0; i < 6; i++) {
brushMicroBlog()
}
autoClickHeart()
autoClickHeart()
clickControl(text("领0.1元"))
clickControl(text("领0.01元"))
clickControl(text("领0.01元"))
if (text("用户任务中心").exists() && id("titleLeft").exists()) {
clickControl(id("titleLeft"))
}
} else {
toastError("click error")
}
logout(3)
}
} else {
toastInfo(SeparationOrSingleApp)
for (let i = 0, apps = appArray.length; i < apps; i++) {
let appName = appArray[i];
if (IsShowToast)
toastInfo("当前薅羊毛程序" + appName);//系统日志提示
app.launchApp(appName);//启动App
sleep(WateForTime);//启动App时候等待时间
adolescentWindows();//关闭青少年窗口
closeUpgradetWindows();//关闭升级提示框
clickControl(text("立即签到"))
if (clickControl(id("redpacketSave"))) {
text("用户任务中心").waitFor()
let signValue = getSignTime(appName);
if (getDate() != signValue) {
recordSignTime(appName)
stopApp(appName)
startApp(appName, WateForTime)
clickControl(id("redpacketSave"))
text("用户任务中心").waitFor()
}
swipe(x1, y1, x2, y2, pressTime)
sleep(timesInterval)
for (let i = 0; i < 6; i++) {
brushMicroBlog()
}
autoClickHeart()
autoClickHeart()
clickControl(text("领0.1元"))
clickControl(text("领0.01元"))
clickControl(text("领0.01元"))
} else {
stopApp(appName)
startApp(appName, WateForTime)
clickControl(text("立即签到"))
if (clickControl(id("redpacketSave"))) {
text("用户任务中心").waitFor()
let signValue = getSignTime(appName);
if (getDate() != signValue) {
recordSignTime(appName)
stopApp(appName)
startApp(appName, WateForTime)
clickControl(id("redpacketSave"))
text("用户任务中心").waitFor()
}
swipe(x1, y1, x2, y2, pressTime)
sleep(timesInterval)
autoReadMicroblog()
autoClickHeart()
autoClickHeart()
clickControl(text("领0.1元"))
clickControl(text("领0.01元"))
clickControl(text("领0.01元"))
}
}
}
}
if (IsKeepOnline) {
while (true) {
keepOnline();
// if (IsKeepOnline) {
// launchApp("凹音短视频");
// sleep(10000);
// if (IsCloseApp)
// stopApp("凹音短视频");
// home();
// }
}
}
}
function startApp(appName, WateForTime) {
sleepRandom3()
app.launchApp(appName);//启动App
sleep(WateForTime);//启动App时候等待时间
adolescentWindows();//关闭青少年窗口
closeUpgradetWindows();//关闭升级提示框
}
function autoReadMicroblog() {
if (clickControl(text("刷微博"))) {
sleepRandom3()
let x1 = random(device.width * 0.2, device.width * 0.3);
let y1 = device.height * 0.72
let x2 = random(device.width * 0.2, device.width * 0.3);
let y2 = device.height * 0.12
let pressTime = 600;
swipe(x1, y1, x2, y2, pressTime)
sleepRandom5()
back()
}
}
function autoClickHeart() {
if (clickControl(text("点赞"))) {
sleep(3000)
let likes = desc("喜欢").find();
// toastInfo(likes.length)
// for (let i = 0, controlNum = likes.length; i < controlNum; i++) {
// toastInfo(likes[i].bounds());
// }
if (likes.length > 3) {
let b = likes[2].bounds();
clickResult = click(b.centerX(), b.centerY());
sleep(random(1000, 1200));
}
sleepRandom5();
back();
}
}
function login(userName, passWord) {
if (clickControl(text("用帐号密码登录"))) {
setText(0, userName);
setText(1, passWord);
return clickControl(text("登录"));
}
else {
sleepRandom5();
if (clickControl(text("用帐号密码登录"))) {
setText(0, userName);
setText(1, passWord);
return clickControl(text("登录"));
}
return false;
}
}
function logout(times) {
for (let i = times; i < 0; i--) {
if (times == 0) {
return
}
logout_detail();
stopApp(appName);
}
}
function logout_detail() {
if (clickControl(text("我"))) {
if (clickControl(desc("设置"))) {
if (clickControl(desc("帐号管理"))) {
if (clickControl(desc("退出当前帐号"))) {
if (clickControl(desc("确定"))) {
sleepRandom3()
toastLog("退出成功");
return
}
}
}
}
}
}
/**
* 获取服务器任务
*/
function keepOnline() {
if (!device.isScreenOn()) {
device.wakeUp();
}
}
function brushMicroBlog() {
let x1 = random(device.width * 0.2, device.width * 0.3);
let y1 = device.height * 0.72
let x2 = random(device.width * 0.2, device.width * 0.3);
let y2 = device.height * 0.12
let pressTime = 600;
let timesInterval = random(3000, 6000)
if (text("刷微博").exists()) {
if (clickControl(text("刷微博"))) {
swipe(x1, y1, x2, y2, pressTime)
sleep(timesInterval)
if (clickControl(id("redpacketSave"))) {
swipe(x1, y1, x2, y2, pressTime)
sleepRandom3()
}
}
} else {
if (text("刷微博").exists()) {
if (clickControl(text("刷微博"))) {
swipe(x1, y1, x2, y2, pressTime)
sleep(timesInterval)
if (clickControl(id("redpacketSave"))) {
swipe(x1, y1, x2, y2, pressTime)
sleepRandom3()
}
}
} else {
clickControl(text("领取0.2元"))
clickControl(text("领取100积分"))
}
}
}
//#endregion
//#region 窗体方法
function loginWindows() {
var window = floaty.rawWindow(
<vertical id="fourPage" gravity="center" background='#80DEEA' >
<text text="{{softName}}" textSize="45sp" textColor="#FFFFFF" gravity="center" />
<text text="系统登录" marginTop="10" textSize="25sp" textColor="#A0FFFFFF" gravity="center" />
<vertical >
<input id="txtUserName" w="*" marginRight="30" marginLeft="30" singleLine="true" hint="账号" textColorHint="#dd000000" />
<input id="txtPassWord" inputType="textPassword" w="*" marginRight="30" marginLeft="30" singleLine="true" hint="密码" textColorHint="#dd000000" password="true" />
<button style="Widget.AppCompat.Button.Colored" id="btnLogin" text="登录" />
<horizontal gravity="center" >
<text id="Register" padding="16">注册账号</text>
<text id="closeApp" padding="16">退出系统</text>
</horizontal>
<horizontal gravity="center" >
<text id="txtErrInfo" color="red" />
</horizontal>
</vertical>
</vertical>
);
w = Math.floor(device.width)
h = Math.floor(device.height)
window.setSize(w, h)
window.setPosition(0, 0)
window.txtUserName.on("key", function (keyCode, event) {
log('keyCode=', keyCode)
if (event.getAction() == event.ACTION_DOWN && keyCode == keys.back) {
window.disableFocus();
event.consumed = true;
}
});
window.txtUserName.on("touch_down", () => {
window.requestFocus();
window.txtUserName.requestFocus();
});
window.txtPassWord.on("key", function (keyCode, event) {
log('keyCode=', keyCode)
if (event.getAction() == event.ACTION_DOWN && keyCode == keys.back) {
window.disableFocus();
event.consumed = true;
}
});
window.txtPassWord.on("touch_down", () => {
window.requestFocus();
window.txtPassWord.requestFocus();
});
setInterval(() => { }, 1000);
window.Register.click(function () {
window.close();
threads.start(function () {
registerWindow();
return;
});
});
window.closeApp.click(function () {
window.close();
ui.finish();
});
window.btnLogin.click(function () {
var message = threads.disposable();
threads.start(function () {
var DeviceId = device.getAndroidId()
var UserName = window.txtUserName.getText();
var Password = window.txtPassWord.getText();
let url_address = rootUrl + "/App/Login";
var response = http.post(url_address, {
"deviceId": DeviceId,
"userName": UserName,
"passWord": Password,
"loginType": 'code'
});
//let url_address = rootUrl + "/App/Login?deviceId=" + DeviceId + "&userName=" + UserName + "&passWord=" + Password + "&loginType=code"
//var response = http.get(url_address);
var json = response.body.json();
if (json.success == "true") {
ui.woolVideo.visibility = 0; //显示挂机按钮?deviceId=" + DeviceId + "&userName=" + UserName + "&passWord=" + Password + "&loginType=code
woolStorage.put("AdenDeanUserName", UserName);
woolStorage.put("AdenDeanPassWord", Password);
woolStorage.put("AdenDeanDeviceId", DeviceId);
woolStorage.put("AdenDeanLoginInfoSign", "true");
window.close();
toastInfo("登录成功!");
message.setAndNotify("登录成功!");
} else {
//通知主线程接收结果
message.setAndNotify(json.message);
}
});
window.txtErrInfo.setText(message.blockedGet());//主线程等待通知
});
}
function registerWindow() {
regWindow = floaty.rawWindow(
<vertical gravity="center" background='#80DEEA' >
<text text="{{softName}}" textSize="45sp" textColor="#FFFFFF" gravity="center" />
<text text="系统注册" textSize="25sp" textColor="#A0FFFFFF" gravity="center" />
<vertical >
<input id="txtInviteCode" w="*" marginRight="30" marginLeft="30" singleLine="true" hint="邀请码" textColorHint="#dd000000" />
<input id="txtMobileCode" inputType="phone" w="*" marginRight="30" marginLeft="30" singleLine="true" hint="手机号" textColorHint="#dd000000" />
<horizontal marginRight="30" marginLeft="30">
<horizontal layout_weight="1">
<input id="txtVerificationCode" w="*" singleLine="true" hint="验证码" textColorHint="#dd000000" />
</horizontal>
<text id="getVerificationCode" color="red" text="获取验证码" paddingTop="12" />
</horizontal>
<input id="txtPassWord" inputType="textPassword" w="*" marginRight="30" marginLeft="30" singleLine="true" hint="密码" textColorHint="#dd000000" />
<button style="Widget.AppCompat.Button.Colored" id="btnRegist" text="注册" />
<horizontal gravity="center" >
<text id="returnLogin" padding="16">返回登录</text>
<text id="closeApp" padding="16">退出系统</text>
</horizontal>
<horizontal gravity="center" >
<text id="txtErrInfo" color="red" />
</horizontal>
</vertical>
</vertical>
);
//textPassword
w = Math.floor(device.width)
h = Math.floor(device.height)
regWindow.setSize(w, h);
regWindow.setPosition(0, 0);
setInterval(() => { }, 1000);
regWindow.txtInviteCode.on("key", function (keyCode, event) {
if (event.getAction() == event.ACTION_DOWN && keyCode == keys.back) {
regWindow.disableFocus();
event.consumed = true;
}
});
regWindow.txtInviteCode.on("touch_down", () => {
regWindow.requestFocus();
regWindow.txtInviteCode.requestFocus();
});
regWindow.returnLogin.click(function () {
regWindow.close();
threads.start(function () {
loginWindows();
});
return;
});
regWindow.closeApp.click(function () {
let android_id = device.getAndroidId();
regWindow.close();
ui.finish();
});
regWindow.getVerificationCode.click(function () {
let inviteCode = regWindow.txtInviteCode.getText();
if (inviteCode == "") {
regWindow.txtErrInfo.setText("邀请码不能为空!");
return;
}
let mobileCode = regWindow.txtMobileCode.getText();
if (mobileCode == "") {
regWindow.txtErrInfo.setText("手机号码不能为空!");
return;
}
regWindow.txtErrInfo.setText("");//清空错误提示
countDown(60);
try {
var url = "https://login.taobao.com/member/login.jhtml";
var res = http.post(url, {
"TPL_username": username,
"TPL_password": password,
"MobileCode": mobileCode
});
} catch (error) {
regWindow.txtErrInfo.setText("获取验证码失败:" + error);
}
function countDown(seconds) {
if (seconds == 0) {
regWindow.getVerificationCode.setText("获取验证码");
return;
}
regWindow.getVerificationCode.setText(seconds + "S");
setTimeout(function () {
seconds--;
countDown(seconds);
}, 1000);
}
});
regWindow.btnRegist.click(function () {
var message = threads.disposable();
threads.start(function () {
let DeviceId = device.getAndroidId();
let inviteCode = regWindow.txtInviteCode.getText();
let UserName = regWindow.txtMobileCode.getText();
let verificationCode = regWindow.txtVerificationCode.getText();
let Password = regWindow.txtPassWord.getText();
let url_address = rootUrl + "/App/Register";
var response = http.post(url_address, {
"deviceId": DeviceId,
"userName": UserName,
"passWord": Password,
"inviteCode": inviteCode,
"inviteType": 'android',
"verifCode": verificationCode,
});
var json = response.body.json();
if (json.success == "true") { } else {
//通知主线程接收结果
message.setAndNotify(json.message);
}
});
regWindow.txtErrInfo.setText(message.blockedGet());//主线程等待通知
//regWindow.close();
});
}
/**
* app首页配置信息
* @param {app的名}} appName
*/
function getAppInfo(appName, deaufltIndex) {
let AppKey = appName + "AdenDean";
let AppInfo = woolStorage.get("" + AppKey + "");
if (AppInfo == "" || AppInfo == null) {
if (appName == "微视") {
let AppInfoArray = [deaufltIndex, "48", false];
return AppInfoArray;
} else if (appName == "秘乐短视频") {
let AppInfoArray = [deaufltIndex, "7", false];
return AppInfoArray;
} else if (appName == "凹音短视频") {
let AppInfoArray = [deaufltIndex, "6", false];
return AppInfoArray;
} else if (appName == "闪电盒子极速版") {
let AppInfoArray = [deaufltIndex, "45", false];
return AppInfoArray;
}
let AppInfoArray = [deaufltIndex, "60", false];
return AppInfoArray;
} else {
let appIndex = AppInfo.split("@")[0];
if (appIndex == "") {
appIndex = deaufltIndex;
}
let appExecTimes = AppInfo.split("@")[1];
if (appExecTimes == "") {
appExecTimes = 60;
}
let isCheck = AppInfo.split("@")[2];
if (isCheck == "") {
isCheck = false;
}
let AppInfoArray = [appIndex, appExecTimes, isCheck];
return AppInfoArray;
}
}
/**
* 拖动滑块
*
*/
function dragSlider() {
for (var i = 0; i < 0; i++) { sleep(1000); log(i); }
while (true) {
img = images.captureScreen();
if (img) {
log("截图成功。进行识别滑块!");
break;
} else {
log('截图失败,重新截图');
}
}
var x = discernSlidingblock(img, device.width) + 65
console.info("识别结果滑块X坐标:" + x);
if (x > -1) {
randomSwipe(拖动滑块x, 拖动滑块y, x, 拖动滑块y)
return true;
} else {
console.log("识别有误,请确认是否在滑块界面");
return false;
}
}
/**
* 计算滑块位置
* @param {图片} img
* @param {分辨率} ratio
*/
function discernSlidingblock(img, ratio) {
//创建识别变量
var temp, temp2, x, y, num, color, p, temp3, arr1;
//分析设备分辨率
if (ratio == 720) {
var tb = [348, 253, 691, 638, 81]
log("您的设备分辨率为:720p");
} else if (ratio == 1080) {
var tb = [463, 387, 912, 831, 125]
log("您的设备分辨率为:1080p");
} else {
log("当前设备分辨率不符合规范")
return -2
}
num = Math.ceil(tb[4] / 3.3 - 4);
//计算滑块位置
for (var k = 29; k <= 40; k++) {
temp2 = "";
color = "#" + k + "" + k + "" + k + "";
for (var i = 1; i <= num; i++) {
temp2 = temp2 + "0|" + i + "|" + color + ",";
temp2 = temp2 + i + "|0|" + color + ",";
temp2 = temp2 + "1|" + i + "|" + color + ",";
temp2 = temp2 + i + "|1|" + color + ",";
temp2 = temp2 + "2|" + i + "|" + color + ",";
temp2 = temp2 + i + "|2|" + color + ",";
}
x = 0;
while (x > -2) {
y = 0;
while (y > -2) {
temp = "";
for (var i = 1; i <= num; i += 2) {
temp = temp + "0|" + (tb[4] + y - i - 1) + "|" + color + ",";
temp = temp + (tb[4] + x) + "|" + i + "|" + color + ",";
temp = temp + (tb[4] + x) + "|" + (tb[4] + y - i - 1) + "|" + color + ",";
temp = temp + (tb[4] + x - i - 1) + "|0|" + color + ",";
temp = temp + i + "|" + (tb[4] + y) + "|" + color + ",";
temp = temp + (tb[4] + x - i - 1) + "|" + (tb[4] + y) + "|" + color + ",";
temp = temp + "1|" + (tb[4] + y - i - 1) + "|" + color + ",";
temp = temp + (tb[4] + x - 1) + "|" + i + "|" + color + ",";
temp = temp + (tb[4] + x - 1) + "|" + (tb[4] + y - i - 1) + "|" + color + ",";
temp = temp + (tb[4] + x - i - 1) + "|1|" + color + ",";
temp = temp + i + "|" + (tb[4] + y - 1) + "|" + color + ",";
temp = temp + (tb[4] + x - i - 1) + "|" + (tb[4] + y - 1) + "|" + color + ",";
}
temp = temp + temp2 + "0|0|" + color;
arr1 = temp.split(",");
var arr2 = new Array();
for (var i = 0; i < arr1.length - 1; i++) {
arr2[i] = new Array();
temp3 = arr1[i].split("|");
arr2[i] = [Number(temp3[0]), Number(temp3[1]), temp3[2]];
}
try {
p = images.findMultiColors(img, color, arr2, {
region: [tb[0], tb[1], tb[2] - tb[0], tb[3] - tb[1]],
threshold: (Math.floor(k / 10) * 16 + k % 10)
});
if (p) {
img.recycle();
return p.x
}
} catch (error) {
//出错
console.log("识别失败,错误原因:" + error);
return -1;
}
y = --y;
}
x = --x;
}
}
try {
img.recycle();
} catch (error) {
console.log("识别失败,错误原因:" + error);
}
return -1;
}
/**
* 真人模拟滑动函数 (滑块滑动)
* @param {起点x} sx
* @param {起点y} sy
* @param {终点x} ex
* @param {终点y} ey
*/
function randomSwipe(sx, sy, ex, ey) {
//设置随机滑动时长范围
var timeMin = 1000
var timeMax = 3000
//设置控制点极限距离
var leaveHeightLength = 500
//根据偏差距离,应用不同的随机方式
if (Math.abs(ex - sx) > Math.abs(ey - sy)) {
var my = (sy + ey) / 2
var y2 = my + random(0, leaveHeightLength)
var y3 = my - random(0, leaveHeightLength)
var lx = (sx - ex) / 3
if (lx < 0) { lx = -lx }
var x2 = sx + lx / 2 + random(0, lx)
var x3 = sx + lx + lx / 2 + random(0, lx)
} else {
var mx = (sx + ex) / 2
var y2 = mx + random(0, leaveHeightLength)
var y3 = mx - random(0, leaveHeightLength)
var ly = (sy - ey) / 3
if (ly < 0) { ly = -ly }
var y2 = sy + ly / 2 + random(0, ly)
var y3 = sy + ly + ly / 2 + random(0, ly)
}
//获取运行轨迹,及参数
var time = [0, random(timeMin, timeMax)]
var track = bezierCreate(sx, sy, x2, y2, x3, y3, ex, ey)
log("随机控制点A坐标:" + x2 + "," + y2)
log("随机控制点B坐标:" + x3 + "," + y3)
log("随机滑动时长:" + time[1])
//滑动
gestures(time.concat(track))
}
/**
* 计算滑动轨迹
*/
function bezierCreate(x1, y1, x2, y2, x3, y3, x4, y4) {
//构建参数
var h = 100;
var cp = [{ x: x1, y: y1 + h }, { x: x2, y: y2 + h }, { x: x3, y: y3 + h }, { x: x4, y: y4 + h }];
var numberOfPoints = 100;
var curve = [];
var dt = 1.0 / (numberOfPoints - 1);
//计算轨迹
for (var i = 0; i < numberOfPoints; i++) {
var ax, bx, cx;
var ay, by, cy;
var tSquared, tCubed;
var result_x, result_y;
cx = 3.0 * (cp[1].x - cp[0].x);
bx = 3.0 * (cp[2].x - cp[1].x) - cx;
ax = cp[3].x - cp[0].x - cx - bx;
cy = 3.0 * (cp[1].y - cp[0].y);
by = 3.0 * (cp[2].y - cp[1].y) - cy;
ay = cp[3].y - cp[0].y - cy - by;
var t = dt * i
tSquared = t * t;
tCubed = tSquared * t;
result_x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;
result_y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;
curve[i] = {
x: result_x,
y: result_y
};
}
//轨迹转路数组
var array = [];
for (var i = 0; i < curve.length; i++) {
try {
var j = (i < 100) ? i : (199 - i);
xx = parseInt(curve[j].x)
yy = parseInt(Math.abs(100 - curve[j].y))
} catch (e) {
break
}
array.push([xx, yy])
}
return array
}
/**
* 判断是否是凌晨 false可以继续执行
* @param {开始执行脚本的日期} execAutoBrushDate
* @param {函数调用层级} level
*/
function checkTimesIsZeroTime(execAutoBrushDate, level) {
//execAutoBrushDate="2020-6-4";
//let key = "HavedComputerDateIsExec" +execAutoBrushDate; //getDate();
let key = "HavedComputerDateIsExec" + getDate();
let HavedComputerDateIsExec = woolStorage.get("" + key + ""); //不存储记录每天的1点将无法执行
//toastInfo(key + "key的值" + HavedComputerDateIsExec);
//woolStorage.remove(key);
if (HavedComputerDateIsExec == null) {
//Null本地方存储未存值且不是第一天执行
if (execAutoBrushDate == getDate()) {
return false;//当天还不用执行
} else {
//说明当前日期大于执行日期
var date = new Date();
var hour = date.getHours();
if (hour == 0) {
print("第几次梦境" + level + "层");
if (level == 1) {
toastError("回到第一层梦境进入半夜时间并记录已经执行过")
woolStorage.put("" + key + "", "true");//记录一下 今天就再也进不来了
}
return true;
} else {
//toastError("日期不等且返回的应该是false")
return false;
}
}
} else {
if (HavedComputerDateIsExec) {
//toastInfo("今天已经计算过" + HavedComputerDateIsExec);
//今天已经计算过
return false;
}
else {
return true; //理论值是进不来的
}
}
}
/**
* 判断app今日时间否到达
* @param {app名称} appName
* @param {app执行时常 单位分钟} execTimes
*/
function computerExctueTime(appName, execTimes) {
let key = appName + storageSign + getDate();
let havedRunTimes = woolStorage.get("" + key + ""); //系统存储已经执行的时间
if (havedRunTimes == null) {
return false;
} else {
let havedMinute = (havedRunTimes / 1000) / 60;//读取到的时间是毫秒需要转换成秒,转换成秒后在转换成分钟
toastLog(appName + "已经执行" + havedMinute.toFixed(2) + '分' + "总计:" + execTimes + "分");
if (havedMinute < execTimes) {
return false;
} else {
return true;
}
}
}
//#endregion
//#region 公共方法
/**
* 休眠随机1秒至3秒
*/
function sleepRandom1() {
sleep(random(1000, 3000));
}
/**
* 休眠随机3秒至5秒
*/
function sleepRandom3() {
sleep(random(3000, 5000));
}
/**
* 休眠随机5秒至7秒
*/
function sleepRandom5() {
sleep(random(5000, 7000));
}
/**
* 休眠随机7秒至9秒
*/
function sleepRandom7() {
sleep(random(7000, 9000));
}
/**
* 点击UI上的控件
* @param {UI上的元素} element
*/
function clickControl(element) {
let clickResult = false;
try {
if (element.exists()) {
toastLog("准备click:" + element.findOnce().getText());
let clickable = element.findOnce().clickable();//是否可以点击
if (clickable) {
clickResult = element.findOnce().click();
sleep(random(2000, 3200));
} else {
let b = element.findOnce().bounds();
clickResult = click(b.centerX(), b.centerY());
sleep(random(2000, 3200));
}
}
return clickResult;
} catch (error) {
toastError("clickControl方法出现错误:" + error)
return false;
}
}
/**
* 元素对象
* @param {ID或name} obj
*/
function uiSelector(obj) {
let element = null;
try {
if (text(obj).exists()) {
element = text(obj);
return element;
}
if (desc(obj).exists()) {
element = desc(obj);
return element;
}
if (id(obj).exists()) {
element = id(obj);
return element;
}
} catch (error) {
return null;
}
}
/**
* 强制停止app
* @param {应用名称} appName
*/
function stopApp(appName) {
try {
openAppSetting(getPackageName(appName));
sleep(3000);
if (className("android.widget.Button").text("强行停止").exists()) {
className("android.widget.Button").text("强行停止").findOnce().click();
} else {
if (text("强行停止").exists()) {
text("强行停止").findOnce().click();
}
}
sleep(3000);
if (className("android.widget.Button").text("确定").exists()) {
className("android.widget.Button").text("确定").findOnce().click();
toastLog(appName + "已经停止!");
}
else {
if (text("强行停止").exists()) {
text("强行停止").findOnce().click();
toastLog(appName + "已经停止!");
} else {
if (text("结束运行").exists()) {
text("结束运行").findOnce().click();
sleep(500);
if (text("确定").exists()) {
text("确定").findOnce().click();
toastLog("MIUI9 Android7" + appName + "已经停止!");
}
}
}
}
} catch (e) {
toastLog(e);
}
}
/**
* 薅羊毛App悬浮框
*/
function woolFloaty() {
var window = floaty.rawWindow(
<relative id='main' layout_width="match_parent" layout_height="wrap_content" alpha="0.6" >
<img w="44" h="44" src="#ffffff" circle="true" alpha="0.8" />
<img id="img_logo" w="32" h="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADOElEQVRYR81XT0gUYRT/vQmxWTWp9Bhmh/4cOwR1KAq6BUVFGTW7ZYXhzEqXDkFCCkVQR90Rgyyc2VD7A0XHoK0unqpbEJRatzQlc2f8g/Nixp111l13v3WVmtPMx3u/95v3vfe930cQfEYfXKyqKJcPE6iB2dkOohoCNrvuDPwC8xiR9IXB/ckZ+3XtpZ4/ItBUyGimV93F66jFYZwhYGMh+xShCYnQR/PcUR7RP+fzyUvANtVbBGphYINI4KU2BEwyuENW9Nbl/JclYJvqO4D2ryRwtg+/lxX9QC6snAQsUx0lUM3qBF9AYfBYSNFrc2Qpc8k2tSEAW1czeABrWFZi9UHsjAzYhjoAolNrFDyVCn4ih/XTfow0AbfgALqxpsHT4HzbL0yPgNdqEg2utNqLJe12Bzm8121Rj8B0XNOZ0ZwXyOFGkDTs2RCfB3Ahw574Mhzpa2qtHsQ9efuf0LX+XEyl8e6m6lBl2Qgzqgv8SbqAJh9Gd5aVccYBIyuxwHZq4yhwaBHhtzU1V0d2XAuD0SuURocb5Yj+yLW1TdUASPFajNEVCsdU990yoteI+J4QHiFClqE9JcJJIQcgnYWk0XxEIunVQo9L+0JKx+ACMY0FsVziz8gy1A9EtFvUCYEsWKb2CYy5UDi2x/t7U71DoOuiWMz8kSxT+07AFlEnBLIwE9da55lnQ4p+9+eAWlk1S0IT0I/FwA+yTS0JIFQEAfhZmDau7mCen5UjnUPTca2bGU1F4QBWMQQSYGr3A8jhzoT/bse1Oji0eMQSvxEkYhWzBRkE3AA+CduIHlxyJggR8Lag6CJMRXKY2yvCepv7mTTUNonopuBfp828IrTNaB/ADQLOCVmJHRKwK6IVqd/dguMEPBcATjjMb4N2wQwE10WzwcAJSonNEVG95wcqdQsYmEjO2HXiw2hJikolQP4wcnFXMo5LIZA1jlPD5d8JkvSBsqpKeLmyzlTIWap4LRTx4tmfrYxzyvI1UsZZitgltvzFZDUVMmcq4eDm/L9XM5+lfzkFcFZAN3purt4D8Ljky2kwVa54lSvLjrKDYwBvy3U9B+gbSXhhT8293HTlvkui4PMXv9aNop02ZWsAAAAASUVORK5CYII=" gravity="center" layout_gravity="center" />
<img id="logo_click" w="*" h="*" src="#ffffff" alpha="0" />
</relative>
);
window.setPosition(0, device.height / 2)
setInterval(() => { }, 1000);
//记录按键被按下时的触摸坐标
let x = 0;
let y = 0;
//记录按键被按下时的悬浮窗位置
let windowX;
let windowY;
//移动窗口
//按下时长超过此值则执行长按等动作
let downTime = 500;
//记录定时执行器的返回id
let Timeout = 0;
window.setSize(100, 100);
window.main.setOnTouchListener(
function (view, event) {
switch (event.getAction()) {
case event.ACTION_DOWN:
x = event.getRawX();
y = event.getRawY();
windowX = window.getX();
windowY = window.getY();
//创建一个定时器用来定时执行长按操作。
Timeout = setTimeout(() => {
toast("薅羊毛线程已经被关闭!");
threads.shutDownAll();
Timeout = 0;
}, downTime);
return true
case event.ACTION_MOVE:
//移动距离过大则判断为移动状态
if (Math.abs(event.getRawY() - y) > 5 && Math.abs(event.getRawX() - x) > 5) {
//移动状态清除定时器
if (Timeout) {
//定时器存在则清除定时器。
clearTimeout(Timeout);
Timeout = 0;
};
//移动手指时调整悬浮窗位置
window.setPosition(windowX + (event.getRawX() - x), windowY + (event.getRawY() - y));
};
return true;
case event.ACTION_UP:
if (Timeout) {
//清除定时器。
clearTimeout(Timeout);
Timeout = 0;
//执行点击事件。
toast("点击");
};
return true;
}
return true
}
)
}
/**
* 贝塞尔曲线
* @param {坐标点} ScreenPoint
* @param {偏移量} Offset
*/
function bezier_curves(ScreenPoint, Offset) {
cx = 3.0 * (ScreenPoint[1].x - ScreenPoint[0].x);
bx = 3.0 * (ScreenPoint[2].x - ScreenPoint[1].x) - cx;
ax = ScreenPoint[3].x - ScreenPoint[0].x - cx - bx;
cy = 3.0 * (ScreenPoint[1].y - ScreenPoint[0].y);
by = 3.0 * (ScreenPoint[2].y - ScreenPoint[1].y) - cy;
ay = ScreenPoint[3].y - ScreenPoint[0].y - cy - by;
tSquared = Offset * Offset;
tCubed = tSquared * Offset;
result = {
"x": 0,
"y": 0
};
result.x = (ax * tCubed) + (bx * tSquared) + (cx * Offset) + ScreenPoint[0].x;
result.y = (ay * tCubed) + (by * tSquared) + (cy * Offset) + ScreenPoint[0].y;
return result;
}
/**
* 滑动(默认概率是百分之三十)
* @param {*} qx
* @param {*} qy
* @param {*} zx
* @param {*} zy
* @param {*} time
* @param {*} timesInterval
*/
function slideScreenDown(qx, qy, zx, zy, time, timesInterval, CurveBrushScreen) {
if (CurveBrushScreen) {
curveDown(qx, qy, zx, zy, time, timesInterval); //曲线概率
} else {
lineDown(qx, qy, zx, zy, time, timesInterval); //直线概率
}
}
/**
* 概率0-9 大于3的时候采用曲线概率 小于3的时候直线概率
*/
function randomFunction() {
return Math.floor(Math.random() * 10);
}
function curveDown(qx, qy, zx, zy, time, timesInterval) {
var xxy = [time];
var point = [];
var dx0 = {
"x": qx,
"y": qy
};
var dx1 = {
"x": random(qx - 100, qx + 100),
"y": random(qy, qy + 50)
};
var dx2 = {
"x": random(zx - 100, zx + 100),
"y": random(zy, zy + 50),
};
var dx3 = {
"x": zx,
"y": zy
};
for (var i = 0; i < 4; i++) {
eval("point.push(dx" + i + ")");
};
for (let i = 0; i < 1; i += 0.08) {
let newPoint = bezier_curves(point, i);
xxyy = [parseInt(newPoint.x), parseInt(newPoint.y)]
xxy.push(xxyy);
}
gesture.apply(null, xxy);
let randomMin = timesInterval * 1000;
let randomMax = (parseInt(timesInterval) + 2) * 1000;
let delayTime = random(randomMin, randomMax);
sleep(delayTime);
}
/**
* 屏幕向下滑动并延迟8至12秒
*/
function lineDown(startX, startY, endX, endY, pressTime, timesInterval) {
swipe(startX, startY, endX, endY, pressTime);
let randomMin = timesInterval * 1000;
let randomMax = (parseInt(timesInterval) + 2) * 1000;
let delayTime = random(randomMin, randomMax);
sleep(delayTime);
}
/**
* 按照指定概率随机上滑
* @param {*} startX
* @param {*} startY
* @param {*} endX
* @param {*} endY
* @param {*} pressTime
* @param {*} probability
*/
function randomUpSildeScreen(startX, startY, endX, endY, pressTime, probability) {
let randomIndex = random(1, parseInt(probability));
if (randomIndex == 1) {
swipe(startX, startY, endX, endY, pressTime);
delayTime = random(12000, 15000);
sleep(delayTime);
}
}
/**
* 连续下滑对上一个无兴趣
* 其实得和上滑做个排他,既然无兴趣不要在上滑
*/
function randomDownSildeScreen(startX, startY, endX, endY, pressTime, timesInterval, probability) {
let randomIndex = random(1, parseInt(probability));
if (randomIndex == 1) {
swipe(startX, startY, endX, endY, pressTime);
sleep(2000);
swipe(startX, startY, endX, endY, pressTime);
sleep(timesInterval);
}
}
/**
* 随机点赞
* @param {点赞ID}} view_id
*/
function randomHeart(view_id, probability) {
index = random(1, parseInt(probability));
if (index == 1) {
var target = id(view_id).findOnce();
if (target == null) {
return;
} else {
target.click();
sleep(1000);
}
}
}
/**
* 随机关注
* @param {控件ID} follow_view_id
* @param {概率} probability
*/
function randomFollow(follow_view_id, probability) {
index = random(1, parseInt(probability));
if (index == 1) {
var target = id(follow_view_id).findOnce();
if (target == null) {
return;
} else {
target.click();
sleep(1000);
}
}
}
/**
* 输出Tosat和Info日志
* @param {日志消息} messagge
*/
function toastInfo(message) {
writeLog(message, "info");
}
/**
* 输出Tosat和Error日志
* @param {日志消息} messagge
*/
function toastError(message) {
writeLog(message, "error");
}
/**
*
* @param {*} message
*/
function toastLog(message) {
writeLog(message, "log");
}
function toastWarn(message) {
writeLog(message, "warn");
}
/**
* 写日志,toast、consle和文件日志
* @param {日志内容} loginfo
* @param {日志等级} level
*/
function writeLog(loginfo, level) {
try {
var logName = getDate() + "_" + "Log.txt";
var logPath = rootPath + "/日志/";
let message = getTime() + "(" + softVersion + "):" + loginfo;
if (!files.isDir(rootPath)) {
if (files.create(rootPath)) {
files.create(logPath)
}
} else {
files.create(logPath)
}
let logFilePath = logPath + "/" + logName;
if (!files.exists(logFilePath)) {
files.create(logFilePath);
files.write(logFilePath, message + "\r");//写日志
}
else {
files.append(logFilePath, message + "\r");//追加日志
}
toast(message);
if (level == "log") {
console.log(message);
} else if (level == "info") {
console.info(message);
} else if (level == "warn") {
console.warn(message);
} else if (level == "error") {
console.error(message);
}
} catch (error) {
console.error("系统再写日志的时候出现错误若不影响使用请略过" + error);
}
}
/**
* 记录App签到时间
* @param {App名称} appName
*/
function getSignTime(appName) {
let key = appName + storageSign;
let value = woolStorage.get(key);
return value;
}
function Color(color) {
return android.graphics.Color.parseColor(color);
}
function GradientDrawable(orientation, color) {
var colors = [];
color.forEach(color => colors.push(Color(color)));
return new android.graphics.drawable.GradientDrawable(android.graphics.drawable.GradientDrawable.Orientation[orientation], colors);
}
/**
* 青少年窗口
*/
function adolescentWindows() {
if (text("我知道了").exists()) {
text("我知道了").findOnce().click();
}
if (text("知道了").exists()) {
text("知道了").findOnce().click();
}
}
/**
* 升级窗口
*/
function closeUpgradetWindows() {
if (text("直接无视").exists()) {
text("直接无视").findOnce().click();
}
if (text("忽略本次").exists()) {
text("忽略本次").findOnce().click();
}
if (text("稍候再说").exists()) {
text("稍候再说").findOnce().click();
}
if (text("以后").exists()) {
text("以后").findOnce().click();
}
if (text("以后更新").exists()) {
text("以后更新").findOnce().click();
}
}
/**
* 记录App签到时间
* @param {App名称} appName
*/
function recordSignTime(appName) {
let key = appName + storageSign;
let value = getDate();
woolStorage.put(key, value);
}
/**
* 记录App一次运行的时间
* @param {appName} appName
* @param {本次运行时间} recordTimes
*/
function appRunTimeRecord(appName, recordTimes) {
let key = appName + storageSign + getDate();
var havedRunTimes = woolStorage.get("" + key + "");
let value = "";
if (havedRunTimes == null) {
woolStorage.put(key, parseInt(recordTimes));
} else {
value = parseInt(havedRunTimes) + parseInt(recordTimes);
woolStorage.put(key, value);
}
}
function clearRunTime(appName) {
let key = appName + storageSign + getDate();
toastInfo(key);
woolStorage.remove(key)
}
/**
* 秒转换成小时
* @param {*} appCount
* @param {*} foreachCount
* @param {*} slideTimes
* @param {*} timesInterval
* @param {*} isExistsLongTimes
*/
function computerTime(appCount, foreachCount, slideTimes, timesInterval, isExistsLongTimes) {
let maxSecond = appCount * foreachCount * slideTimes * timesInterval;
let maxHour = maxSecond / 3600;
return Math.round(maxHour);
}
/**
* 获取当前时间格式yyyyMMdd
*/
function getDate() {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
if (month < 10) {
month = "0" + month;
};
var day = date.getDate();
if (day < 10) {
day = "0" + day;
};
return year + "-" + month + "-" + day;
}
/**
*
*/
function getTime() {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
if (month < 10) {
month = "0" + month;
};
var day = date.getDate();
if (day < 10) {
day = "0" + day;
};
var hour = date.getHours();
if (hour < 10) {
hour = "0" + hour;
};
var minute = date.getMinutes();
if (minute < 10) {
minute = "0" + minute;
};
var seconds = date.getSeconds(); //获取当前秒数(0-59)
var millisecond = date.getMilliseconds(); //获取当前毫秒数(0-999)
return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + seconds;
};
/**
* JS构建Map
*/
function Map() {
var obj = {};
this.put = function (key, value) {
obj[key] = value;//把键值绑定到obj对象上
}
//size方法,获取Map容器的个数
this.size = function () {
var count = 0;
for (var attr in obj) {
count++;
}
return count;
}
//get方法,根据key获取value的值
this.get = function (key) {
if (obj[key] || obj[key] === 0 || obj[key] === false) {
return obj[key]
} else {
return null;
}
}
//remove方法,删除方法
this.remove = function (key) {
if (obj[key] || obj[key] === 0 || obj[key] === false) {
delete obj[key]
}
}
//each方法,遍历方法
this.eachMap = function (callBack) {
for (var attr in obj) {
callBack(attr, obj[attr])
}
}
}
/**
* map排序(核心是冒泡有点笨)
*/
function mapSort(mapTask) {
var arr = [];
var result = [];
mapTask.eachMap(function (key, value) {
arr.push(parseInt(value));
result.push(key);
});
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - 1 - i; j++) {
// 相邻元素两两对比,元素交换,大的元素交换到后面
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//value交换key也得换
var keyTemp = result[j + 1];
result[j + 1] = result[j];
result[j] = keyTemp;
}
}
}
return result;//返回数组
}
/**
*点击一下屏幕
*/
function clickScreen() {
var x = device.width - device.width * 0.2;
var y = device.height - device.height * 0.2;
toastLog("点击屏幕" + x + ":" + y);
let clickResult = click(x, y);
toastLog(clickResult);
}
//#endregion