-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
处理androidx.core.graphics.TypefaceCompatApi29Impl时出错 #411
Labels
bug
Something isn't working
Comments
你用的这个 你要么降低点androidx的版本,要么把compileSDK升到29。 第三方库里存在一些设计上就不需要使用的类,没法重新编译,我需要考虑下怎么在Transform里自动兼容这种情况。 |
shifujun
added a commit
to shifujun/Shadow
that referenced
this issue
Sep 21, 2020
之前有些Transform的filter没有调用allCanRecompileAppClass方法,直接传入了allInputClass。 这不但使Transform的速度有些慢,还导致一个本来不需要处理的类,当它不可编译时(引用了不存在的类)导致Transform失败。 fix Tencent#411
#412 合入的话,你的业务构建应该就不用任何修改了。我测试在28版本sdk下编译androidx的1.3.1版本能复现问题。修复后不会复现问题了。 |
额,修复失败了。单元测试是真好用,测出来了我的修复问题。。。我再想想吧。 需要一个高效的办法确定一个类是否能重新编译。 失败的case是调用了Fragment.startActivity的类,可能根本没引用Fragment类型,而是引用了Fragment的子类。 |
我现在确实改了版本就没问题了,等你改好了我更新下试试 |
shifujun
added a commit
to shifujun/Shadow
that referenced
this issue
Sep 22, 2020
CodeConverter在重写Method实现时需要rebuildStackMap。在这个过程中,只有涉及泛型具有多个下界时, Javassist试图帮我们找出多个下界的共同父类型作为新的下界。这时才会需要加载CtClass。 所以,并不是所有找不到的类型都会引起rebuildStackMap失败。 由于我们的逻辑不会涉及修改找不到的类型的行为、甚至修改它们的父类型, 所以在这种场景下直接将找不到的类型构造出来,即假设它们的父类是Object类型。 fix Tencent#411
shifujun
added a commit
that referenced
this issue
Sep 22, 2020
CodeConverter在重写Method实现时需要rebuildStackMap。在这个过程中,只有涉及泛型具有多个下界时, Javassist试图帮我们找出多个下界的共同父类型作为新的下界。这时才会需要加载CtClass。 所以,并不是所有找不到的类型都会引起rebuildStackMap失败。 由于我们的逻辑不会涉及修改找不到的类型的行为、甚至修改它们的父类型, 所以在这种场景下直接将找不到的类型构造出来,即假设它们的父类是Object类型。 fix #411
已经合入了。再试试吧。我认为我这次是修复了一个一直存在的兼容性问题。 |
shifujun
added a commit
to shifujun/Shadow
that referenced
this issue
Oct 25, 2021
这里很久不需要改动了。并且引入这个测试需要多依赖一个低版本的SDK(API 28),使IDE索引变麻烦。 Tencent#411
shifujun
added a commit
to shifujun/Shadow
that referenced
this issue
Oct 25, 2021
这里很久不需要改动了。并且引入这个测试需要多依赖一个低版本的SDK(API 28),使IDE索引变麻烦。 Tencent#411
shifujun
added a commit
that referenced
this issue
Oct 25, 2021
这里很久不需要改动了。并且引入这个测试需要多依赖一个低版本的SDK(API 28),使IDE索引变麻烦。 #411
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
处理androidx.core.graphics.TypefaceCompatApi29Impl时出错:javassist.CannotCompileException: createFromFontFamilyFilesResourceEntry (Landroid/content/ConLandroidx/core/content/res/FontResourcesParserCompat$FontFamilyFilesResourceEntry;Landroid/content/res/Resources;I)Landroid/graphics/Typeface; in androidx.core.graphics.TypefaceCompatApi29Impl: failed to resolve types
Task :app:transformClassesWithShadowTransformForDebug in app Finished
Caused by: javassist.CannotCompileException: createFromFontFamilyFilesResourceEntry (Landroid/content/Context;Landroidx/core/content/res/FontResourcesParserCompat$FontFamilyFilesResourceEntry;Landroid/content/res/Resources;I)Landroid/graphics/Typeface; in androidx.core.graphics.TypefaceCompatApi29Impl: failed to resolve types
at javassist.CodeConverter.doit(CodeConverter.java:542)
at javassist.CtClassType.instrument(CtClassType.java:1481)
at com.tencent.shadow.core.transform.specific.InstrumentationTransform$setup$2.transform(InstrumentationTransform.kt:57)
at com.tencent.shadow.core.transform_kit.AbstractTransformManager.fireAll(AbstractTransformManager.kt:41)
at com.tencent.shadow.core.transform_kit.AbstractTransform.onTransform(AbstractTransform.kt:61)
at com.tencent.shadow.core.transform_kit.ClassTransform.transform(ClassTransform.kt:173)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:284)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:247)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:106)
... 92 more
The text was updated successfully, but these errors were encountered: