自己寫一個不會被微信封掉的Android搶紅包助手
轉載請註明出處:http://www.jianshu.com/p/19ddd41aa349
最近才剛開始用簡書來寫部落格,富文字編輯器用的太不習慣了,文字格式大家多包含吧!後面會改用Markdown編輯器。同時在編碼的過程中,參考了lendylongli關於搶紅包的演算法,感興趣的同學可以去看一下:https://github.com/lendylongli/qianghongbao。
又到年末,公司微信群裡各種紅包飛。對於我等手慢黨來說,如果有一個能在第一時間開啟紅包的輔助程式,那將是最大的福音。雖然第一個搶到的人,並不一定能搶到最大的紅包。但是,本著”生死看淡,不服就幹“的原則,let's do something!
一、前期準備
這裡主要用到兩個類:NotificationListenerService和AccessibilityService。還有一個工具:uiautomatorviewer。
NotificationListenerService
從API 18開始,用來監聽過濾通知欄中的資訊。當微信處於後臺,或者當前介面處於聊天列表的時候,有新訊息到來的時候,微信會已Notification的形式彈出。這裡我們要監聽微信彈出的Notification,並從中過濾出是“微信紅包”的資訊。如果是微信紅包,那麼就自動點開這條訊息,並把紅包開啟。
AccessibilityService
搶紅包主要用到的就是這個類。用來監聽介面變化,並執行本應該由使用者來執行的操作,比如點開聊天訊息,開啟紅包等。AccessibilityService,本是Android對於那些由於視力、聽力或其它身體原因導致不能方便使用Android智慧手機的使用者,提供的幫助這些使用者更加簡單地操作裝置,包括文字轉語音(不支援中文)、觸覺反饋、手勢操作、軌跡球和手柄操作的一個工具。只不過,我們們都用來做了一些更方便的事情。
uiautomatorviewer
這是Android SDK下的一個工具。用來掃描和分析 Android 裝置上當前顯示的 UI 元件。使用此工具檢查佈局層次結構,並檢視在裝置前臺顯示的 UI 元件屬性。主要用來在編寫自動化測試程式碼的時候,定位目標控制元件。
二、思路
先來看下手動搶紅包的流程:①從聊天列表中點選進入聊天詳情,然後點選微信紅包的訊息,彈出一個紅包的dialog,最後點選dialog中間的“開”完成搶紅包;②當微信在後臺時,有紅包訊息通知Notification彈出,點選通知,進入聊天詳情,然後和上一種方式一樣。
再來說下紅包助手的大致思路:開啟一個AccessibilityService來監聽手機介面的變化。如果有微信紅包,就用AccessibilityService模擬手動搶紅包的流程去完成搶紅包。如果微信彈出的Notification訊息是一條“微信紅包”的訊息,那麼去點選這個Notification,然後和上面一樣,模擬點選,完成搶紅包的整個過程。
三、動手開幹
1、先寫一個主介面,用來引導使用者初始化一些Service的一些操作,以及統計一下幫助使用者搶到的紅包數量。直接上圖
2、配置我們的AccessibilityService。主要分為3步:
①繼承AccessibilityService,並重寫onAccessibilityEvent方法。當服務啟動後,手機介面發上變化就會回撥這個方法。然後我們根據新介面中的內容來判斷是否有微信紅包,如果有的話就去模擬點選,去搶紅包。程式碼有些多,但都註釋的很清楚。
②在res下新建一個xml資料夾,然後新建一個名為luckymoney_service_config.xml的檔案,加上下面的程式碼
這裡主要的幾個引數:
accessibilityEventTypes是配置響應哪些操作包括單擊、長按、滑動等,這裡是響應全部型別的事件。
accessibilityFeedbackType是反饋給使用者的方式,比如語音和震動等。
notificationTimeout是相同型別的兩個事件之間的最小時間傳送到該服務。
packageNames是響應的程式的包名,這裡響應微信和QQ。
③在AndroidManifest中配置這個Service。下面的meta-data要指定上一步中定義的配置檔案
3、配置NotificationService
①繼承NotificationListenerService,並實現onNotificationPosted和onNotificationRemoved這個方法;
②在AndroidManifest中配置這個Service
4、至此基本配置就已經完成了。下面開始監聽微信紅包,並搶紅包。下面說一下從微信聊天列表中篩選出有紅包的聊天,以及聊天詳情中識別微信訊息中有微信紅包,並開啟紅包的核心程式碼。完整版程式碼,可以從文末連結下載。
下面以聊天列表、聊天詳情中點選紅包訊息,並在彈出的dialog上拆開紅包為例:
1、開啟SDK→tools→uiautomatorviewer,去解析當前手機介面的佈局。下面這個是點選拆紅包的button,可以獲取id,後面就可以通過這個id來查詢到這個button,並執行點選操作。
2、手機介面發生變化,比如收到一條紅包訊息。那麼AccessibilityService的onAccessibilityEvent會被回撥,並傳入一個AccessibilityEvent物件。通過這個物件中獲取當前手機螢幕的資訊。通過event.getClassName()獲取當前介面的類名,通過比對微信紅包介面的類名來確定當前進行到了搶紅包的第幾步,然後去執行相應的操作。微信紅包相關的類名如下:
"com.tencent.mm.ui.LauncherUI"是最近聯絡人列表和聊天詳情。當出現這個的時候,我們去判斷是否有紅包。
"com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI"是點選了紅包訊息,彈出了dialog,等待使用者點選“開”的介面。
"com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI"是拆完紅包後的介面。
這些類名在筆者當前6.5.4版本的微信上是這樣的。如果後期微信新版做出了更換,大家可以通過檢視手機堆疊頂層的類名來重新獲取。
3、在最近聯絡人列表和聊天詳情中查詢紅包的程式碼
4、點選彈出待拆的紅包dialog,去執行拆開的程式碼。這段程式碼有點多,而且微信不同版本下,拆開紅包的按鈕也不一樣。這裡大家可以去原始碼中檢視,註釋的很清楚。老版本中是“拆紅包”的文字,新版本是Button圖片。這裡從百度上找到一張圖片,引用一下,十分感謝。
總結
其實,學會了AccessibilityService的用法,可以讓手機為你做更多的事情。比如筆者也寫了一個支付寶自動掃福字的程式,雖然後來支付寶限定了每天只能掃出一張福,自動掃也沒什麼軟用。後期我會分享更多自己的東西,希望大家喜歡,有不足之處,敬請指出。
相關文章
- Android微信新版全自動搶紅包助手Android
- 關於年會搶紅包遊戲的一個思考遊戲
- 開發微信搶紅包軟體被罰475萬!
- 高仿微信搶紅包動畫特效動畫特效
- 微信小程式搶紅包實現效果微信小程式
- 如何設計一個搶紅包系統
- Android 輔助功能 -搶紅包Android
- Python教你全自動搶微信紅包Python
- 微信搶紅包遊戲繞過指定尾數遊戲
- Android 輔助功能 -搶紅包(二)Android
- Android 輔助功能 -搶紅包(三)Android
- 使用原生JS開發一個搶紅包的小遊戲JS遊戲
- 模擬微信搶紅包demo,生成隨機數隨機
- 微信小程式搶紅包高併發設計微信小程式
- 微信搶紅包遊戲繞過指定尾數(2)遊戲
- Android通過輔助功能實現搶微信紅包原理簡單介紹Android
- Android微信搶紅包輔助,核心程式碼只需要100+行Android
- 一步一步實現iOS微信自動搶紅包(非越獄)iOS
- 從Android手機的搶紅包外掛說起Android
- Redis秒殺系統架構設計-微信搶紅包Redis架構
- 新體驗,Apple Watch 也能搶微信紅包了!APP
- 用css動畫寫一個下紅包雨的效果CSS動畫
- 一個用tp後臺的微信助手網站網站
- 揭祕微信紅包架構、搶紅包演算法和高併發和降級方案架構演算法
- 分享一個自己寫的微信terminal版本終端,初步的功能完成
- 手寫一個自己的PromisePromise
- 想自己寫框架?不會寫Java註解可不行框架Java
- 奇葩程式寫的神一樣的註釋,被老闆看見會不會開出呢?
- 別人搶紅包,我們研究一下紅包演算法演算法
- 快過年了,如何使用 AutoJS 自動化快速搶微信紅包!JS
- 面試官讓我5分鐘內寫一個搶紅包程式,我和他說了半小時原理!面試
- 自己寫一個ProviderIDE
- 分享一個仿微信模擬器,可以快速模擬微信對話,微信紅包等。
- 一個PHP檔案搞定微信支付系列之現金紅包PHP
- 自己寫一個mvc框架吧(一)MVC框架
- QQ搶紅包外掛實現
- 分享一個自己寫的C# SqlHelperC#SQL
- 人均幾元被稱坑爹 百億紅包營銷戰只為搶入口