目前版本3.1.8  仅供学习使用!!!!!切勿用作非法用途,否则后果自负!

直接写这个东西 可能是有些唐突

因为你们可能不知道这是一个什么玩意 如果你想看过于这个Accessibility服务的一些资料

可以到 我的分类 下面去看

下面将直接进入正题

AccessibilityService 的出现原本为了帮助盲人 来那啥那啥和那啥的

没想到却被我们那啥那啥和那啥了

他使用方法需要手动到无障碍里面去开启 开启成功以后代码就开始运行了

集成的一般步骤就是

创建服务 继承AccessibilityService实现相关方法

package com.example.liuan.test;import android.accessibilityservice.AccessibilityService;
import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.Toast;import java.io.DataOutputStream;
import java.io.File;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Random;public class MyService extends AccessibilityService {private static final String TAG = "MyService";// 大多数的手机包名一样,联想部分机型的手机不一样private String[] packageNames = {"com.p1.mobile.putong"};int startFlag = 0;AccessibilityNodeInfo[] noteInfo = new AccessibilityNodeInfo[2];@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {if (event.getSource() != null) {findNodesByText(event, "继续探索");}switch (event.getEventType()) {case AccessibilityEvent.TYPE_VIEW_CLICKED:if (SpUtils.getBoolean(this, "reSet", false)) {SpUtils.putBoolean(this, "reSet", false);startFlag = 0;}if (startFlag == 0) {//记录正确startFlag = 1;noteInfo[0] = event.getSource();} else if (startFlag == 1) {//记录错误  只记录一次即可startFlag = 2;noteInfo[1] = event.getSource();}if (startFlag == 2) {autoClick();}break;}}private void autoClick() {try {String time = SpUtils.getString(this, "time", "1000");Thread.sleep(Integer.parseInt(time));} catch (InterruptedException e) {e.printStackTrace();}String time = SpUtils.getString(this, "like", "50");int percent = Integer.parseInt(time);
//随机数字 是1-100int random = new Random().nextInt(100) + 1;
//如果设置了百分之50  那么就是各一半
//如果设置了百分之10  那么就是点第一个 8   10Log.e(TAG, "onAccessibilityEvent:random " + random);Log.e(TAG, "onAccessibilityEvent:percent " + percent);if (random <= percent) {//第一次按键noteInfo[0].performAction(AccessibilityNodeInfo.ACTION_CLICK);} else {noteInfo[1].performAction(AccessibilityNodeInfo.ACTION_CLICK);}}@Overridepublic void onInterrupt() {startFlag = 0;}@Overridepublic void onDestroy() {super.onDestroy();startFlag = 0;}private void findNodesByText(AccessibilityEvent event, String text) {List<AccessibilityNodeInfo> nodes = event.getSource().findAccessibilityNodeInfosByText(text);if (nodes != null && !nodes.isEmpty()) {for (AccessibilityNodeInfo info : nodes) {if (info.isClickable()) {// 只有根据节点信息是下一步,安装,完成,打开,且是可以点击的时候,才执行后面的点击操作if ("继续探索".equals(text)) {info.performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}}}private boolean isTextExist(AccessibilityEvent event, String text) {List<AccessibilityNodeInfo> nodes = event.getSource().findAccessibilityNodeInfosByText(text);if (nodes != null && !nodes.isEmpty()) {for (AccessibilityNodeInfo info : nodes) {if (info.isClickable()) {// 只有根据节点信息是下一步,安装,完成,打开,且是可以点击的时候,才执行后面的点击操作if ("继续探索".equals(text)) {return true;}}}}return false;}}

我的思路 我简单来说一下 因为就算你层级用的没问题 但是却获取不到id

我就急中生智 使用了event.getSource() 把这个保存到数组 让自己点两下 然后开始模仿我的点击

这个方法不仅仅使用与这里 可以用作好多的地方

AccessiblityServices 要比脚本稳定 脚本存在一种情况就是脚本会崩溃 或者由于某个地方的偏移导致点击错误

这个从节点点击 彻底的解决了这个问题 无论开发者怎么骚操作 这里都可以点击 好气的

获取那个文件的id 或者文字什么的 用到了studio工具中的(本文代码风骚 没有用到这个)

G:\android\sdk\tools\bin\uiautomatorviewer.bat

as 3.0居然丧尽天良把他搞没了 反正我没找到 可能是没了

只能去sdk 目录下去找了 如果你记忆力够好的话找到你曾经安装的sdk目录

如果记忆力不够好 可以在alt+ctrl+s System Settings-->Android SDK看到你的sdk目录 找到打开即可

具体使用方法这里不做教程

四大组件逃不过的清单文件

application节点下
<serviceandroid:name=".MyService"android:enabled="true"android:exported="true"android:label="探探点击"android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"><intent-filter><action android:name="android.accessibilityservice.AccessibilityService" /></intent-filter><meta-dataandroid:name="android.accessibilityservice"android:resource="@xml/accessibility" /></service>

res/xml/accessibility.xml 没有这个目录请自行创建

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"android:accessibilityEventTypes="typeAllMask"android:accessibilityFeedbackType="feedbackGeneric"android:accessibilityFlags="flagDefault"android:canRetrieveWindowContent="true"android:description="@string/des"android:notificationTimeout="100"android:packageNames="com.p1.mobile.putong" />
<resources>
<string name="app_name">Test</string>
<string name="des">仅供学习使用,切勿乱搞,否则后果自负</string>
</resources>

MainActivity

package com.example.liuan.test;import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private static final String TAG = "MainActivity";private Button mBtOpen;private EditText mEtDelay;private EditText mEtLike;/*** 保存配置*/private Button mBtReset;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//        String apkRoot="chmod 777 "+getPackageCodePath();
//
//        SystemManager.RootCommand(apkRoot);initView();initData();}private void initData() {SpUtils.putString(this, "time", mEtDelay.getText().toString().trim());SpUtils.putString(this, "like", mEtLike.getText().toString().trim());SpUtils.putBoolean(MainActivity.this, "reSet", true);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {Toast.makeText(MainActivity.this, "半径", Toast.LENGTH_LONG);switch (keyCode) {case KeyEvent.KEYCODE_VOLUME_DOWN:case KeyEvent.KEYCODE_VOLUME_UP:Toast.makeText(MainActivity.this, "半径", Toast.LENGTH_LONG);mBtOpen.setText("已经关闭");return true;}return super.onKeyDown(keyCode, event);}private void initView() {mBtOpen = (Button) findViewById(R.id.bt_open);mBtOpen.setOnClickListener(this);mEtDelay = (EditText) findViewById(R.id.et_delay);mEtLike = (EditText) findViewById(R.id.et_like);mEtLike.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {initData();}});mEtDelay.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {initData();}});mBtReset = (Button) findViewById(R.id.bt_reset);mBtReset.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {default:break;case R.id.bt_open:initData();Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);startActivity(intent);break;case R.id.bt_reset:initData();break;}}
}

