谈Android模拟点击的价跟落实

都迅猛发展的人们游戏很裁员,一直亏损。在ios爆发的时段,依靠几单最初上ios的产品赚了同桶金,那时ios用户简直便宜的比方格外,但是这样好之火候,人人不好好提升产品品质,认真做手游产品,反而坚持管团结之腐败产品移植到手机,然后因刷榜洗流量,把温馨之品牌都举行烂了,最后吃苹果全体下架,就只好一泻宏观里了。

“Action!”,欢迎收看这要大型扯淡实用类技术节目,《小明说故事》,大家吓我是小明!今天之主题是要孙膑、诸葛亮和曾国藩是程序员,会怎么落实Android模拟自动点击。此处可以生出Android手机广告,没有赞助商提供,我们累。很为难想象那么三各类历史大佬是程序员吧?且不说他们,我们撸清下Android模拟点击对咱有的值,“唯利是图”一下下蛋!

人们游戏在向移动游戏转型之经过中,根本就无晓该做呀活,原来还抄一抄袭其他产品,后来抄都抄不产生东西了。而研发上又要求自研自运,研发无去外边联运市场锻炼,和市场需求脱节,从而研发能力以及于联运市场冲击出来的厂商越差越远,而运营由于无市场以及平台的强大支持,也翻不起波浪,人人平台又要求自研的产品和另外厂商的出品一起竞争,谁得利就是有助于谁,人人的自研处境可想而知。

情考虑导图

陈一舟是一个怪好之贾,但他不是一个死好的CEO。他缺乏分享精神,在遇到许多作业的时节过于算计,导致本能开很之业务搁浅。”对于陈一舟,人人游戏的平位离职员工这样评价道。作为人们集团的开创者和领袖,陈一舟本人于人们游戏之学问熏陶挺有意思,无论对内对外,人人游戏还好似陈一舟的性情一样,始终是查封的。对内,陈一舟非常珍视团结手中的股金。

一.模拟点击的价值

  1. 有这样种情况,手机邮件每天都出很多邮件,邮件里为闹一些非思去押或者是晚点了的无念邮件,莫名的强迫症都想去丢那些罪恶的小红点,我都懒得的点击全选设置成已读,如果出只机关点击该多好;
  2. 而起如此种状况,有只手游我可怜欣赏打,但是升级来老缓慢,刷怪有深平淡,如果出个小他挂扶自己点击,自己戏其他的从去该多好?这时,你是休是怀念报“嗯,是的,最好有个援助点击微信红包啊的即实际是不过好极好之了”。
  3. 最后这样的状态,尽管我们累,尽管我们考试想带小抄作弊,但咱呢是会立在自然界中心呼唤爱的嘛。对于小人不方便的手机使用人群确实要用利用一些手机功能,模拟点击是不是特意有善。爱,又是大半地方的,在你们的TA手机上只要是受自己之音就是活动点击打开,然后播放一句“亲爱的,我来了,你在啊?”,又是大抵浪漫之工作。

吓,模拟点击的值虽旗帜鲜明了,基本是以下3碰:

1. 不论是障碍爱心服务。[善还是扫除在首先各项比恰当]
2. 重复自动完成一定日常以。
3. 作弊外挂。[难免有若干小兴奋吧?]

人们游戏离职员工如此感叹:“尽管以了赔偿金,可有自人们离职的总人口绝非一个说好话,所有合作伙伴都不曾再同次等合作的。你看人们有钱之上周围环绕了一致积聚公司,现在还有吗?树倒猢狲散。说白了就是是拿好了孤立了,在店铺内部管理层孤立了员工,在市面及孤立了所有合作伙伴。”

二.MotionEvent实现学点击

纵使这么,人人游戏最终沦为了汪洋大海中的同等叶片孤舟,日新月异的游乐圈内,已经鲜少有人会提起她,和它已经的明。

1. 兑现原理

1)获取给点击的View。
2)模拟点击事件MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP。

离职员工:自家于众人做了个别年多,对众人游戏知要比厚吧,人人游戏起家是赶上了页游的爆发期,中间赶上了移动游戏的首先波爆发期,但是片糟这样好之火候,都蝉联乏力,只能说这店铺战略暨体制及用人都是出死题目的。在页游领域,要依赖人人网做平台,但众人的流量略之很,对外扩充又困顿,自研的产品又不错过放联运,跟不上广东帮扶之韵律,在研发上无失去读书页游领域的红旗产品,跑去学畅游的僵化体制,又是内网研发而是强调流程,节奏缓慢的设稀。

2. 兑现过程

啊,冷落了历史三各项大佬挺久了。有请求鬼谷先生得意弟子孙膑!
1)孙膑瞒天过海

自打孙膑被同窗庞涓嫉妒猜忌而给罗织落得一个膑刑(他从易只给挑了膝盖骨),庞涓以掩盖他的罪恶和野性,把孙膑供养起来了想效仿有孙膑从鬼谷先生取得的《孙子兵法》,后来孙膑于旁观者得知这周的吃苦都是庞涓所吗,除了彻底与无奈外,还是想念不久逃离庞涓的铁蹄。
就算如此状况下,孙膑来了同等致孙子兵法的瞒天过海,装疯卖傻骗过了庞涓不再逼他默写孙子兵法同时为削弱去对协调备,最后在一个夜黑风高的晚受齐国使臣淳于髡救走。

①.孙膑逃离就是似乎一不好MotionEvent事件。
②.装疯卖傻就似乎装点击触动MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP事件

2)Show Code

//孙膑瞒天过海
private void manTianGuoHai(View view, float x, float y) {

    long downTime = SystemClock.uptimeMillis();

    //装疯
    MotionEvent downEvent = MotionEvent.obtain(downTime, downTime,
            MotionEvent.ACTION_DOWN, x, y, 0);
    downTime += 1000;

    //卖傻
    MotionEvent upEvent = MotionEvent.obtain(downTime, downTime,
            MotionEvent.ACTION_UP, x, y, 0);

    view.onTouchEvent(downEvent);
    view.onTouchEvent(upEvent);
    downEvent.recycle();
    upEvent.recycle();
}

2)查看效果

Motionevent模拟点击

嗬哎喂,这吗实行。我哉装作一个傻卖个萌什么的!现在且盛行语音支付,如果有点明捡到志玲姐姐的无绳电话机,我决然要是跃跃欲试它手机语音支付,对正值志玲姐姐的无绳电话机娇滴滴的呐喊“萌萌站起来,加油,萌萌站起”。那为人兄,嘿哄,呕吐袋已备了以座椅右边!!

借着有志玲姐姐语音的胜德地图导航,我们回到了三国赤壁。正好碰到孔明先生。“晚生小明,久负诸葛先生大名!”,孔明见短发短袖短裤短腿短拖鞋的小明惊悚道:“何方妖怪?”,“噗~~

页游领域率先没有建由平台,别的页游平台不计成本扩张时,人人游戏之平台不要跟人们网平台捆绑,没有成立从协调之用户平台,人人网用户量级太小,没有用户量运营为捉襟见肘。而研发及还要要求自研自运,研发无失去外边联运市场锻炼,和市场需求脱节,从而研发能力跟当联运市场冲击出来的厂商越差越远,而运营由于没市场与平台的精锐支持,也翻不由猥亵花。

三.AccessibilityService实现仿点击

每天最特异互联网科技讯,与众不同之科技盛宴、犀利点评。

1. 基本概念

AccessibilityService是Android提供有少数障碍手机人群利用的帮忙服务,可以助用户实现点击屏幕等部分扶助。是一个死有易的劳务。
法定对斯职能介绍如下:

Many Android users have different abilities that require them to
interact with their Android devices in different ways. These include
users who have visual, physical or age-related limitations that
prevent them from fully seeing or using a touchscreen, and users with
hearing loss who may not be able to perceive audible information and
alerts.

