我有一个 android 项目,我无法再在本地运行所有测试 gradle 任务(我在这个项目中有 3 种不同的风格)。在任务失败之前,我收到了 50 次此错误消息。我使用 Gitlab CI/CD 远程运行这些任务没有问题,而且我在本地有另一个项目,我也没有这个问题。
java.lang.NoClassDefFoundError: jdk/internal/reflect/GeneratedSerializationConstructorAccessor1
at jdk.internal.reflect.GeneratedSerializationConstructorAccessor1.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.io.ObjectStreamClass.newInstance(ObjectStreamClass.java:1092)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2150)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1668)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:482)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:440)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.deserializeWorker(SystemApplicationClassLoaderWorker.java:153)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Run Code Online (Sandbox Code Playgroud) 我有一个 kotlin 多平台项目来制作一个针对 iOS 和 Android 的共享库。我有一些多平台外部库:sqldelight、kodein-di、ktor、klock、kotlinx-coroutines 和 kotlinx-serialization。
使用命令行将共享库构建为苹果框架大约需要 5 分钟 ./gradlew :SharedCode:build
是否可以减少此构建时间?
我的 SharedCode 多平台库build.gradle
apply plugin: 'kotlinx-serialization'
apply plugin: 'com.android.library'
apply plugin: 'org.jetbrains.kotlin.multiplatform'
apply plugin: "com.squareup.sqldelight"
apply plugin: "org.jetbrains.dokka"
group = 'com.example.multiplatform'
version = '1.0'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 15
}
buildTypes {
release {
minifyEnabled false
}
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
}
sqldelight {
MyDB {
packageName = "com.example.multiplatform"
}
}
dokka {
outputFormat = …Run Code Online (Sandbox Code Playgroud) 这是用例:用户设置具有特定时间的每日通知。在指定时间,发出网络请求以获取一些数据,然后使用检索到的数据显示通知。我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例。
据我了解,AlarmManager 最适合在精确的时间进行调度。但如果没有网络,作业就会失败,我更喜欢推迟作业以尊重网络限制,而不是执行失败。对于这种类型的受限工作,在保证最终执行的情况下,WorkManager 看起来是最好的解决方案,使用具有初始延迟的 OneTimeWorkRequest 以便在正确的时间执行。