sy007 / DebouncePlugin

Android点击事件防抖动插件
Apache License 2.0
113 stars 16 forks source link

1.1.0 编译不通过, 1.0.2build,gradle中配置时间不生效 #7

Closed RexHuang1 closed 1 year ago

RexHuang1 commented 2 years ago

1666936696484

sy007 commented 2 years ago

@RexHuang1 你好请问使用1.1.0 时,你项目用的AGP和kotlin插件是什么版本

sy007 commented 2 years ago

@RexHuang1 你好,请升级你项目的kotlin-plugin到1.4.0以上,1.4.0以上版本才有FuncationReferenceImpl 6个参数的构造方法。

RexHuang1 commented 2 years ago

我的项目kotlin插件1.5.21 agp 4.2.2 gradle6.7.1 image kotlin插件1.5.21一直是能找到这个6个参数的构造方法的 image

RexHuang1 commented 2 years ago

试了一下,依旧是这个报错 image

RexHuang1 commented 2 years ago

demo早上试过,刚刚也试过,都是这里编译不过去 image

sy007 commented 2 years ago

1666936696484

@RexHuang1 你好,这个问题已修复,请升级1.1.1版本试试。

RexHuang1 commented 2 years ago

1.1.1版本现在可以编译成功运行了。

现在的问题就是:

  1. 配置中checkTime按键的时间间隔是不是没有生效,我的时间间隔配置是500,我看了代码和打印sCheckTime还是1000。
  2. 配置中includes单独文件比如kotlin文件的配置问题(ps.我还没对java文件单独配置过),我对字节码了解不多,也想请教下class字节码的相关学习。 image image
sy007 commented 2 years ago

1.1.1版本现在可以编译成功运行了。

现在的问题就是:

  1. 配置中checkTime按键的时间间隔是不是没有生效,我的时间间隔配置是500,我看了代码和打印sCheckTime还是1000。
  2. 配置中includes单独文件比如kotlin文件的配置问题(ps.我还没对java文件单独配置过),我对字节码了解不多,也想请教下class字节码的相关学习。 image image

1.修改debounce任何配置都需要Build->clean Project,然后在运行项目。否则新修改的配置不会生效

2.Main activity.kt不生效,是因为设置的点击事件编译后生成的是MainActivity$XXX.class。如果你只想对MainActivity防抖,那么include可以这样写"路径/MainActivity*.class"。

RexHuang1 commented 2 years ago

每次都是clean 然后运行, log打印就是1000

sy007 commented 2 years ago

每次都是clean 然后运行, log打印就是1000

  1. 确保执行Build->clean project时,app/build文件被删除,运行,查看修改是否有效。
  2. 请确保运行的apk是通过Run app 交互执行的,如果不确定可以执行 ./gradlew clean ./gradlew assembleDebug 打包后,安装apk到手机上试试。
  3. 如果还不行,尝试清除AS缓存试试。

ps:我这边没出现过checkTime修改无效的情况。它的原理是通过配置在transform中修改 BounceChecker#sCheckTime的值。build文件被移除,按理应该重新transform。根据你反馈的现象像是忽略了transform过程一样(缓存没清除)。

RexHuang1 commented 2 years ago
  1. clean project确实删除了所有build文件夹。然后用Run app重新构建打包运行的。
  2. 也试过清除AS缓存了。
  3. 后面我想试下直接下载Demo来运行看看能不能修改。Demo工程是否少了gradle/wrapper文件夹来配置gradle的构建?直接运行不过去
sy007 commented 2 years ago
  1. clean project确实删除了所有build文件夹。然后用Run app重新构建打包运行的。
  2. 也试过清除AS缓存了。
  3. 后面我想试下直接下载Demo来运行看看能不能修改。Demo工程是否少了gradle/wrapper文件夹来配置gradle的构建?直接运行不过去

抱歉,Demo工程gradle/wrapper文件确实没上传,现在上传了。

RexHuang1 commented 2 years ago

看了下Demo的插件代码,但不太懂插件开发。就跟了下插件的流程。

  1. 以为是checkTime值因为没加L类型不同,才导致没解析成功。后面发现是checkTime已经解析成功并输出到控制台了。
  2. 后面对比了我的项目的配置和Demo的配置,发现includes这个配置有问题。Demo中也没有includes配置。

我的项目屏蔽includes配置后,checkTime生效 Demo项目加入includes配置后,checkTime失效,变成默认值1000L JMX6{WQ5 A5C4%`ZUY9C8E7

另外:每次修改了配置之后,clean project都会失败。提示build目录被占用,需要关闭as重新打开项目才能进行clean和run app等操作。 image

sy007 commented 2 years ago

看了下Demo的插件代码,但不太懂插件开发。就跟了下插件的流程。

  1. 以为是checkTime值因为没加L类型不同,才导致没解析成功。后面发现是checkTime已经解析成功并输出到控制台了。
  2. 后面对比了我的项目的配置和Demo的配置,发现includes这个配置有问题。Demo中也没有includes配置。

我的项目屏蔽includes配置后,checkTime生效 Demo项目加入includes配置后,checkTime失效,变成默认值1000L JMX6{WQ5 A5C4%`ZUY9C8E7

另外:每次修改了配置之后,clean project都会失败。提示build目录被占用,需要关闭as重新打开项目才能进行clean和run app等操作。 image

感谢提供复现路径,方便加个q嘛,定位下文件被占用问题,632702731。

sy007 commented 1 year ago

@RexHuang1 你好 checkTime 设置无效问题已解决。

文件被占用问题经排查这是ide对windows的优化😔,他会缓存一段时间jar。无论使用AGP7.0的TransformAction还是已有的三方成熟框架Booster,都会存在文件无法删除问题。

解决方案目前只能将不保留守护进程(在项目gradle.properties)配置 org.gradle.daemon=false

或者无法删除时执行./gradlew --stop 停止守护进程,这时候进程对jar的持有就释放了😔

或者你这边尝试升级下AS。这是其他人给官方提的关于jar无法删除的Bug:

@RexHuang1 你好 checkTime 设置无效问题已解决。

文件被占用问题经排查这是ide对windows的优化😔,他会缓存一段时间jar。无论使用AGP7.0的TransformAction还是已有的三方成熟框架Booster,都会存在文件无法删除问题。

解决方案目前只能将不保留守护进程(在项目gradle.properties)配置 org.gradle.daemon=false

或者无法删除时执行./gradlew --stop 停止守护进程,这时候进程对jar的持有就释放了😔

或者你这边尝试升级下AS。这是其他人给官方提的关于jar无法删除的Bug:

https://issuetracker.google.com/issues/167701947

这个问题我先关闭了哈。

这个问题我先关闭了哈。