立马关注【微信公众号:科技之窗(techwindow)】

2. 贯彻原理

1)通过resource-id获取相应的View。

nodeInfo.findAccessibilityNodeInfosByViewId(resId);  

2)或者经带text属性的View。

nodeInfo.findAccessibilityNodeInfosByText(text);

3)执行AccessibleService的指定方法实现点击。

targetNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);

3. 实现过程

1)诸葛亮草船借箭

本条大家再也熟悉不过了,舌战群儒后的草船借箭啊。

周瑜说“我此只有船与海军,我从不‘贱’,孔明兄还是你来‘贱’吧!”,孔明君子的身何贱的出啊,“短日使自我‘贱’,可以,你我合作可否?”。“行,只要您用出‘贱’来,我同意,立下下军令状吧”周瑜得意挑衅。智比天高之智囊想“我以未作‘贱’,还是找个‘贱’人来借一将吧!”

如此这般美极了吧,曹操这样多‘贱’,草船使过来了,抖一抖‘贱’掉了平等船只,拿去!

①.舌战群儒后底协作却曹操好比AccessibleService服务。
②.周瑜提供船跟海军就是现实性的findAccessibilityNodeInfosByViewId(resId)findAccessibilityNodeInfosByText(text)
③.诸葛亮去敲鼓正是performAction(AccessibilityNodeInfo.ACTION_CLICK);

2)如何得到resource-id或text
①.如何你是获取自己运的resource-id,那即便是布局xml定义的@id/shuijun或者@+id/chuan
②.人家的软件,那就是经过dump出view层级outline查找出resource-id或text。

dump页面分析

3)申明用的劳务要求
智者要说明自己得以进军用船。
①click_config.xml文件配置

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service    xmlns:android="http://schemas.android.com/apk/res/android"
    android:description="@string/click_auto"
    android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged"
    android:packageNames="com.youmi.android.addemo"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:notificationTimeout="100"
    android:accessibilityFlags=""
    android:canRetrieveWindowContent="true"/>

②AndroidManifest.xml文件配置

<service
    android:label="@string/app_name"
    android:name="com.minggo.autoclick.ClickService"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
    <intent-filter>
         <action android:name="android.accessibilityservice.AccessibilityService"/>
    </intent-filter>
    <meta-data
        android:name="android.accessibilityservice"
        android:resource="@xml/click_config"/>
</service> 

4)授权使用辅助劳动使
协作达成,又比方授权为诸葛亮办事才实施。

授权启动辅助服务

5)Show Code
最终就横齐鲁肃去借箭

//借箭(点击)
private void performClick(String resourceId) {

    Log.i("mService","点击执行");

    AccessibilityNodeInfo nodeInfo = this.getRootInActiveWindow();
    AccessibilityNodeInfo targetNode = null;
    targetNode = findNodeInfosById(nodeInfo,"com.youmi.android.addemo:id/"+resourceId);
    if (targetNode.isClickable()) {
        targetNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
    }
}


//调用兵力(通过id查找)
public static AccessibilityNodeInfo findNodeInfosById(AccessibilityNodeInfo nodeInfo, String resId) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
        List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByViewId(resId);
        if(list != null && !list.isEmpty()) {
            return list.get(0);
        }
    }
    return null;
}

//调用船只(通过文本查找)
public static AccessibilityNodeInfo findNodeInfosByText(AccessibilityNodeInfo nodeInfo, String text) {
    List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(text);
    if(list == null || list.isEmpty()) {
        return null;
    }
    return list.get(0);
}

6)查看效果图

Accessibility服务点击

‘贱’周瑜还是用到了十万,不过那口来到喉咙沿的老血差点没喷出来。估计周瑜恨不得借这次庆功约诸葛亮到自身澡堂,赠与外一个,能啊而的人家提供24时到保护之舒肤佳。

