Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

javassist 引发的内测泄漏,导致transform临时文件无法被删除 #56

Closed
tudou0digua opened this issue Jun 9, 2023 · 3 comments

Comments

@tudou0digua
Copy link

【平台环境】:windows
【Android Studio版本】:Android Studio Electric Eel | 2022.1.1 Patch 2
【编译使用Java版本】:jdk11
【kotlin版本】:org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10
【gradle-plugin版本】:com.android.tools.build:gradle:7.3.0
【gradle-wrapper版本】:gradle-7.5-bin.zip
【drouter版本】:drouter-api:2.4.5
【复现步骤】:win10 电脑上
1、Drouter Plugin 配在其他 Android Gradle Plugin 后边 (例如使用 drouter 配置在 booster 后边)即,build.gradle 中配置

plugins {
id 'com.android.application'
id 'com.didiglobal.booster'
id 'com.didi.drouter'
}
2、编辑Android项目
3、clean Project ,此时会出现以下报错

Unable to delete directory 'C:\Android\workspace\TestWebView\app\build'
Failed to delete some children. This might happen because a process has files open or has its working directory set in the target directory.

  • C:\Android\workspace\TestWebView\app\build\intermediates\transforms\booster\debug\10.jar
  • C:\Android\workspace\TestWebView\app\build\intermediates\transforms\booster\debug\11.jar
    【期望结果】:能正常 clean Project
    【日志】:如上

解决方案:
修改 Drouter 插件,在使用 javassist 之前,调用 ClassPool.cacheOpenedJarFile = false 关闭 javassist 对 jar 文件的持有

原因:
Drouter Plugin 配在其他 Android Gradle Plugin 后边,被 javassist 持有的 jar 包是在 C:\Android\workspace\TestWebView\app\build\intermediates\transforms\booster\debug\xx.jar。是build\intermediates\transforms目录下上一个 transform 的缓存文件,clean project 会去清除该文件。但是,该文件句柄被 gradle Daemon 进程持有,无法被删除。

How to release the ClassPool file handles?

#321jboss-javassist/javassist#321

InputStream may leak in JarClassPath openClassfile

#222jboss-javassist/javassist#222

【需求】
Drouter 提供 cacheOpenedJarFile 配置项,用以关闭 ClassPool.cacheOpenedJarFile = false

@weigao123
Copy link
Collaborator

感谢您的反馈,确实没有在window电脑上测试过,看起来这个配置在win上有副作用,我是不是可以直接在win上关闭这个选项,这样你觉得ok吗

@tudou0digua
Copy link
Author

感谢您的反馈,确实没有在window电脑上测试过,看起来这个配置在win上有副作用,我是不是可以直接在win上关闭这个选项,这样你觉得ok吗

直接在win上关闭这个选项,可以满足我的需求,个人认为可以直接在win上关闭这个选项,

@weigao123
Copy link
Collaborator

weigao123 commented Jun 28, 2023

已在win下关闭这个选项,可以使用这个版本的插件试一下
classpath "io.github.didi:drouter-plugin:1.3.3"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants