通过配置blackListFile部分函数不生效
matrix版本:如: 0.9.0
gradle版本:如: 4.0.1
问题描述:通过配置blackListFile部分函数不生效
堆栈/日志:
matrix { trace { enable = true //if you don't want to use trace canary, set false blackListFile = "${project.projectDir}/matrixTrace/blackMethodList.txt" } } 内容如下:
[package]
-keeppackage facebook
-keeppackage com/squareup
-keeppackage androidx
-keeppackage com/google
-keeppackage android
-keeppackage kotlin
-keeppackage org/apache/commons
-keeppackage org/alibaba
-keeppackage okhttp3
-keeppackage org
-keeppackage net
-keeppackage java
-keeppackage com/android
-keeppackage com/facebook/yoga
-keeppackage com/facebook/drawee
-keeppackage com/facebook
-keeppackage com/tencent/mm
但是生成的mapping里面还是有androidx和com.google开头的包名

[I][Matrix.Trace] [ParseMappingTask#run] cost:1ms, black size:50, collect 0 method from java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011) at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006) at com.tencent.matrix.trace.MethodCollector$TraceClassAdapter.visit(MethodCollector.java:284) at org.objectweb.asm.ClassReader.accept(ClassReader.java:524) at org.objectweb.asm.ClassReader.accept(ClassReader.java:391) at com.tencent.matrix.trace.MethodCollector$CollectJarTask.run(MethodCollector.java:171) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011) at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006) at com.tencent.matrix.trace.MethodCollector$TraceClassAdapter.visit(MethodCollector.java:284) at org.objectweb.asm.ClassReader.accept(ClassReader.java:524) at org.objectweb.asm.ClassReader.accept(ClassReader.java:391) at com.tencent.matrix.trace.MethodCollector$CollectJarTask.run(MethodCollector.java:171) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) [I][MethodCollector] [saveIgnoreCollectedMethod] size:54606 path:F:\FastAppPerformance\android\playground_auto\app\build\outputs\mapping\oldProductEngineDebug\ignoreMethodMapping.txt [I][MethodCollector] [saveCollectedMethod] size:108816 incrementCount:108815 path:F:\FastAppPerformance\android\playground_auto\app\build\outputs\mapping\oldProductEngineDebug\methodMapping.txt [E][Matrix.MethodTracer] [innerTraceMethodFromJar] input:jetified-bcprov-jdk15on-1.64.jar output:F:\FastAppPerformance\android\playground_auto\app\build\intermediates\transforms\MatrixTraceTransform\oldProductEngine\debug\213.jar e:java.lang.UnsupportedOperationException: This feature requires ASM6 java.nio.file.FileSystemException: F:\FastAppPerformance\android\playground_auto\app\build\intermediates\transforms\MatrixTraceTransform\oldProductEngine\debug\213.jar: 另一个程序正在使用此文件,进程无法访问。
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileCopy.copy(WindowsFileCopy.java:165)
at sun.nio.fs.WindowsFileSystemProvider.copy(WindowsFileSystemProvider.java:278)
at java.nio.file.Files.copy(Files.java:1274)
at com.tencent.matrix.trace.MethodTracer.innerTraceMethodFromJar(MethodTracer.java:199)
at com.tencent.matrix.trace.MethodTracer.access$100(MethodTracer.java:59)
at com.tencent.matrix.trace.MethodTracer$2.run(MethodTracer.java:107)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
一开始猜测,isNeedTrace这个函数是静态函数,但是会存在多线程重入。后来发现还是不对。。最后发现,是在parseBlockFile的时候,只 Replace了/ 没有replace /r。导致生成的字符串里面有一个/r的回车符。。把这块代码改成这样的就可以了。。String[] blockArray = blockStr.trim().replace("/", ".").replace("\r","").split("\n");
@kirin521 这个问题你可以帮忙提个 pr,或者等我修改到下个版本中,感谢。
@kirin521 这个问题你可以帮忙提个 pr,或者等我修改到下个版本中,感谢。
sorry, 公司环境不太方便往github提交代码。下个版本修复吧。我本地修改通过localMaven依赖暂时解决了
啥时候修复啊,要不然插装的代码总出错啊