android: fix missing Hilt GeneratedInjector in asm transform
This commit is contained in:
@@ -983,3 +983,14 @@
|
|||||||
- Upgraded attachment audio player behavior (voice + audio):
|
- Upgraded attachment audio player behavior (voice + audio):
|
||||||
- added seek slider for manual rewind/fast-forward,
|
- added seek slider for manual rewind/fast-forward,
|
||||||
- unified speed toggle for both `voice` and `audio` playback.
|
- unified speed toggle for both `voice` and `audio` playback.
|
||||||
|
|
||||||
|
### Step 134 - Hilt startup crash fix (`MessengerApplication_GeneratedInjector`)
|
||||||
|
- Fixed startup crash:
|
||||||
|
- `NoClassDefFoundError: MessengerApplication_GeneratedInjector`.
|
||||||
|
- Root cause observed in build pipeline:
|
||||||
|
- `MessengerApplication_GeneratedInjector.class` existed after `javac`,
|
||||||
|
- but was missing in `transformDebugClassesWithAsm/dirs` before dexing.
|
||||||
|
- Added Gradle backfill task for `debug/release` variants:
|
||||||
|
- copies `*Application_GeneratedInjector.class` from `intermediates/javac/.../classes`
|
||||||
|
into `intermediates/classes/.../transform...ClassesWithAsm/dirs` if missing,
|
||||||
|
- wired task as dependency of `dexBuilder<Variant>`.
|
||||||
|
|||||||
@@ -127,3 +127,37 @@ dependencies {
|
|||||||
kapt {
|
kapt {
|
||||||
correctErrorTypes = true
|
correctErrorTypes = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun registerHiltInjectorBackfillTask(variantName: String) {
|
||||||
|
val cap = variantName.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }
|
||||||
|
val taskName = "backfill${cap}HiltApplicationInjector"
|
||||||
|
val dexBuilderTaskName = "dexBuilder$cap"
|
||||||
|
val compileJavaTaskName = "compile${cap}JavaWithJavac"
|
||||||
|
|
||||||
|
tasks.register(taskName) {
|
||||||
|
dependsOn(compileJavaTaskName)
|
||||||
|
doLast {
|
||||||
|
val javacOutput = file("$buildDir/intermediates/javac/$variantName/$compileJavaTaskName/classes")
|
||||||
|
val asmOutput = file("$buildDir/intermediates/classes/$variantName/transform${cap}ClassesWithAsm/dirs")
|
||||||
|
if (!javacOutput.exists() || !asmOutput.exists()) return@doLast
|
||||||
|
|
||||||
|
fileTree(javacOutput) {
|
||||||
|
include("**/*Application_GeneratedInjector.class")
|
||||||
|
}.forEach { source ->
|
||||||
|
val relativePath = source.relativeTo(javacOutput).path
|
||||||
|
val target = file("${asmOutput.path}/$relativePath")
|
||||||
|
if (!target.exists()) {
|
||||||
|
target.parentFile?.mkdirs()
|
||||||
|
source.copyTo(target, overwrite = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.matching { it.name == dexBuilderTaskName }.configureEach {
|
||||||
|
dependsOn(taskName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
registerHiltInjectorBackfillTask("debug")
|
||||||
|
registerHiltInjectorBackfillTask("release")
|
||||||
|
|||||||
Reference in New Issue
Block a user