Closed vlike closed 2 years ago
忘了发配置
aspectjx { enabled = true // 移除kotlin相关,编译错误和提升速度 exclude 'kotlin.jvm', 'kotlin.internal' exclude 'kotlinx.coroutines.internal', 'kotlinx.coroutines.android' include 'com.abc' }
另外,我也尝试过配置把所有的exclude去掉,结果weaveTmp里仍然没有JAR包里面的东西。 配置成这样: aspectjx { enabled = true }
@vlike weaveTmp里面只会有class文件对应的输入和输出,对于jar类型,你可以在buildConfigCache.json
里面找到对应的输出文件是哪一个。
@wurensen buildConfigCache.json 里面也没有任何JAR包里的东西 很久前,类似情况也发生过,当时用2.0也是不行,但退回到1.1.1版本是可以正常修改JAR包的
{ "matchedInputs": [], "aspectFiles": [ { "target": "/Users/vlike/testproject/atomic/build/tmp/transformClassesWithAjxForDebug/aspectFiles/aspx/AspxConfig.class", "source": "/Users/vlike/testproject/atomic/build/tmp/kotlin-classes/debug/aspx/AspxConfig.class" } ], "weaveOutputs": [], "extension": { "enabled": true, "includes": [ "com.abc.test" ], "excludes": [], "ajcArgs": [] } }
@wurensen buildConfigCache.json 里面也没有任何JAR包里的东西 很久前,类似情况也发生过,当时用2.0也是不行,但退回到1.1.1版本是可以正常修改JAR包的
{ "matchedInputs": [], "aspectFiles": [ { "target": "/Users/vlike/testproject/atomic/build/tmp/transformClassesWithAjxForDebug/aspectFiles/aspx/AspxConfig.class", "source": "/Users/vlike/testproject/atomic/build/tmp/kotlin-classes/debug/aspx/AspxConfig.class" } ], "weaveOutputs": [], "extension": { "enabled": true, "includes": [ "com.abc.test" ], "excludes": [], "ajcArgs": [] } }
你这边配置了includes规则,得满足规则的class或者jar才会被织入。你确认下你jar的包名能够匹配你配置的这个规则com.abc.test
吗?
@wurensen 是的,完全匹配,我就是把includes,excludes都配置成空,也没有效果。各种组合我试了不下50次,都不行所以来求助
你能提供没有配置过滤规则时候的buildConfigCache.json文件吗?或者直接提供下可复现demo。
重新开了一个模块,把jar文件复制到模块的libs目录, 引入这个JAR包,implementation files('libs/abc.jar')
然后再热行编译,这是编译成功后的buildConfigCache
{ "matchedInputs": [ { "source": "/Users/vlike/testproject/testlib/build/tmp/kotlin-classes/debug/aspx/AspxConfig.class" }, { "source": "/Users/vlike/testproject/testlib/build/intermediates/javac/debug/classes/com/example/sitetw/BuildConfig.class" }, { "source": "/Users/vlike/testproject/testlib/build/intermediates/javac/debug/classes/aspx/AspxJava.class" } ], "aspectFiles": [ { "target": "/Users/vlike/testproject/testlib/build/tmp/transformClassesWithAjxForDebug/aspectFiles/aspx/AspxJava.class", "source": "/Users/vlike/testproject/testlib/build/intermediates/javac/debug/classes/aspx/AspxJava.class" } ], "weaveOutputs": [ { "costMillis": 243, "source": "/Users/vlike/testproject/testlib/build/tmp/transformClassesWithAjxForDebug/weaveTmp/d9f2f77573c16685dd28c8a0dde0bff97e6df92f/input", "outputFiles": [ "/Users/vlike/testproject/testlib/build/intermediates/transforms/ajx/debug/0/aspx/AspxConfig.class" ] }, { "costMillis": 249, "source": "/Users/vlike/testproject/testlib/build/tmp/transformClassesWithAjxForDebug/weaveTmp/228cf8f32f6419e2fcb759e2e3a1d945b467cca5/input", "outputFiles": [ "/Users/vlike/testproject/testlib/build/intermediates/transforms/ajx/debug/1/aspx/AspxJava.class", "/Users/vlike/testproject/testlib/build/intermediates/transforms/ajx/debug/1/com/example/sitetw/BuildConfig.class" ] } ], "extension": { "enabled": true, "includes": [], "excludes": [], "ajcArgs": [] } }
@wurensen 已经解决了,配置放在jar所在的模块里是不行的,一定要把配置放在app模块里才行
@wurensen 已经解决了,配置放在jar所在的模块里是不行的,一定要把配置放在app模块里才行
你可以具体描述下,jar放个模块,插件是哪个模块引入还是都有引入,我好确认下有没有bug.
你可以具体描述下,jar放个模块,插件是哪个模块引入还是都有引入,我好确认下有没有bug.
@wurensen 我把JAR放在单独的模块(m1)里,app模块再引用m1,m1模块里应用插件:io.github.wurensen.android-aspectjx,m1模块里配置过滤选项,同时要织入的代码也放在此模块。
以上是怎么试都不行的配置
最后,
我把m1上的配置移到app的build.gradle中,只移了插件ID和过滤配置,代码及JAR的位置都保持不变,这时就可以了。
那这就是正常的,只有app模块才可以对jar进行织入处理(agp流程设计如此,也应该如此),library模块只能对你自己的class文件进行处理。
请提供构建环境相关信息:
我希望覆盖JAR里的某个方法, App能成功编译,没有出错,但没有效果
代码: @Throws(Throwable::class) @Around("execution(* com.abc.fun1())") fun fixfun1(joinPoint: ProceedingJoinPoint): List {
return listOf(1)
}
类似的问题以前也遇到过,用较老的版本1.1.1可以用此过滤器: includeJarFilter 'com.abc', 'abc.aar'
JAR放在libs目录,引入方式: implementation files('libs/plugins.jar')
输出日志: