Closed Goooler closed 2 years ago
Since 856d4c30a86fc49c0bd836b23867b011d1ee9c6b.
Caused by updating AGP 7.0.0-beta01
with android.enableR8.fullMode=true
enabled.
If I disable android.enableR8.fullMode=true
, no crash happend.
Have not been fixed in AGP 7.0.4
or 7.1.0-rc01
or AGP 7.2.0-alpha07
.
Decompile MainActivity
with android.enableR8.fullMode=true
enabled:
@Route(path = "/main/")
public final class MainActivity extends a {
...
}
Decompile MainActivity
with android.enableR8.fullMode=true
disabled:
@Route(path = "/main/")
public final class MainActivity extends a<MainActivityBinding> {
...
}
So r8 fullMode erase the generic type on MainActivity
's super class, make javaClass.genericSuperclass as ParameterizedType
throw ClassCastException
, seems this behavior starts from AGP 7.0.0-beta01 and I already add -keepattributes Signature
rule in proguard files.
Here is the MainActivity
decompiled from dex:
public final class MainActivity extends a {
...
}
No generic type on a
class.
Still showing after AGP 7.1, to solve this problem absolutely, should wait Hilt to release a new version that supports new R8 rules.
After #13 & #31, solved.
MainActivity
extendsBaseBindingActivity
with generic argumentMainActivityBinding
:https://github.com/Goooler/DemoApp/blob/cc12a2f8afee4ddcb601dc46b64815c3a0d22af1/main/src/main/kotlin/io/goooler/demoapp/main/ui/MainActivity.kt#L18-L21
binding
instantiated byinflateBinding
extension inBaseBindingActivity
: https://github.com/Goooler/DemoApp/blob/cc12a2f8afee4ddcb601dc46b64815c3a0d22af1/common/src/main/kotlin/io/goooler/demoapp/common/base/binding/BaseBindingActivity.kt#L8-L19inflateBinding
generate binding by reflection: https://github.com/Goooler/DemoApp/blob/cc12a2f8afee4ddcb601dc46b64815c3a0d22af1/common/src/main/kotlin/io/goooler/demoapp/common/util/CommonExtensions.kt#L297-L303