zhangzexin / Android_ASM_ThreadPoolExecutor

Android 通过ASM收敛三方SDK中的线程池,及其线程,后续还有gradle优化,现在只是一个可以实用的案例

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

目录结构

|-tesapp 测试工程
|-app 测试工程
|-plugin_hook Gradle插件源文件
|      |-main
|          |-groovy 存放Gradle脚本
|          |-java 对应的转换类,实际操控ASM
|-repo 生成好的插件

使用方法

项目下build.gradle引入


    repositories {
        maven {
                url uri('repo')
            }
    }
    dependencies {
        classpath 'com.zzx.pluginhook:pluginhook:1.0'
    }

主工程模块下


    plugins {
        id 'com.zzx.pluginhook'
    }
    PluginExt {
        poolmethod = "asw_getInstance"
        threadpool_des = "Lcom/zzx/testapp/proxy/JavaThreadPoolExecutorProxy;" //需要替换成的ThreadPoolExecutor类
        thread_des = "Lcom/zzx/testapp/proxy/ThreadProxy;" //需要代理替换的Thread
    }

需要关注的问题

  1. 替换时会发现官方所提供的类也进行了替换,这时候看个人处理,比如DelegatedExecutorService的类在livedata中使用,看自己否需要替换
  2. 如果感觉编译过慢,可以引入ByteX将对应的adapter添加进去即可。
  3. 因为各家引包不同,需要做一定的处理,如果不想处理建议增加过滤措施。

后续计划

  • 添加线程池收敛方案
  • 添加过滤措施
  • 将ByteX的部分引入,进行重构成,目前bytex感觉还是过于复杂,对其他人进行扩展不太友好,最友好的方案是,只需要添加一个task的脚本中选择操作对应的字节码就好了。

About

Android 通过ASM收敛三方SDK中的线程池,及其线程,后续还有gradle优化,现在只是一个可以实用的案例


Languages

Language:Java 47.2%Language:Kotlin 35.6%Language:Groovy 17.2%