这样一起享半边天的光阴估计是匪长久之,很快就会见崩溃合作来得翻天覆地,天翻了咱回来地上吧!人生多变啊,不久拿同时起要“蓝蓝的天空~哎呀!”,顿悟不要逆天,上天要得以的,心情大好,去抢个头还开吧。

四.指反射实现仿点击

1. 基本概念

JAVA反射机制是以运作状态被,对于随意一个近乎,都能理解是类似的有所属性和办法;对于自由一个靶,都能调用它的任性一个方法和特性;这种动态获取之音讯与动态调用对象的办法的效益称为Java语言的反射机制。

只顾:反射本身是负面向对象的包装原则的,所以它们来破坏性;反射被下呢是好普遍的Gson,Afinal框架,Spring依赖注入注解等等。两面性看待这个机制,切勿死板。

2.基本操作

1)获取实体类型

Class clazz = spotManager.getClass();

2)获取类的变量

Field f = clazz.getDeclaredField("F");
f.setAccessible(true);//加上这个才能读取private属性

3)获取变量值

o oInstance = f.get(spotManager);

3. 贯彻过程

1)曾国藩反间计
《曾整容发廊》眼前一亮啊,进去剃个头。“客官,老生看而天堂饱满,眉清目秀…”,“哎哟~您老应该就是是早就国藩,曾大人吧,晚生小明,失敬失敬啊?辣椒来同样根不了,要无我呼吁而吃臭豆烂好不咯?”。曾大人舔舔舌头,“好,我们先去吃臭豆腐,到此处不吃臭豆腐等白来。”,“曾大人,可为提出口你怎么策反韦俊呢?”,“小明,我们无尽走边聊”…

“天京事变”,韦俊被二独韦昌辉牵连,随时会受被回问斩。
韦俊好猎及博弈,我于康福去山顶等客跟之相遇,再和他下棋并且使赢他。棋下了一致峰半独月了,终于逮到机会,天国来旨要求韦俊回京(南京),康福说他,并且挑明自己之位置,表达自己本着客的垂青和恳邀之完全。
如此这般的状况,他摘了我,并报他们打战之术,我记下为“长毛战术”。池州即使是自己涤生的了。

“曾大人,您为晚生佩服不已,康福他正在~么厉害!晚生寻他千百度过,那人倒无以灯火阑珊处撒!”。曾大人沉思一下,“这,,,你得问唐浩明咯!”。。。

①韦俊潜在反的可能性就是反光机制破坏性。
②韦俊好猎好下棋就是边暴漏让人口仿佛的spotManager.getClass()f.setAccessible(true);
③韦俊对康福暴漏自己身份也不得不是放开下手中的剑为明目张胆策反o oInstance = f.get(spotManager);

2)如何找到要反射的杀实体
若果测策反韦俊,不可知走错山头了,要不然只能演一出“皇上,你还记那时候大明湖畔的夏雨荷吗?”。这不过重头戏啊,我们好找找山头先。

五.分析有米插屏广告

重整同样块上还无是自家打下来的,我们来抱天意吧。找找策反大道,看能免能够得道成仙。

1. dump瞬间有米插屏广告页面

起米插屏广告.png

咱俩由图中不得不发现横屏广告的webview(得到此早已足以就此事先少种植方式实现点击是地方,干你想干的转业),但不曾插屏广告view的层级信息。天无绝人之路,好戏还以后面。

2相反美高梅4688.com编译查找位置

1)确定启动广告类入手

btnShowSpot.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // 展示插屏广告,可以不调用预加载方法独立使用
            //从这里入手,分析插屏广告代码,找到对应的广告view
            SpotManager.getInstance(mContext)
                    .showSpotAds(mContext, new SpotDialogListener() {
...

规定是当SpotManager类里边折腾。
2)反编译SpotManager
①看看大概有啊性质:

private o F;
protected SplashView n;

当下有限只属性最为可能,其他是String,int,boolean属性。Splash顾名思义是闪屏这个是开屏广告,先留在,分析o
F这个地。

相反编译找到调用了b方法

②接着我们进入a方法被

a方法中的显要消息

果真有o F这个实例新增与用k方法。
3)反编译o类中翻属性

