Jelajahi Sumber

feat: 引入aop框架,hook updateScrollEventValues (#26)

* feat: 引入aop库,hook updateScrollEventValues

* feat: 引入aop库,hook updateScrollEventValues

* feat: 引入aop库,hook updateScrollEventValues
LXD312569496 7 bulan lalu
induk
melakukan
4af6746c3a

+ 5 - 0
app/build.gradle

@@ -9,9 +9,11 @@ plugins {
     id 'com.tencent.vasdolly'
     id 'kotlin-parcelize'
     id("com.dropbox.dependency-guard") version "0.5.0"
+    id("com.google.devtools.ksp") version "1.9.10-1.0.13"//引入ksp插件
 }
 
 apply plugin: 'com.wenext.bundle.local.test'
+apply plugin: "android.aop"
 
 def isEnableTrace = project.hasProperty("ENABLE_TRACE") && project.ENABLE_TRACE.toBoolean()
 if (isEnableTrace) {
@@ -503,6 +505,9 @@ dependencies {
     }
 
     api libs.flexbox
+
+    implementation 'io.github.flyjingfish:androidaop-core:2.7.0'
+    ksp 'io.github.flyjingfish:androidaop-apt:2.7.0'
 }
 
 

+ 2 - 0
app/dependencies/releaseRuntimeClasspath.txt

@@ -269,6 +269,8 @@ com.wenext.android:frame-zero:5.1.4
 com.wenext.android:retrofit:5.1.4
 id.zelory:compressor:3.0.1
 io.agora.rtc:agora-special-voice:3.7.3.5.XYHZ
+io.github.flyjingfish:androidaop-annotation:2.7.0
+io.github.flyjingfish:androidaop-core:2.7.0
 io.github.scwang90:refresh-drawable-paint:3.0.0-alpha
 io.github.scwang90:refresh-footer-classics:3.0.0-alpha
 io.github.scwang90:refresh-header-material:3.0.0-alpha

+ 54 - 0
app/src/main/java/com/adealink/weparty/apm/HookTest.kt

@@ -0,0 +1,54 @@
+package com.adealink.weparty.apm
+
+import android.view.View
+import androidx.viewpager2.widget.ViewPager2
+import com.adealink.frame.log.Log
+import com.flyjingfish.android_aop_annotation.ProceedJoinPoint
+import com.flyjingfish.android_aop_annotation.anno.AndroidAopMatchClassMethod
+import com.flyjingfish.android_aop_annotation.base.MatchClassMethod
+import com.flyjingfish.android_aop_annotation.enums.MatchType
+
+/**
+ * 定义一些替换操作
+ * Created by XiaoDongLin.
+ * Date: 2025/8/22
+ */
+@AndroidAopMatchClassMethod(
+    targetClassName = "androidx.viewpager2.widget.ScrollEventAdapter",
+    methodName = ["updateScrollEventValues"],
+    type = MatchType.SELF
+)
+class ScrollEventAdapterMethod : MatchClassMethod {
+    override fun invoke(joinPoint: ProceedJoinPoint, methodName: String): Any? {
+        try {
+            val target = joinPoint.target
+            if (target != null) {
+                val mViewPagerField = target::class.java.getDeclaredField("mViewPager")
+                mViewPagerField.isAccessible = true
+                val mViewPager = mViewPagerField.get(joinPoint.target) as ViewPager2
+                val viewPagerIdString = mViewPager.resources?.getResourceEntryName(mViewPager.id)
+                Log.i(
+                    "ScrollEventAdapterMethod",
+                    "=====updateScrollEventValues=====${mViewPager}, viewPager:$viewPagerIdString"
+                )
+            }
+        } catch (e: Exception) {
+
+        }
+        return joinPoint.proceed()
+    }
+}
+
+
+//@AndroidAopMatchClassMethod(
+//    targetClassName = "android.view.View.OnClickListener",
+//    methodName = ["onClick"],
+//    type = MatchType.EXTENDS //type 一定是 EXTENDS 因为你想 hook 所有继承了 OnClickListener 的类
+//)
+//class MatchOnClick : MatchClassMethod {
+//    //    @SingleClick(5000) //联合 @SingleClick ,给所有点击增加防多点,6不6
+//    override fun invoke(joinPoint: ProceedJoinPoint, methodName: String): Any? {
+//        Log.e("MatchOnClick", "=====invoke=====$methodName")
+//        return joinPoint.proceed()
+//    }
+//}

+ 2 - 0
build.gradle

@@ -28,6 +28,8 @@ buildscript {
         }
 
         classpath(libs.frame.bundle.tool)
+        classpath 'io.github.flyjingfish:androidaop-plugin:2.7.0'
+
     }
 }