本番環境で奇妙なエラーが多数発生していますが、これは少数のユーザーにのみ発生するため、99% のユーザーは問題ありません。
java.lang.Error: java.lang.ClassNotFoundException: com.packagename.core.Translations.TranslationWorker
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1119)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.ClassNotFoundException: com.packagename.core.Translations.TranslationWorker
at java.lang.Class.classForName(Class.java:-2)
at java.lang.Class.forName(Class.java:324)
at java.lang.Class.forName(Class.java:285)
at com.packagename.core.translations.TranslationWorkerFactory.createWorker(TranslationWorkerFactory.kt:19)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:83)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:242)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:136)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.packagename.core.Translations.TranslationWorker" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.packagename.appname-2/base.apk", zip file "/data/app/com.packagename.appname-2/split_config.armeabi_v7a.apk", zip file "/data/app/com.packagename.appname-2/split_config.cs.apk", zip file "/data/app/com.packagename.appname-2/split_config.xhdpi.apk"],nativeLibraryDirectories=[/data/app/com.packagename.appname-2/lib/arm, /data/app/com.packagename.appname-2/base.apk!/lib/armeabi-v7a, /data/app/com.packagename.appname-2/split_config.armeabi_v7a.apk!/lib/armeabi-v7a, /data/app/com.packagename.appname-2/split_config.cs.apk!/lib/armeabi-v7a, /data/app/com.packagename.appname-2/split_config.xhdpi.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at java.lang.Class.classForName(Class.java:-2)
at java.lang.Class.forName(Class.java:324)
at java.lang.Class.forName(Class.java:285)
at com.packagename.core.translations.TranslationWorkerFactory.createWorker(TranslationWorkerFactory.kt:19)
at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:83)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:242)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:136)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
これが TranslationWorkerFactory のコードです。私はダガーアシスト注入を使用して、ワーカークラスに依存関係を注入しています。
class TranslationWorkerFactory @Inject constructor(
private val workerFactories: Map<Class<out ListenableWorker>, @JvmSuppressWildcards Provider<ITranslationWorkerFactory>>
) : WorkerFactory() {
override fun createWorker(
appContext: Context,
workerClassName: String,
workerParameters: WorkerParameters
): ListenableWorker? {
val foundEntry =
workerFactories.entries.find { Class.forName(workerClassName).isAssignableFrom(it.key) }
val factoryProvider = foundEntry?.value
?: throw IllegalArgumentException("unknown worker class _name: $workerClassName")
return factoryProvider.get().create(appContext, workerParameters)
}
}
なぜこれが起こるのか分かりません。ワーカーが行うことは、大きなjsonをダウンロードして解析することなので、例外をスローする理由になる可能性がありますが、それが関連している可能性があるかどうかは私の推測です.
これが発生する理由を知っている人はいますか?
ありがとう