avatar
文章
86
标签
12
分类
25
Home
Posts
Learn
Note
Categories
Tags
LogoBravestSnail's Blog
Home
Posts
Learn
Note
Categories
Tags

BravestSnail's Blog

实用命令
发表于2025-10-27|noteLinuxlinux命令
grep您可以使用 grep 命令在目录中查找包含特定内容的文件。以下是如何使用 grep 来查找包含 name="common_ir_select_broad_color" 的文件的命令: 1grep -rl 'name="common_ir_select_broad_color"' /path/to/your/directory 这个命令的含义是: -r 或 -R 是递归查找。 -l 是显示文件名而不是具体匹配的行。 'name="common_ir_select_broad_color"' 是您要查找的字符串。 /path/to/your/directory 是您要搜索的目录。 请将 /path/to/your/directory 替换为您要搜索的实际目录。 cut您可以使用 cut 命令来提取目录名称。以下是如何使用 cut 来提取第一个目录名称的命令: 1echo...
Android资源文件合并
发表于2025-10-27|noteAndroid杂项Gradle
什么文件是资源文件? /res目录下的所有文件, /assets目录 Manifest文件 需要合并的资源文件来源是哪?通常apk中的资源来源有3个,具体可以参考官网: 主资源(main source set):比如src/main/res 编译变量(Build variant source set): 比如src/demoDebug/res 库文件依赖(libraries): 也就是我们引进的aar。 为什么要合并?因为文件冲突了所以要合并。 那么随之而来的问题是系统如何唯一表示一个资源文件?相同resource type(anim/drawable/string等)和相同resource qualifier(比如hdpi,...
Gradle入门
发表于2025-10-27|noteAndroid杂项Gradle
Gradle基础 Gradle核心模型 Gradle依赖管理 AGP的基础配置及多渠道打包[^AGP] AGP的高级配置 MultiDex打包和Maven发布 APT自动化代码[^APT] APT注解处理器实现Router APT注解-提升 组件化 进阶KSPKSP官方文档Gradle官方文档 [^AGP]: 全称Android Gradle Plugin,即Android官方开发的Gradle插件。[^APT]: 全称Annotation Processing Tool, 即注解处理器,是一种处理注解的工具。
Gradle的构建
发表于2025-10-27|noteAndroid杂项Gradle
Gradle Task GraphsGradle在执行任务之前,会先构建任务图(有向无环图)。因此Gradle会跳过不属于当前构建的任务。 Build PhasesGradle构建分为三个阶段:初始化、配置、执行阶段。 Initialization 查询settings文件。 计算setting,确定那些项目和builds参与构建。 为每一个项目创建一个Project。 Configuration 计算参与构建的每个项目的bulid scripts。 为所有要求的任务创建一个任务图。 Execution 按照任务依赖的顺序安排和执行任务。 Initialization查找项目的settings文件,计算settings文件。在这个期间Gradle会将库添加到build...
什么是声明式UI
发表于2025-10-27|noteAndroidcompose
到底什么是声明式UI,声明式可以理解为一种编程思维,只要是基于这种编程思维来使用的,都可以称之为声明式UI框架。 过程式思维拿View来举例,View更多是一种过程式的思维,我们在描述一个View的时候是不会描述它的状态的,或者只会描述它的初始状态。如果后续想要更新View的状态只能获取到View的实例,再通过相应的方法改变它的状态。这就是过程式的思维。 声明式思维声明式思维的工作流程类似于刷新网页。即我们仍然正常地去描述一个控件,但是需要附带上它的状态。然后当有任何状态发生改变时,只需要像刷新网页一样,让整个界面的所有元素都刷新一遍,自然所有状态都得到更新了。事实上,所有的声明式UI框架都会采取优化措施,避免刷新整个界面,而是只更新状态有变的控件。
基础组件
发表于2025-10-27|noteAndroidcompose
Button默认样式 Button的lambda块中可以传入任意的Composable组件,但一般是放一个Text在里面 123Button(onClick = { println("确认onClick") }) { Text("默认样式")} 按钮的宽高 如果想要宽一点或高一点的Button,可以通过Modifier修改宽高,例如在Column中可以通过Modifier.fillMaxWidth()指定占满父控件,此外还可以通过 shape 参数修改Button的圆角弧度 123456789Column(horizontalAlignment = Alignment.CenterHorizontally) { Button( onClick = { println("确认onClick") }, modifier = Modifier.fillMaxWidth().padding(all = 5.dp), ...
Compose的modifier
发表于2025-10-27|noteAndroidcompose
Modifier的基本使用Modifier修饰符是Jetpack Compose中用来修饰组件的,提供常用的属性,写布局时几乎所有Composable组件的大部分属性都可以用Modifier 来修饰。官方在开发Compose UI时,最初尝试过将所有属性全部以函数参数的形式提供,但是那样太多了,他们也尝试过像Flutter那样的方式,将属性也作为一个组件进行嵌套,但这样又很容易让人感到困惑,所以才诞生了Modifier,将大部分组件常用属性封装成Modifier的形式来提供,哪个组件需要就在哪个组件上应用。我认为Modifier是Compose中最优秀的设计点之一。 1234567891011121314151617181920212223242526272829@Composablefun ModifierExample() { Box(modifier = Modifier.size(200.dp)) { // size同时指定宽高大小 Box(Modifier.fillMaxSize() // 填满父空间 ...
State Snapshot System
发表于2025-10-27|noteAndroidcomposeCompose深入探索
Jetpack Compose 有一种特殊的方式来表示状态和传播状态变化,从而驱动最终的响应式体验:状态快照系统(State snapshot system)。这种响应式模型使我们的代码更加强大和简洁,因为它允许组件根据它们的输入自动重组,并且只在必要时重组,避免了我们过去在Android View 系统中手动通知这些更改所需的所有样板文件。 什么是 Snapshot StateSnapshot state(快照状态)是指可以被记录并观察其变化的隔离状态。当我们调用像mutableStateOf、mutableStateListOf、mutableStateMapOf、derivedStateOf、produceState、collectAsState等函数时,我们所得到的状态就是快照状态。所有这些函数都返回某种类型的状态,开发人员经常称其为快照状态。 “Snapshot state” 这个术语的命名是因为它是 Jetpack Compose...
Compose runtime
发表于2025-10-27|noteAndroidcomposeCompose深入探索
到目前为止,我们将 Compose runtime 在内存中维护的状态称为“Composition”,这是一个较为肤浅的概念。让我们从了解用于存储和更新Composition状态的数据结构开始探索。 slot table 和 change list我发现这两种数据结构之间存在一些混淆,可能是由于目前缺乏关于Compose内部结构的文档。现在,我认为有必要首先澄清这一点。 slot table(插槽表)是一个优化的内存结构,runtime 使用它来存储组合的当前状态。它在初始组合时填充数据,并在每次重新组合时更新。我们可以把它看作是所有Composable函数调用的跟踪,包括它们在源码中的位置、参数、记住的值、CompositionLocals等等。它包含了在合成过程中发生的一切内容。所有这些信息将被 Composer 稍后用于生成下一个更改列表,因为对树的任何更改总是依赖于当前状态。 slot table 记录Composable的状态,而 change list 则是对节点树进行实际更改的内容。每次 Composable...
Compose中的动态加载、插件化技术探索
发表于2025-10-27|noteAndroidcomposeCompose深入探索
在传统的 Android 开发模式中,由于界面过分依赖于 Activity、Fragment这样的组件,一个业务模块中往往会存在着大量的 Activity 类,因此诞生了很多的插件化框架,这些插件化框架基本都是想方设法的使用各种Hook/反射手段来解决使用未注册的组件问题。在进入 Jetpack Compose 的世界以后,Activity 的角色被淡化了,由于一个 Composable 组件就可以承担一个屏幕级的显示,因此我们的应用中不再需要那么多的 Activity 类,只要你喜欢,你甚至可以打造一个单 Activity 的纯 Compose 应用。 本文主要尝试探索几种可以在 Jetpack Compose 中实施插件化/动态加载的可行性方案。 以 Activity占坑的方式访问插件中的 Composable 组件这种方式其实传统 View 开发也可以做,但是由于 Compose 中我们可以只使用一个Activity,而其余页面均使用 Composable...
123…9
avatar
BravestSnail
文章
86
标签
12
分类
25
Follow Me
公告
This is my Blog
最新文章
IO模型2025-10-27
Java并发2025-10-27
在U Boot环境下查看U盘文件2025-10-27
wsl代理2025-10-27
Android 系统导航栏模式切换与查询2025-10-27
分类
  • learn15
    • 01 plan7
    • 02 踩坑记录2
    • Java优化3
    • 设计模式2
  • note57
    • Android51
      • BLE1
标签
Java学习 Kotlin Java SharedPreferences Activity Android Handler View LiveData Paging3 PlantUML 问题
归档
  • 十月 2025 73
  • 三月 2023 1
  • 二月 2023 1
  • 九月 2022 2
  • 八月 2022 5
  • 四月 2022 1
  • 三月 2022 2
  • 四月 2020 1
网站信息
文章数目 :
86
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2019 - 2025 By BravestSnail
框架 Hexo 7.3.0|主题 Butterfly 5.3.5