标签 Kotlin 下的文章

大家好,我是老刘

最近TIOBE在2026年一月的编程语言排名出来了。

不出意外的,Dart又排在25名之后了。

为啥作为跨平台一哥Flutter的编程语言,Dart的排名如此落后?除了Flutter,Dart还有哪些应用场景?

本文我们来讨论一下这些问题。

1. Dart 语言近半年排名趋势

老刘统计了 Dart 语言在 TIOBE 索引中的近半年排名趋势,发现 Dart 语言的排名一直保持在 25 名之后,而其 Ratings 也始终保持在 0.60% 左右。

日期Dart在TIOBE的排名Ratings
2025-07280.61%
2025-08280.59%
2025-09280.62%
2025-10270.62%
2025-11260.69%
2025-12260.64%
2026-01260.63%

数据来源:https://www.tiobe.com/tiobe-index/

2. TIOBE并非根据语言使用量进行排名

TIOBE 索引是一个衡量编程语言 popularity 的指标,它根据每个月的搜索量来计算每个语言的排名。

每个月,TIOBE 会发布一个排名,该排名是根据搜索量的百分比来计算的。

它聚合了全球主流搜索引擎和网站的数据,包括 Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube, Baidu 等25个以上的平台。

计算Ratings逻辑大致如下:

  • 首先计算每种语言在各个搜索引擎上的“命中数”(hits)。
  • 对这些数据进行归一化处理(消除不同搜索引擎总量差异的影响)。
  • 最后计算出该语言在所有被统计语言总搜索量中的 占比(即 Ratings) 。

所以TIOBE的排名只能代表Dart语言在众多编程语言中的受关注程度,而非其在实际开发中的使用数量。

3. 为啥Dart语言排名始终不高?

