Androidのは、赤い封筒アクセシビリティ原理について簡単にマイクロチャネルグラブを通じて達成しました

ジェーン帳の記事します。https://www.jianshu.com/p/e1099a94b979

あなたはそれが星を報酬に役立つならば、添付のオープンソースプロジェクトは、コード全体をKotlinに変更されました対処赤い封筒は、最新のマイクロチャネルバージョン7.0.5に適用されたグラブ:https://github.com/xbdcc/GrabRedEnvelope

序文

私はまた、彼らはそれを達成するもの原則として、その後、赤い封筒プラグインをつかむために使用されている可能性があり、多くの人がグループは、常に迅速赤い封筒をつかむために誰かで見ていると信じて?

  • 一般的にはほとんど使用され、この方法は、携帯電話のルートを必要としない、AccessibilityService監視サービスにアクセス可能なUIシミュレーションをクリックすることによって達成されます。

  • もう一つの方法は、フックをXposedマイクロ文字コードで直接呼び出すことができます。フックは、電話で必要とされるかXposedルート仮想環境をインストールし、キーフックポイントを見つけ、ソースコード解析の組み合わせを逆コンパイルします。

あなたはいくつかのスクリプトUiautomator AndroidやAppiumは、実装プロセスは非常にシンプルであることを知っている必要があり書いた場合今日では、マイクロチャネル方式のAndroidグラブ赤い封筒のルートの簡単な紹介を必要としません。注意:以下は、Androidのバージョン7.0.3バージョンのマイクロ手紙に基づいています。

知識ポイント

Googleはあなたが知っていることを理解していない場合はBenpian知識ツールは、使用されます。
DDMS、AccessibilityService、Kotlinの言語を

UI解析

  • まず、MACの下で、SDKのインストールディレクトリを開き、素早くFinlderを入力するには、Shift +コマンド+ Gのショートカットキーを押すことができます。
    私のSDKディレクトリである/ユーザ/ caochang /ライブラリ/ Androidのよう / SDK。ツール・モニタ・解析ツールの中にフォルダを開きます。もしそうであれば、それは直接、EclipseのDDMSを開くことができます

  • コンピュータのUSBデバッグが接続電話は、あなたは、接続が失敗した場合のadb devicesコマンドを経由して、ADBキル・サーバーおよびADB開始サーバーを試すかどうかを確認することができます。

  • 電話が接続された後、現在のプロセス名の選択されたページ・ビューに依存し、選択したアプリ現在の試験以下に示すように、円の中央にあるアイコンをクリックして次のように現在のトップ・アクティビティ・ビューが表示されます。


     
    主なインタフェースを監視
  • 電話赤い封筒を送信し、以下のビューを見て、私たちは、IDとテキストを見つけることができます。


     
    マイクロチャネルグループチャットUIは赤い封筒を受け取りました
  • 同様に、我々は、爆弾ボックスに赤い封筒、赤い封筒をクリックしてIDの解体をクリックして、図中に見つけることができます:

 
赤い爆弾解体UIフレーム

コードの実装

この例では、使用に「com.github.xbdcc:Cutils:0.0.10」コードスタイル - Kotlinでフォーマットツール、コードの一部を。

  • まず、我々はonAccessibilityEvent継承AccessibilityServiceクラス内で、独自のメソッドを記述することは判断が変わっ現在またはインタフェースやコンテンツを通知することで実装しています。
        when (event.eventType) {
            AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED -> {
                LogUtils.d("通知改变:$event")
            }
            AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED -> {
                LogUtils.d("界面改变:$event") openRedEnvelope(event) } AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED -> { LogUtils.d("内容改变:$event") clickRedEnvelope() } } 
  • Activityクラス名とidまたはテキストコードを検索します。
    private val WECHAT_PACKAGE = "com.tencent.mm"
    private val WECHAT_LUCKYMONEY_ACTIVITY =
        "$WECHAT_PACKAGE.plugin.luckymoney.ui.LuckyMoneyNotHookReceiveUI" //微信红包弹框 private val RED_ENVELOPE_FLAG_ID = "com.tencent.mm:id/aq7" //聊天页面区分红包id private val RED_ENVELOPE_ID = "com.tencent.mm:id/aou" //聊天页面红包点击框控件id private val RED_ENVELOPE_OPEN_ID = "com.tencent.mm:id/cyf" //抢红包页面点开控件id 
  • 赤い封筒赤い封筒をクリックしてコードを見つけました:
    private fun clickRedEnvelope() { //如果没找到红包就不继续往下执行 if (!AccessibilityServiceUtils.isExistElementById( RED_ENVELOPE_FLAG_ID, rootInActiveWindow ) ) return //点击红包 AccessibilityServiceUtils.findAndClickOneById(RED_ENVELOPE_ID, rootInActiveWindow) } 
  • レッドボックスは、シェル開いているページの赤コードを表示されます。
    private fun openRedEnvelope(event: AccessibilityEvent) { //如果当前页面不是微信红包弹出框则不继续往下执行 if (WECHAT_LUCKYMONEY_ACTIVITY != event.className) return AccessibilityServiceUtils.findAndClickOneById(RED_ENVELOPE_OPEN_ID, rootInActiveWindow) } 

テスト結果

 
テストのGIF

エピローグ

これらは、マイクロチャネルのデモの簡単な実現は、自動的に赤い封筒をつかむが、あなたはまた、いくつかの改良通知リスナーがページ判定グラブ赤い封筒、パスワードをリッスン行うと、赤い封筒がそうで奪わとされているかどうかを判断するためにフィルタ遅延をクリックすることができます。

デモの完全なコード・アドレス

https://github.com/xbdcc/GrabRedEnvelope/tree/2.0.1/demo

赤い封筒APPダウンロードグラブ:

http://xbdcc.cn/GrabRedEnvelope/index.html

おすすめ

転載: www.cnblogs.com/xbdcc/p/11276432.html