apps\hub\src\main\java\cn\nfarms\hub\HubApp.kt¶
源码路径:
apps\hub\src\main\java\cn\nfarms\hub\HubApp.kt· 51 行
package cn.nfarms.hub
import android.app.Application
import android.content.Context
import cn.nfarms.core.secure.Secrets
import cn.nfarms.core.secure.SoftwareSecrets
import cn.nfarms.core.store.AppFiles
import cn.nfarms.hub.engine.HarnessRunner
import cn.nfarms.hub.task.TaskHistory
import cn.nfarms.hub.task.TaskScheduler
import java.io.File
/**
* 手工依赖容器。
*
* 为什么没有 Hilt/Dagger:五个 App 都是单 Activity + 少量单例,
* 引入注解处理器要 KSP + 几十 MB 依赖,换来的只是「少写几行构造」。
* 这里一个 `by lazy` 就够,而且**启动快** —— 手机上冷启动时间是真的体感。
*/
class HubApp : Application() {
lateinit var container: Container
private set
override fun onCreate() {
super.onCreate()
container = Container(this)
}
}
class Container(private val context: Context) {
val files by lazy { AppFiles.of(context, "hub") }
/** `files/nfarms` 的绝对路径前缀 —— 界面要显示相对路径。 */
fun filesDirPath(): String = context.filesDir.path
val secrets: Secrets by lazy { SoftwareSecrets(context.packageName) }
/** 模型/产物的根目录。 */
val modelsDir: File by lazy { files.media("models").also { it.mkdirs() } }
val outDir: File by lazy { files.media("out").also { it.mkdirs() } }
val workDir: File by lazy { files.media("work").also { it.mkdirs() } }
val scheduler by lazy {
TaskScheduler(workDir, TaskHistory(File(files.root(), "task-history.json")))
}
val harness by lazy { HarnessRunner(workDir) }
fun ctx(): Context = context
}