与 2025 年大幅攀升的语言(如 C# 成为 2025 年度语言、 Perl 从 32 名冲回 11 名、 Zig 冲到 42 名)相比,Dart 的排名非常稳定,没有出现剧烈的排名跳跃。

根本原因是Dart语言的排名是与Flutter深度绑定的。

和大多数编程语言不通,比如Java用于服务端开发、Android开发的多个不同的领域。

而Dart的主要应用场景只有Flutter。

如果Dart在未来没有脱离Flutter用于其它方向,那么它的排名就会继续保持在20名之后。

4. Dart排名稳定代表了什么?

我们来看一下Dart排名波动最大的时间点。

可以看到Dart语言最受关注的时间是在2017年Flutter刚发布的时候。

之后是Flutter的高速扩张然后成为客户端跨平台开发的首选框架。

最近这几年,Flutter逐步进入了稳定期,Dart语言的关注度也开始稳定下来。

所以Dart语言的排名稳定从某种程度上代表了Flutter生态相对比较稳定。

这对我们这些Flutter开发者来说是一个好消息。

毕竟没有一个程序员喜欢自己吃饭的语言框架三天两头出现大的变动。

而且语言和框架的稳定带来的另一个好处就是AI友好度的提升。

因为AI模型通常是基于某个语言或框架训练的,而如果这些语言或框架经常变化,那么在日常开发中就需要程序员不停的去修正AI生成的代码。

5. 希望Dart语言能有更多领域的应用

之前老刘就专门写过文章,之前我喜欢Kotlin的强大,现在更喜欢Dart的简洁。

[Kotlin vs Dart:当“优雅”变成心智负担,我选择了更简单的 Dart
](https://mp.weixin.qq.com/s/KyqmMXTE4GyAJU2NjJYtUg)

随着编程风格越来越趋向于简洁、稳健。

我也越来越喜欢Dart这种既能同时支持面向对象和函数式编程两种编程范式,同时又能在日常开发中保持语法简洁的编程语言。

所以老刘还是希望能有更多的领域可以应用到Dart语言。

老刘觉得在以下一些领域Dart还是有用武之地的:

服务端开发 (Backend)

如果能用 Dart 写后端,实现**前后端同构**,复用同一套 Model 和 业务逻辑,将极大地降低全栈开发的门槛。像 Serverpod 和 Dart Frog 这样的框架已经开了个好头,但还需要更完善的生态。

命令行工具 (CLI)

Dart 优秀的 AOT 编译能力,使其生成的二进制文件启动极快且无需依赖环境。编写跨平台的脚本工具,Dart 其实比 Python 或 Node.js 更具部署优势。

WebAssembly (Wasm)

随着 Dart 对 WasmGC 的支持日益完善,未来 Dart 代码将能以近乎原生的性能运行在浏览器中,这为高性能 Web 应用提供了新的可能。
当然这部分可能还是和Flutter有很大的绑定关系。

总结

如果Dart能像JavaScript从浏览器走向Node.js那样,成功在服务端或CLI领域突围,那么对于我们这些Flutter开发者来说,将是一个好消息。

因为这意味着我们掌握的这门语言,将拥有更广阔的舞台,而不仅仅局限于画UI。

那么作为开发者,我们不妨在日常的小工具、脚本或者简单的后端服务中,多给 Dart 一些机会。

毕竟,生态的繁荣,离不开每一个开发者的尝试与贡献。

🤝 如果看到这里的同学对客户端开发或者Flutter开发感兴趣,欢迎联系老刘,我们互相学习。

🎁 点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。可以作为Flutter学习的知识地图。

🚀 覆盖90%开发场景的《Flutter开发手册》

📂 老刘也把自己历史文章整理在GitHub仓库里,方便大家查阅。
🔗 https://github.com/lzt-code/blog

想必做移动端的朋友们肯定或多或少听说过 Kotlin 和 Compose Multiplatform,
前者是 JetBrains 开源、Google 首推用于 Android 开发(自 2019 年 Google I/O 大会起)的现代开发语言,
后者是使用 Compose API 开发多端(Android、iOS、桌面端、Web 端等)应用的 UI 框架。

但是不论你是使用 Compose/Kotlin 开发应用,还是使用其他解决方案,都会有一个苦恼:使用代码编写 UI,
终归是不如大家最喜欢的拖拖拽拽来的直观。你选择 Compose/KMP 的理由,其中大概率有一条会留给它的多平台逻辑共享与原生互操作能力,
避免中间层的出现,可以有更好地表现效果与上限。

那么有没有什么办法,可以即让我使用 Compose 开发应用、又可以借助 AI 神力并且以拖拉拽的形式而免去需要写代码的苦恼?
如果你有这些想法,那么也许你可以关注一下 ComposeFlow: 一个 Compose Multiplatform 的可视化应用构建器。

注意,这篇文章图片会比较多喔~

什么是 ComposeFlow

ComposeFlow 是一个 Compose Multiplatform 的可视化应用构建器,它通过 AI 代理和直观的拖放界面,
赋能开发者、企业家、设计师和产品经理创建功能完整的应用程序。它能生成完整的、可运行的 Compose Multiplatform 项目,
并提供干净的 Kotlin 代码,支持桌面、Android、iOS 和 Web 等多个平台。

以上是它们的 GitHub 仓库中的首段自我介绍。
简单来说,它就是一个 AI 驱动、可视化、拖拉拽的 Compose Multiplatform 开发工具。


图片来自官方 GitHub README 中的配图。

更多信息,你可以前往它们的 文档 了解更多。

使用

安装

首先需要知道,这个工具目前仍处于早期阶段,因此可能存在各种各样的问题,我们今天就只是尝鲜为主。

根据 GitHub 的说明,我们前往它们的下载页面去下载对应的应用(Windows 用户可以直接使用 Microsoft Store 安装)。
安装完成后,它会提示你登陆账号(也可以不登录,只不过那样就不能使用 AI 服务了),我选择使用 Google 账号登陆。

登录后,这就是它的首页:

创建项目

毕竟是新安装的,我们先来创建一个项目。

就按照它的推荐提示词,创建一个任务管理的应用,为了方便演示,我加了一句 “USE CHINESE”,其他的内容均未修改。




通过 AI 提示词创建一个项目的基本过程就在上面了。它会根据你的基础提示词,设计出几个详细的界面设计,
然后再根据每个界面的细节内容生成具体的界面布局与样式,然后在右侧供你预览。当一切就绪,你就可以直接创建项目了。

作为一个尝鲜体验,我就不修改什么了,直接默认并创建即可~

那么接下来,我们点击 create project 创建一个项目看看。

项目视图

首次进入项目内容,它会给你一个引导,欢迎你,并告诉你一些操作方法:

项目的左侧,是各类工具视图,它们提供了添加文字、图标等组件的 UI 构筑功能,以及布局功能等等,如图所示:

接下来,为你介绍了画布的正中央:你的 UI 表现效果,以及画布尺寸、明暗等内容的配置和展现。

随后是右半侧,提供了选中组件的各类属性信息的展示与编辑等。

当然,作为一个 AI 驱动的工具,除了构建项目之外,肯定也会在其他功能上增加 AI 能力。左上角的小图标便是提供 AI assistant 能力的地方。

接下来引导就结束了,然后便是我们自由发挥的时候啦。
下面便是我生成的项目的一些基本样式与信息:




可以看到信息和功能还是相当丰富的。而且除了基本的 UI 设置之外,左侧工具还可以选择切换到:

  • 数据 / 枚举类型定义
  • App 状态 (App state)
  • Firesotre (好像是某种 NoSQL 的云服务?)
  • API editor (看上去是配置 API 调用的)
  • 配置主题配色的 Theme editor
  • 图片图标等资源的管理 Assets
  • 项目和应用的基础配置

可谓是功能相当丰富。





下载 & 安装项目

不过这次主打一个基础体验,我也就不做什么修改了,直接点击右上角的 “下载代码”,下载一份 Web 版的看看样子。
有一说一,它这个下载成功的提示真的很不起眼哈哈


可以看到,项目的大概文件结构是这个样子的:

安卓、iOS 和 JS 都有(虽然不知道为什么没用 WasmJs),也是相当全面了。
让我来随便找几个源代码文件看看内容:

嗯… 整体来说还是可以的,不过也有一些小缺陷:

  1. 代码可以说几乎没什么注释。
  2. 由于我一开始的提示词用了 USE CHINESE,结果导致它生成的代码中存在一些使用中文命名的类型。

上面这几个小缺陷我觉得如果用英文原版的提示词,或者再精修一下、将这些问题都在提示词中说明白,
那应该也都是可以避免的,所以问题不大。

运行项目

考虑到我没配置移动端的开发工具和相关的东西,咱们就跑一下 web 端看看效果吧。




嗯… 让我们先忽略它中文乱码的问题,这是 Compose for Web 渲染 canvas 的老问题了,找个中文字体加载下就好(或者有什么配置)。
单从 UI 布局上来看,是基本符合之前的设计布局的。

只不过不知道是不是应该在下载的时候选什么配置,这个 Web 端出来的布局仍是竖屏手机的样式哈哈哈,
之前在 UI 设计阶段是有宽屏 Web 布局的样式的,可能我漏掉了什么选项吧。不过我也懒得回去找了,就不再重新捣鼓了。
我将它生产出来的这个项目发布到了 GitHub 的仓库中:GitHub - ForteScarlet/ComposeFlow-TaskManagementApp: A demo project for ComposeFlow
你如果感兴趣的话,也可以去看看。

尾声

对此工具的体验就到此为止啦~ 有一说一在 UI 构建的工作区里功能比我想象要丰富不少。
不过毕竟工具也还是在早期阶段,还是会有不少细枝末节的小问题存在的,尝尝鲜还可以,不过想要非常优质的生产级体验还是有些距离。总而言之,未来可期!

至于我是怎么知道这个的呢,是因为前阵子看到 JetBrains 的布道师关注了这个仓库的所述组织,
于是乎就进去看了下,而后便有了这篇文章。

不管怎样,感谢你读到这里,祝你有愉快的一天,我们下次再见~


📌 转载信息
转载时间:
2026/1/24 06:42:41

Kite:Kotlin/Java 通用的全自动 ORM 框架

Kite 是一个高效的轻量级 ORM 框架,基于 Kotlin 编写,开箱即用,内置分页查询、增删改查等常用功能,支持多表操作。它支持 PostgreSQL、MySQL、Derby 等多种数据库,旨在通过简化数据库操作,减少代码量,提升开发效率。

框架特点

  • 全自动映射:无需手动编写 SQL,Kite 会自动根据实体类生成相应的数据库操作语句
  • 支持自定义 SQL:在需要时,可以编写自定义 SQL 语句,满足复杂查询需求,还可以像写代码一样写流程控制语句
  • 多数据库支持:支持 PostgreSQL、MySQL、Derby 等主流关系型数据库
  • Kotlin/Java 双语言支持:既可以在 Kotlin 项目中使用,也可以在 Java 项目中无缝集成
  • 轻量级设计:无过多依赖,性能优秀
  • 丰富的 API:提供简洁直观的 API,支持各种复杂查询和操作
  • Spring Boot 集成:提供 Spring Boot Starter,便于在 Spring Boot 项目中快速集成

使用方法(Spring Boot 集成示例)

Maven 中央仓库: kite-spring-boot-starter
  1. 向项目添加以下依赖:
  • Maven
<dependency>
   <groupId>io.github.tangllty</groupId>
   <artifactId>kite-spring-boot-starter</artifactId>
   <version>${kite.version}</version>
</dependency>
  • Gradle
implementation("io.github.tangllty:kite-spring-boot-starter:${kite.version}")
  1. 在数据库中创建表
使用 MySQL 演示
create table account (
  id          bigint not null auto_increment,
  username    varchar(32)     default '',
  password    varchar(32)     default '',
  balance     decimal(10,2)   default '0.00',
  create_time datetime        default null,
  update_time datetime        default null,
  primary key (`id`)
);

insert into account (username, password, create_time, balance) values
('admin', 'admin123', '2020-01-01 12:00:00', 1000.10),
('user', 'user123', '2024-05-02 8:30:00', 101.00),
('guest', 'guest123', '2022-03-03 15:00:00', 10.00),
('tang', 'tang123', '2019-06-01 21:30:30', 1.88),
('jeo', 'jeo123', '2024-07-01 5:59:59', 0.10);
  1. application.yml 文件中配置数据库连接信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/kite-test
    username: root
    password: password
  1. account 表创建模型类
  • Java
import com.tang.kite.annotation.id.Id;
import com.tang.kite.annotation.id.IdType;
import java.math.BigDecimal;
import java.time.LocalDateTime;

public class Account {

    @Id(type = IdType.AUTO)
    private Long id;
    private String username;
    private String password;
    private BigDecimal balance;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;

    // Getters and Setters
}
  • Kotlin
import com.tang.kite.annotation.id.Id
import com.tang.kite.annotation.id.IdType
import java.math.BigDecimal
import java.time.LocalDateTime

class Account (

    @Id(type = IdType.AUTO)
    var id: Long? = null,
    var username: String? = null,
    var password: String? = null,
    var balance: BigDecimal? = null,
    var createTime: LocalDateTime? = null,
    var updateTime: LocalDateTime? = null

)
  1. 继承 BaseMapper 接口创建 Mapper 接口
  • Java
import com.tang.kite.mapper.BaseMapper;
import com.tang.kite.spring.annotation.Mapper;

@Mapper
public interface AccountMapper extends BaseMapper<Account> {
}
  • Kotlin
import com.tang.kite.mapper.BaseMapper
import com.tang.kite.spring.annotation.Mapper

@Mapper
interface AccountMapper : BaseMapper<Account>
  1. 在 Spring Boot 应用类上添加 @MapperScan 注解
  • Java
import com.tang.kite.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.tang.application.mapper")
@SpringBootApplication
public class KiteApplication {

    public static void main(String[] args) {
        SpringApplication.run(KiteApplication.class, args);
    }

}
  • Kotlin
import com.tang.kite.spring.annotation.MapperScan
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@MapperScan(["com.tang.application.mapper"])
@SpringBootApplication
class KiteApplication

fun main(args: Array<String>) {
    runApplication<KiteApplication>(*args)
}
  1. 测试 Mapper 接口
  • Java
import com.tang.demo.mapper.AccountMapper;
import com.tang.kite.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.tang.application.mapper")
@SpringBootApplication
public class KiteApplication {

    public static void main(String[] args) {
        var context = SpringApplication.run(KiteApplication.class, args);
        var accountMapper = context.getBean(AccountMapper.class);
        var accounts = accountMapper.select();
        accounts.forEach(System.out::println);
    }

}
  • Kotlin
import com.tang.demo.mapper.AccountMapper
import com.tang.kite.spring.annotation.MapperScan
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@MapperScan(["com.tang.application.mapper"])
@SpringBootApplication
class KiteApplication

fun main(args: Array<String>) {
    val context = runApplication<KiteApplication>(*args)
    val accountMapper = context.getBean(AccountMapper::class.java)
    val accounts = accountMapper.select()
    accounts.forEach { println(it) }
}

文档与社区

官方文档

详细的使用文档请参考:

源码

Kite 的源码托管在 GitHub 和 Gitee 上,您可以在以下地址查看和贡献:

总结

Kite 是一个功能强大、易于使用的 ORM 框架,它通过全自动映射和简洁的 API,大大简化了数据库操作的开发工作。无论是在 Kotlin 项目还是 Java 项目中,都能提供高效、便捷的数据库访问体验。

如果您正在寻找一个轻量级、高性能的 ORM 框架,Kite 绝对值得一试!

Android studio安装教程 保姆级教程

如果想要彻底重装Android studio可以删除
目录C:\Users\用户名
中的以下几个文件夹。
.android
.gradle
.Android studio(Android studio 4.0版本之前才有)

隐藏文件夹(Android studio 4.0版本后才有)
C:\Users\用户名\AppData\Roaming\Google\AndroidStudio4.2
C:\Users\用户名\AppData\Local\Google\AndroidStudio4.2
比如:

**安装Win 11 环境下 Android Studio Iguana | 2023.2.1
版本为例。(部分截图为旧版本不影响使用)**

下载地址: https://pan.quark.cn/s/d557657e15a6

首先下载Android studio安装包

趁下载的时间,我们进入电脑的一个盘跟目录下面,创建我们Android
studio的安装目录,sdk的目录,项目的存放目录,方便我们日后查找

这里我们创建的是AndroidTool目录,创建如上图所示五个子目录。

AndroidStudio 存放Android studio的软件程序的地方,也就是Android

studio的安装目录
AndroidSDK 存放SDK的地方,包含adb工具等
AndroidProject 存放我们写的Android
项目代码,建议把我们所有的源代码放在此目录下方便日后查找
AndroidDrive 可选
用来存放我们虚拟机的地方,设置方法参考本文末尾,非必须。默认在C盘下存放。
AndroidGradle 可选
用来存放gradle缓存依赖的地方,非必须。默认在C盘下存放。

下载完成后运行文件,进入如下界面

点击next

点击next

选择对应的Android studio安装目录,这里我们选择我们一开始创建好的Android
studio目录即可。然后继续点击next

点击install

等待安装完成!

安装成功后会在开始菜单存在Android Studio的启动图标,点击即可启动Android
studio。

安装成功点击finish,等待启动。

随便点击一个,发不发送报告都行。

注:以下截图为旧版本截图,不过不影响使用。

进入熟悉的画面

询问我们是否有配置文件导入,这里直接选择不导入,点ok
等待文件下载。

进度条走完后出现弹窗【无法访问sdk】,先点击cancel。

再点击next

选择安装类型,这里我们自定义,第二个,点击next

设置我们的jdk目录,可以默认的,也可以自定。这里我们选择默认即可。

选择风格,黑暗模式

设置sdk目录,这里选择我们一开头创建的AndroidSDK目录。(Android Virtual
Device 无法勾选可以先跳过直接点击next)点击next

设置虚拟机相关的配置,根据电脑配置自行拉取,这里我们默认。

确认配置信息,点击next。

确认所有选项,都点击了accept,然后点击Finish。
等待下载完成。

等待下载安装完成。

下载安装完成,点击finish。

下面开始创建hello word项目,点击 new project

注:这里Empty Activity与Empty Views
Activity的区别是主要是UI框架的不同。
Empty Activity:为谷歌新推出的Jetpack
Compose声明式UI框架,主要的开发语言为kotlin,不支持java
Empty Views Activity:为Android
传统的View控件布局的项目模板,支持kotlin和java。
初学者一般建议采用Empty Views Activity进行入门学习。

选择empty activity模板,点击next

设置项目名称,包名,路径(路径选择我们一开始创建的AndroidProject目录,注意加项目名称,尽量不要有中文),选择语言(java或kotlin都可以),选择最低支持的Android
版本,这里选择6.0,点击finish。

等待下载内容的完成。

点击finish。

等待项目构建完成
这里由于是第一次启动,所以需要下载gradle以及Android项目需要引用的包,视网络好坏程度决定等待时间长短

点击绿色三角形位置,运行项目。

等待项目构建完成。

成功显示Hello World!。
到这里就安装成功啦。

常见问题:

1.在安装Android Studio
的过程中进行到设置SDK目录这一环节时,可能出现以下的情况,无法勾选需要安装的选项,导致后续步骤出现以下情况。

可以尝试修改电脑的系统时间为美国太平洋时间,然后删除文章前面所述的相关文件,重新打开Android
Studio配置一遍即可。

初学者进阶操作:

1. 下载sdk工具(可选)

从file->setting打开下面界面

这里是下载Android 版本,和sdk构建工具的地方。
一般我们只需要下载我们需要的版本和对应的工具,当然也可以全量下载,全量的话估测大概需要500G的硬盘空间。
这里演示下载最新的Android版本和构建工具。

勾选对应的版本

勾选对应的版本

点击ok。如果出现同意协议的界面,则全部点击accept,然后点击next

等待下载完成。

点击finish

这里已经下载成功了

2. ANDROID_EMULATOR_HOME 虚拟机环境变量(可选)

自从学了Android,C盘天天爆红怎么办?C盘一查,C:\Users\用户.android这个文件占了10+GB。怎么办?
这时候可以创建ANDROID_EMULATOR_HOME环境变量。对于Android studio
4.3已下的用户则需要设置ANDROID_SDK_HOME。
这里我们简单演示已下,如何配置环境变量到我们的目录。

如果不设置环境变量,开发者创建的虚拟设备默认保存在
C:\ Users \用户.android目录下;
如果设置了ANDROID_EMULATOR_HOME环境变量,那么虚拟设备就会保存在%ANDROID_EMULATOR_HOME%/.android路径下。
这里有一点非常容易混淆的地方,此处的%ANDROID_EMULATOR_HOME%环境变量并不是Android
SDK的安装目录。

3. Gradle 位置变更(可选)

C:\Users\用户.gradle也是也非常容易变成非常大的文件夹,这个可以直接在Android
studio进行改动

直接选择相应的路径即可。

项目历程

初出茅庐

2020 年 7 月,那会刚高中,我正在尝试 Android 原生开发,当前恰好需要缓存一些 B 站的视频素材,就在找手机上能直接缓存提取好的 APP ,那会我还不能经常用电脑,我记得当年也有一个简单实现了功能的 APP ,我当时就在想能不能给自己做一个,就这样,我的第一个 Java 原生应用诞生了——BILIBILIAS ,其中 as 取自单词 analysis ,当时还发布了一篇文章:Bilibili 番剧/视频下载 || BILIBILI AS,这个 APP 算是我整个安卓开发的启蒙了,那会还是用 Java ,当第一个原生程序真正的跑起来,那种感觉是无与伦比的,这个项目当年还非常简陋,只是按钮和图片组成的,我清晰的记得它的样子。
我那会刚开始在 B 站发布一些视频,我希望向其他人分享这个项目的过程,当时这个项目就被开源了,我还可以在 git 记录看到。

那虽然是一个简陋的 APP ,但我还是想分享出去,没想到当时就收获了很多用户,这让我看到了开发程序的另外一种可能,这之后,我决定继续优化这个 APP ,通过这个形式学习安卓开发。同年 11 月,我发布了新的版本[ B 站番剧/视频下载] BILIBILI AS v1.0.7 更新,当时 BUG 非常多,只能说勉强可以用,不过还是有那么多人来反馈。

当时我找了其他伙伴来处理服务器的事情,我们使用最便宜的学生机,轻量机来部署后端服务,用来发布更新和通知,应该这时这个 APP 就不止一个人维护了。

牛刀小试

可能是尝到了甜头,也可能是发现有这么多用户,我觉得需要再做的更好一些,但当时实际上并不懂重构的概念,只是觉得应该在现在的基础上优化优化,我就继续对 UI 进行了一些调整,将之前的代码可能加了一些封装,我正在不断尝试安卓原生开发带来的新 API 和功能,当时真的是如饥似渴,每周放假就扎进去开发,21 年的 2 月,我发布了一个看上去还不错的版本:[教程] 爆肝!自制 B 站缓存软件
当时还做了桌面小组件:搁置已久的安卓版本 B 站桌面小部件来啦!!!
这个时候,这个项目的另外一个使命来了,我发现我们已经有了一部分用户积累,这个时候我开始在 APP 加上轮播图,本来是用来做一些通知的,但我觉得我们已经有有一部分用户,应该有一些担当,就这样,这个轮播图有的时候我会推荐一些新动漫,有的时候会发布 B 站的一些重要通知,部分特殊节日和国家事件,我们也会宣传,当年疫情期间,我们还为大家提供了疫情地图显示。

崭露头角

高中结束的时候,毫无疑问的,我选了计算机相关专业,现在来看是毫无疑问,但回头看实际上是这个 app 影响了我的选择,它是鉴定选择软件行业的后盾。当时参加了一次字节跳动组织的青训营,我才发现,欸,原来架构设计是这样的,原来还有 DataBinding 这样的库,原来还有序列化这么一说,那我之前做的是什么?当时结营后我就将我的 APP 进行了一次重构,当然,现在看其实当时只是修改了一些关键的地方,但,这至少看上去像一个 APP 了。
当时我好像还写了一篇文章,关于饺子播放器的,但是那个版本的截图不太找得到了,当时也没有怎么宣传:饺子播放器实现抖音点击布局暂停及双击效果

小有名气

大学后我才开始真正的接触到 Kotlin ,新东西总是让人畏惧,但是新知识我真的很难不去用,老软件 BUG 实在是太多了,而且还不能多任务下载,所以我当时还是做了个大胆的决定,那就是重新开发!使用 Kotlin 和 DataBinding 技术。
23 年,项目的重构版本 2.0 来了,这次重构实际上是从软件架构上进行了一些设计,虽然现在看当时做的还是拉完了,但在当时我才真正接触到复杂项目开发,设计代码结构,有非常重要的意义。
[分享] 重制 B 站视频缓存工具
这个版本发布后,接下来的几年中都采用了 23 年开发的架构,在这个基础上进行更多功能的扩展,当然,因为当初设计局限性还是很大,导致后期还是没办法继续迭代了。

这些年来,BILIBILIAS 积攒了不少用户,很多动漫爱好者,学生等群体都需要使用它。

光荣进化

到现在,我觉得需要到更进一步的阶段了,JetpackCompose 技术已经逐渐稳定,我开始采用更高效的响应式框架进行开发,这就是我们现在的 3.0 版本!
这既是尝试新技术,也是对老用户的一个交代,还有人需要它,现在我就还需要继续维护一段时间。

项目困境

现在用户的需求逐渐变多,但社区开发人员主力只有我一个,到了现在,我希望去认真的设计项目的每一块内容,确实是跟不上用户的需要,有很大工作,设计都需要一点一点的推进。
所以我希望可以招揽更多对这个项目感兴趣的社区成员参与这个项目的开发

项目地址:bilibilias
项目预览:GooglePlay

我真是个大宝贝,这都能让我发现

佬友们藏的好深啊,还掖着啥好东西吗?
分享一下呗~

下载地址



感谢佬友 @rapbull 分享补充,有二十多个其他的软件源,自定义应用监控更新,牛掰!


项目地址

下载地址

谢谢佬友支持~:


📌 转载信息
原作者:
you_z
转载时间:
2026/1/3 11:57:42