SpUtils

package com.example.liuan.test;import android.content.Context;
import android.content.SharedPreferences;/*** Created by liuan on 2018-04-28.*/public class SpUtils {private static SharedPreferences sp;public  static void getSharedPreference(Context context){if(sp==null){sp=context.getSharedPreferences("config",context.MODE_PRIVATE);}}public static void putString(Context context,String key,String value){getSharedPreference(context);sp.edit().putString(key,value).commit();}public static String getString(Context context,String key,String defValue){getSharedPreference(context);return sp.getString(key,defValue);}public static boolean getBoolean(Context context,String key,boolean defValue){getSharedPreference(context);return sp.getBoolean(key,false);}public static void putBoolean(Context context,String key,boolean value){getSharedPreference(context);sp.edit().putBoolean(key,value).commit();}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/bt_open"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开启/关闭服务" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/bt_reset"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="保存配置" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:orientation="horizontal"><TextViewandroid:layout_width="60sp"android:layout_height="wrap_content"android:gravity="center"android:text="延时:s"android:textColor="@android:color/holo_red_dark" /><EditTextandroid:id="@+id/et_delay"android:layout_width="match_parent"android:layout_height="match_parent"android:inputType="number"android:text="6000" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:orientation="horizontal"><TextViewandroid:layout_width="60sp"android:layout_height="wrap_content"android:gravity="center"android:text="喜欢:x/%"android:textColor="@android:color/holo_red_dark" /><EditTextandroid:id="@+id/et_like"android:layout_width="match_parent"android:layout_height="match_parent"android:inputType="number"android:text="94" /></LinearLayout><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"android:gravity="center"android:text="本软件仅供学习使用~!!!!\n开启服务 点击一个喜欢  再点击一个不喜欢 就开始了,如果点击喜欢 出现了继续探索,要进主页点重新设置 再点击 喜欢 和不喜欢~"android:textColor="@android:color/holo_red_dark"android:textSize="22sp" />
</LinearLayout>

开始方法 并不是直接点开启就开启了

第一步 开启探探点击的服务

第二步 打开探探先把其他的第一次引导的东西点完 然后 点一个喜欢 点一个不喜欢  再然后就能看到神奇的自动了

那天我本来想写了按音量键暂停的方法  后来发现没必要 暂停服务就行了

【10】AccessibilityService实现探探app的自动化喜欢和不喜欢+ [as 3.0如何打开层级调用uiautomatorviewer]相关推荐

  1. 探探自动右滑_利用AccessibilityService实现探探自动右划

    核心类: AccessibiliiiiiiiityService 简单的说,AccessibilityService 为了方便残障人士实现操作,可以监控app的运行,在界面上实现一些自动操作. 而 A ...

  2. 趣店探探等30款APP违规收集个人信息被通报

    [TechWeb]7月11日消息,全国信息安全标准化技术委员会.中国消费者协会.中国互联网协会.中国网络空间安全协会成立App专项治理工作组,对用户数量大.与民众生活密切相关的App隐私政策和个人信息 ...

  3. linux上的社交软件下载,探探交友app免费版-探探交友真实app下载v4.2.9.2-Linux公社...

    探探交友app是一款非常好用的社交聊天平台,使用方法非常简单,喜欢的话可以将名片向右滑,不喜欢的话就向左滑,只有相互喜欢的两人才可以开始聊天,避免了很多陌生人的消息,减少骚扰,探探交友app免费版非常 ...

  4. iOS APP开发项目案例(仿探探优化)--FaceFriend

    源码请到Github上下载Github源码. ios开发的基本知识:OC语言基础.Foundation基础框架.各个控件的UI界面编程(UITableView.UINavigationControll ...

  5. 继安卓市场下架后 探探App也在苹果商店下架

    [TechWeb]此前,陌生社交App探探遭遇各大安卓应用市场下架处理,原因是传播淫秽色情等违规违法信息. 目前,探探在苹果商店也遭到下架处理,苹果用户也搜索不到该App. 下架处理后,探探方面曾回应 ...

  6. 探探php模板下载,C3+H5+jQuery仿探探APP手机滑动切换特效

    C3+H5+jQuery仿探探APP手机滑动切换特效 这是一款很不错的jQuery仿探探APP手机滑动切换特效,手机端网页滑动翻页上一页下一页切换代码 /*移动动画*/ animateMove:fun ...

  7. 【SwiftUI模块】0004、SwiftUI-<探探App>喜欢手势卡片

    SwiftUI小功能模块系列 0001.SwiftUI自定义Tabbar动画效果 0002.SwiftUI自定义3D动画导航抽屉效果 0003.SwiftUI搭建瀑布流-交错网格-效果 0004.Sw ...

  8. 社交通讯产品-app榜单第三:探探

    ​ 一.产品介绍 1. 产品名称:探探 2. 产品版本:2.4.1 3. 体验平台:iPhone 6s 4. 体验系统:IOS 9.3.5 5. 产品定位: 探探是一种全新的相遇方式.以双向的&quo ...

  9. iOS:仿写探探App动画

    一.简单介绍 探探动画比较新颖,这也是它在众多交友软件中火热的一个特色.实现这种动画的方式可以有两种方式实现: 1.使用转场动画实现  2.使用CollectionView自定义布局实现, 此处我提供 ...

最新文章

  1. java 数据结构 无向图_数据结构-无向图
  2. 根据PI/4 = 1 - 1/3 +1/5-1/7+1/9求圆周率
  3. IHttpHandler的学习(0-2)
  4. windows10访问ubuntu samba共享文件夹报错:不允许一个用户使用一个以上用户与服务器多重连接(没解决)
  5. 机器学习之路:python k近邻回归 预测波士顿房价
  6. OAuth 2.0 的探险之旅
  7. 【Python 必会技巧】对字典按照键(key)或者值(value)排序
  8. AI时代的交换机什么样?华为CloudEngine 16800告诉你!
  9. 商品详情页html,天天生鲜商品详情页HTML+css
  10. jQuery教程06-基本筛选选择器
  11. python获取html文本框内容_Python3处理HTML获取所需内容
  12. 准备系统地学习一下Python
  13. 【资源】About Face4交互设计精髓,英文原版,彩色pdf下载
  14. factory setup 序列号_麻烦哪位大侠帮我把改一下setup factory 中生成16位注册码的脚本,(在线等)急!!!...
  15. PDF文件有密码怎么办?
  16. Android技巧之相对高度使用
  17. 微信小程序 - 引入第三方字体(使用网络字体艺术字)
  18. IT行业里的热门技术和项目分享
  19. JFrog Artifactory的数据备份与恢复教程
  20. 所谓的SaaS服务到底是什么?

热门文章

  1. PCI-DSS安全认证
  2. html中字号调节,设置页面字体大小 怎么调整ps界面字体的大小
  3. 亚马逊国际站通过ASIN获取商品信息
  4. 任正非语录(华为家事)
  5. 【挨踢人物传】小侠唐在飞:“剑胆琴心,成就网络大侠”(第四期)
  6. jvm-sandbox:基础了解及demo演示
  7. 面试题-redis数据类型
  8. Rstudio 修改RMD快捷键快速插入Python代码块
  9. 小米8对一加6打开软件速度测试,同为骁龙845,小米8、一加6吃鸡体验截然不同,问题出在哪?...
  10. Hyperic-Sigar简介