DAYS of DASH

IF you shed tears when you miss the sun, you also miss the stars.

Android Gradle JDK 和 Foojay Toolchain

Gradle Client 和 Gradle Daemon 的 JDK https://docs.gradle.org/current/userguide/gradle_daemon.html Gradle 其实分为两个部分,可能使用到不同的 JDK,但绝大部分情况下是使用相同JDK。 Gradle Client,也就是我们在terminal 中使用的 gradle cli。 Gradle Daemon(Java Toolchain),真正负责构建和编译时用到的守护进程和工具链。 在命令行中执行 ./gradlew --version 可以看到相关信息(必须配置 JAVA_HOME): ...

August 26, 2026 · aitsuki

Compose rememberUpdatedState 的用法和本质

rememberUpdatedState 本质上是为了让长生命周期的 effect / listener 闭包引用到最新的变量值,而不是重启 effect 或重新设置 listener。 原因是长生命周期的闭包捕获的是初始值 来看一个容易误解的例子 @Composable fun Demo(name: String) { LaunchedEffect(Unit) { delay(3000); println(name) } } 假设初始传入的是 name = "A",1 秒后外部重组,name 变成了 "B"。很多人会直觉以为 3 秒后打印的是 "B",但实际上,大概率打印的是 "A"。 ...

April 2, 2026 · aitsuki

ReactNative配置Flavor

在客户端开发中,配置 Flavor 是必不可少的环节。Android 可以通过 flavor 配置,flutter 可以通过 –dart-define 配置。 ReactNative 相对麻烦一些,一是编写 RN 原生模块将原生端配置好的 flavor 传输到 RN 端。 二是使用 react-native-config 库,它其实就是自动干了一所需要的事情。 ...

January 14, 2026 · aitsuki

Android Compose 自定义表单组件

表单组件 Flutter 的 Form 组件,ReactNative 中的 RHF 都是体验非常不错的表单组件,特别是 flutter 的。 但是 Compose 一直没有找到合适的表单组件,所以我根据自身需求自定义了一个: ...

January 13, 2026 · aitsuki

Android状态持久化

App 状态和用户状态 在日常项目开发中,我们通常都会维护一些状态,比如 App 级别的全局状态有用户是否已登录、是否同意了隐私协议、是否完成新手引导等。或者是用户级别的状态,比如首页是单列还是双列展示、是否开启深色模式、某些功能开关等。 这些状态的特点是不复杂,但是访问和修改频繁,并且需要立马反应到 UI 上。 ...

January 13, 2026 · aitsuki