反编译o类

韦俊放下剑及康福去变现都大人吧,一切还结束了。放下屠剑立地成仁吧。

3. 瞄准对象反射带起

/**
 * 1.通过反编译[studio自带有]查看分析o F(o混淆后的类名称,F是o的实例)是广告实例。
 * 2.o类中的变量w是Imageview类型。
 * 3.就以上足够可以获取插屏广告图片实体,逐一反射获取对应的属性值。
 * 4.扩展,如果反编译出现很多属性,那样编写一个反射遍历其中属性,逐一暴力破解。
 */
private void getO(){
    SpotManager spotManager = SpotManager.getInstance(mContext);
    Class clazz = spotManager.getClass();
    Field f;
    try {
        f = clazz.getDeclaredField("F");
        f.setAccessible(true);
        Class deClazz = f.getType();
        Log.i("mService","F类型-->"+deClazz.getSimpleName());
        if(f.get(spotManager)==null){
            Log.i("mService","广告类为空");
        }else if(f.get(spotManager) instanceof o){
            Log.i("mService","是统一类型");
            o adO = (o) f.get(spotManager);
            Class oClazz = adO.getClass();
            Field imgField = oClazz.getDeclaredField("w");
            imgField.setAccessible(true);

            if (imgField.get(adO) instanceof ImageView){
                Log.i("mService","属性m是Imageview");
                final ImageView adImageView = (ImageView) imgField.get(adO);
                Log.i("mService","广告image-->"+adImageView.getId());
                if (adImageView==null){
                    Log.i("mService","广告image 为null");
                }else {
                    if(adImageView.isClickable()){
                        Log.i("mService","广告image可以点击");
                    }else{
                        Log.i("mService","广告image不可以点击");
                    }
                    Log.i("mService","广告宽高-->"+adImageView.getLayoutParams().width+","+adImageView.getLayoutParams().height);

                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {

                            setSimulateClick(adImageView,adImageView.getWidth()/2,adImageView.getHeight()/2);
                        }
                    },3000);
                }
            }
            //adImageView.setDrawingCacheEnabled(true);
            //adImageView.getDrawable();

            //ImageView imageViewxml = (ImageView) findViewById(R.id.imageView);
            //imageViewxml.setImageDrawable(adImageView.getDrawable());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

4. 查看效果

映出米插屏广告自动点击效果图

“曾大人,难怪你的一世就比如开挂似的,你磕不上天啊!!”话音未落,曾大人胸口中央一团紫光一闪一扭,“叮咚,叮咚,叮咚…”哇还会见响起,“嚓~”的平等名誉都大人不留一丝青烟冲向前说蒙。

六.总与壮大

1. 一旦上是你们家之就直瞒天过海。
2. 假如上半凡是你们家的即使草船借箭。
3. 要是上同你没半毛钱关系之尽管反间计。
铭记了,我向也没有提倡大学生专门是电脑专业的专门是来班长一岗位的校友,组织班上同校为这种方式赚取得班会费哈。因为自己大学之召开班长期间即没有举行。
剧目到了尾声了,此处应该生出掌声。噼里啪啦…谢谢,谢大家,让咱再次为重的掌声感谢今天份量级嘉宾孙膑,诸葛亮与曾国藩先生,各位老师慢倒~~!

七.源码地址

https://github.com/minggo620/AndroidAutoClick
谢谢收看这期大型扯淡实用技术类节目,《小明说故事》。哦,忘了~~曾大人,您还当也?您还不曾给自己剃头呢!!!

【原创出品 未经授权 禁止转载】
【欢迎微友分享转发 禁止公号等未经授权的转载】

微信公众号:minggo_dev

发表评论

电子邮件地址不会被公开。 必填项已用*标注