Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年
Android Studio 1.0 宣发于 2014 年 12 月,而现在时间来到 2025 ,不知不觉间 Android Studio 已经陪伴 Androider 走过十年历程。
Android Studio 10 周年,也代表着了我的职业生涯也超十年,现在回想起来依然觉得「唏嘘」,还记得十多年前从嵌入式转入安卓的时候,搭建的工作环境还是 Eclipse + ADT , JDK 也还是甲骨文的 Java,而现在 Android Studio 都内置可切换的 OpenJDK 版本了。
在 Eclipse 时代,搭建 Android 开发环境相当麻烦,比如需要单独下载 JDK,然后下载 Eclipse,然后用更新中心配置它指向 Android,之后安装适用于 Android 的 Eclipse 插件,然后将该插件配置为指向 Android SDK 安装。
而相比较 Eclipse IDE 使用的 Ant CI 构建,Android Studio 在 2013 年 Google 大会发布后就宣布采用 Gradle 作为构建系统,不知道大家是否还记得 0.1 版本尝鲜时的这个界面:
随着 Android Studio 1.0 的正式发布,Gradle 也开始正式进入 Android 开发者们的视野里,相信起初不少开发者对于 Gradle 是抗拒的,因为真的会有各种各样的原理导致项目跑不起来,更别说迁移了。
相信我,现在的 AGP 再怎么坑,都比当年靠谱很多。
我还记得,2015 年的时候我去了一家新公司工作的第一件事,就是把它们历史的 Eclipse 工程迁移到 Android Studio ,并让团队接受 Gradle 开发环境。
当然,Android Studio 刚出来那会,它内置的模拟器依然是一种“狗都不用”的情况,相比现在的模拟器,当年的模拟器真的一言难尽:
而 Google 选择 IntelliJ 作为构建 Android Studio 的平台,也是 Google 和 JetBrains 深度合作的开始,至此,Android 就和 JetBrains/Gradle 开始了十年的蜜月,然后就是大家熟知的 Kotlin、Kotlin Multiplatform、Compose Multiplatform:
而从这 10 年 Android Studio logo 的变化,你是否也从这些熟悉的 logo 里看到曾经「每日早八」的回忆:
- 2013 年: 最初的 Android Studio 标志是一个 3D 机器人,突出了 bugdroid 的齿轮和,此时Android Emulator 是 bugdroid
- 2014 年: Android Emulator 合并到一个平坦的图标,但其他方面保持不变
- 2014-2019 年: 引入了全新的 Android Studio 徽标,其中绿色圆圈前面有一个“A”罗盘
- 2020-2022 年: 随着 Android Studio 4.1 的发布,“A”指南针被简化为放置在蓝图前面的抽象形式,还添加了 Android 头。
- 现在: 标志的中心焦点是 A 罗盘,它融合了原始罗盘标志的元素,并保留 Android 头
从 2014 年到 2022 年,Android Studio 图标就通过不同的背景颜色来区分版本,黄色代表 Canary ,绿色 (2014 - 2019) 和白色 (2020-2022) 代表稳定版本。
而现在,除了颜色之外,新设计还采用了一种辅助编码方法,还以轮廓 A 表示 Canary,以实心 A 表示 Stable。
而除了 Logo 之外,从 Android Studio 4.1 之后, Android Studio Arctic Fox 变更了版本号规则,开始与 IntelliJ IDEA 更新保持一致,并且每个大版本增加一种「生物」,可以看到现在启动图也变得多彩起来:
之后,从 Android Studio Koala 开始,Studio 版本所使用的版本号都遵循着:<IntelliJ 版本年份>.<IntelliJ 主版本>.<Studio 主版本> ** 这样的格式,其中初始的动物版本发布将带有 “.1” 的 Android Studio 主版本号,用于引入更新的 IntelliJ 平台版本号,而随后的功能更新将把 Android Studio 的主版本号提升到 “.2”,聚焦于引入更多特定于 Android 的功能,统称为 Feature Drop** 。
自此, Android Studio 正式走过了十年,现在的 Android Studio 不仅聚焦 AI Gemini ,更打通了 Firebase 整套支持,同时还支持 K2 模式,全面无缝地适配 Jetpack Compose ,拥有更优秀的测试和部署支持等。
可以看到,十年过去,Android Studio 确实越来越优秀了,尽管它现在还是有着这样那样的问题,但是,我们还是期待它能迈向下一个十年~
参考链接
- https://android-developers.googleblog.com/2025/01/android-studios-10-year-anniversary.html
相关文章:
Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年
Android Studio 1.0 宣发于 2014 年 12 月,而现在时间来到 2025 ,不知不觉间 Android Studio 已经陪伴 Androider 走过十年历程。 Android Studio 10 周年,也代表着了我的职业生涯也超十年,现在回想起来依然觉得「唏嘘」ÿ…...
“LoRA技术中参数初始化策略:为何A参数采用正态分布而B参数初始化为0”
在LoRA(Low-Rank Adaptation)中,参数A和B的初始化策略是经过精心设计的,以确保模型训练的稳定性和有效性。具体来说,参数A通常被初始化为正态分布,而参数B则初始化为0。这样的设计有以下几个优点࿱…...
PyTorch中的movedim、transpose与permute
在PyTorch中,movedim、transpose 和 permute这三个操作都可以用来重新排列张量(tensor)的维度,它们功能相似却又有所不同。 movedim 🔗 torch.movedim 用途:将张量的一个或多个维度移动到新的位置。参数&…...
灰色预测模型
特点: 利用少量、不完全的信息 预测的是指数型的数值 预测的是比较近的数据 灰色生成数列原理: 累加生成: 累减生成:通过累减生成还原成原始数列。 加权相邻生成:(会更接近每月中旬,更推荐…...
Java 16进制 10进制 2进制数 相互的转换
在 Java 中,进行进制之间的转换时,除了功能的正确性外,效率和安全性也很重要。为了确保高效和相对安全的转换,我们通常需要考虑: 性能:使用内置的转换方法,如 Integer.toHexString()、Integer.…...
CPU 100% 出现系统中断 怎么解决
CPU 100% 出现系统中断 怎么解决 电脑开机时会掉帧,切换到桌面时就会卡顿,然后打开任务管理器就会看到系统中断的cpu占用率达到100%,过一段时间再打开还是会有显示100%的占用率,这个问题怎么解决? 文章目录 CPU 100% …...
Python-基于mediapipe,pyautogui,cv2和numpy的电脑手势截屏工具(进阶版)
前言:在我们的日常生活中,手机已经成为我们每天工作,学习,生活的一个不可或缺的部分。众所周知:为了我们的使用方便,手机里面的很多功能非常人性化,既便捷又高效,其中就有手机的截屏方式,它们花样繁多,如三指截屏,手势截屏等。那么怎么在电脑里面也实现这个功能呢?…...
设计转换Apache Hive的HQL语句为Snowflake SQL语句的Python程序方法
首先,根据以下各类HQL语句的基本实例和官方文档记录的这些命令语句各种参数设置,得到各种HQL语句的完整实例,然后在Snowflake的官方文档找到它们对应的Snowflake SQL语句,建立起对应的关系表。在这个过程中要注意HQL语句和Snowfla…...
2025年人工智能技术:Prompt与Agent的发展趋势与机遇
文章目录 一、Prompt与Agent的定义与区别(一)定义(二)区别二、2025年Prompt与Agent的应用场景(一)Prompt的应用场景(二)Agent的应用场景三、2025年Prompt与Agent的适合群体(一)Prompt适合的群体(二)Agent适合的群体四、2025年Prompt与Agent的发展机遇(一)Prompt的…...
[论文总结] 深度学习在农业领域应用论文笔记14
当下,深度学习在农业领域的研究热度持续攀升,相关论文发表量呈现出迅猛增长的态势。但繁荣背后,质量却不尽人意。相当一部分论文内容空洞无物,缺乏能够落地转化的实际价值,“凑数” 的痕迹十分明显。在农业信息化领域的…...
STM32 ADC单通道配置
硬件电路 接线图: ADC基本结构图 代码配置 根据基本结构框图 1.定义结构体变量 //定义结构体变量 GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体变量 ADC_InitTypeDef ADC_InitStructure; //定义ADC结构体变量 2.开启RCC时钟 ADC、GPIO的时钟&#x…...
Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环。 目录 1. if 语句 2. switch语句 3. for语句 4. range语句 5. goto语句(不常用…...
Day50:字典的合并
在 Python 中,字典是一个可变的数据类型,经常需要将多个字典合并成一个字典。合并字典的方式有多种,今天我们将学习几种常见的方法。 1. 使用 update() 方法合并字典 update() 方法可以用来将一个字典中的键值对添加到另一个字典中。如果目…...
【C++动态规划 离散化】1626. 无矛盾的最佳球队|2027
本文涉及知识点 C动态规划 离散化 LeetCode1626. 无矛盾的最佳球队 假设你是球队的经理。对于即将到来的锦标赛,你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而,球队中的矛盾会限制球员的发挥,所以必须选…...
LeetCode 热题 HOT 100
你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…...
从未标记图像中生成有标记图像特征的半监督分割方法
今天看到一篇文章很有意思,给大家分享一下。现在传统半监督分割网络训练时往往有标注数据与未标注数据分开训练,导致模型不好。这篇文章作者提出了一个很有意思的想法。它通过通道注意力从未标记的特征中重新加载标记的特征。这篇文章是AllSpark。 大家感…...
随笔 | 写在一月的最后一天
. 前言 这个月比预想中过的要快更多。突然回看这一个月,还有点不知从何提笔。 整个一月可以总结为以下几个关键词: 期许,保持期许出现休息 . 期许 关于期许,没有什么时候比一年伊始更适合设立目标和计划的了。但令人惭愧的…...
AI大模型开发原理篇-2:语言模型雏形之词袋模型
基本概念 词袋模型(Bag of Words,简称 BOW)是自然语言处理和信息检索等领域中一种简单而常用的文本表示方法,它将文本看作是一组单词的集合,并忽略文本中的语法、词序等信息,仅关注每个词的出现频率。 文本…...
DDD - 领域驱动设计分层架构:构建可演化的微服务架构
文章目录 引言1. 什么是DDD分层架构?1.1 DDD分层架构的演变1.2 四层架构的起源与问题1.3 依赖倒置和五层架构 2. DDD分层架构的核心层次2.1 用户接口层(User Interface Layer)2.2 应用层(Application Layer)2.3 领域层…...
Spring Boot项目如何使用MyBatis实现分页查询及其相关原理
写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭&#x…...
CSS 值和单位详解:从基础到实战
CSS 值和单位详解:从基础到实战 1. 什么是 CSS 的值?示例代码:使用颜色关键字和 RGB 函数 2. 数字、长度和百分比2.1 长度单位绝对长度单位相对长度单位 2.2 百分比 3. 颜色3.1 颜色关键字3.2 十六进制 RGB 值3.3 RGB 和 RGBA 值3.4 HSL 和 H…...
搭建自己的专属AI——使用Ollama+AnythingLLM+Python实现DeepSeek本地部署
前言 最近DeepSeek模型非常火,其通过对大模型的蒸馏得到的小模型可以较轻松地在个人电脑上运行,这也使得我们有机会在本地构建一个专属于自己的AI,进而把AI“调教”为我们希望的样子。本篇文章中我将介绍如何使用OllamaAnythingLLMPython实现…...
【AI绘画】MidJourney关键词{Prompt}全面整理
AI绘画整理,MidJourney关键词。喜欢AI绘画的朋友必备,建议收藏,后面用到时供查阅使用。 1、光线与影子篇 中 英 闪耀的霓虹灯 shimmeringneon lights 黑暗中的影子 shadows in the dark 照亮城市的月光 moonlightilluminatingthe cit…...
如何将IP切换到海外:详细指南
在现代互联网应用中,IP地址成为了网络通信和数据交换的基础。然而,很多时候,由于区域限制或隐私保护的需求,用户可能需要将自己的IP地址切换到海外。无论是为了绕过地域限制访问内容,还是为了提高隐私安全,…...
蓝牙技术在物联网中的应用有哪些
蓝牙技术凭借低功耗、低成本和易于部署的特性,在物联网领域广泛应用,推动了智能家居、工业、医疗、农业等多领域发展。 智能家居:在智能家居系统里,蓝牙技术连接各类设备,像智能门锁、智能灯泡、智能插座、智能窗帘等。…...
YOLOv8:目标检测与实时应用的前沿探索
随着深度学习和计算机视觉技术的迅速发展,目标检测(Object Detection)一直是研究热点。YOLO(You Only Look Once)系列模型作为业界广受关注的目标检测框架,凭借其高效、实时的特点,一直迭代更新…...
LeetCode:62.不同路径
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:62.不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” &…...
范冰冰担任第75届柏林电影节主竞赛单元评委 共鉴电影佳作
近日,备受瞩目的柏林电影节迎来了新一届盛事,而华人演员范冰冰将以主竞赛单元评委身份亮相,引发了广泛关注。此前她已担任过戛纳国际电影节、东京国际电影节、圣塞巴斯蒂安国际电影节等众多电影节主竞赛单元评委。作为国际影坛的知名人物&…...
基于Python的药物相互作用预测模型AI构建与优化(下.代码部分)
四、特征工程 4.1 分子描述符计算 分子描述符作为量化分子性质的关键数值,能够从多维度反映药物分子的结构和化学特征,在药物相互作用预测中起着举足轻重的作用。RDKit 库凭借其强大的功能,为我们提供了丰富的分子描述符计算方法,涵盖了多个重要方面的分子性质。 分子量…...
【C语言】内存管理
【C语言】内存管理 文章目录 【C语言】内存管理1.概念2.库函数3.动态分配内存malloccalloc 4.重新调整内存的大小和释放内存reallocfree 1.概念 C 语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h> 头文件中找到。 在 C 语言中,内存是通过…...
团体程序设计天梯赛-练习集——L1-029 是不是太胖了
前言 5分级别里面目前做到的最难的一道题,但是非常简单,5分的题看看写点代码就行了。 L1-029 是不是太胖了 据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数…...
appmatrix平台(一个汇集原创web APP的平台)服务规划
Appmatrix平台(一个汇集原创web APP的平台)服务规划 Web app是部署机器学习、深度学习等需要算力较大的应用的主要形式,一般都是独立、散在部署,对使用和相互交流造成了一定的不便。App Matrix将各类web应用汇集在一起࿰…...
vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列
最近在家过年闲的没事,于是研究起深度学习开发工具链的配置和安装,之前欲与天公试比高,尝试在win上用vscodecuda11.6vs2019的cl编译器搭建cuda c编程环境,最后惨败,沦为笑柄,痛定思痛,这次直接和…...
pytorch实现长短期记忆网络 (LSTM)
人工智能例子汇总:AI常见的算法和例子-CSDN博客 LSTM 通过 记忆单元(cell) 和 三个门控机制(遗忘门、输入门、输出门)来控制信息流: 记忆单元(Cell State) 负责存储长期信息&…...
洛谷P2651 添加括号III
题目链接:P2651 添加括号III - 洛谷 | 计算机科学教育新生态 题目难度:普及一 题目分析: a1肯定是分子,a2肯定是分母,那么尽可能多的是a3以后的变为分子,怎么办呢? a1/(a2/a3/a4/...)a1a3a4.../a2&#…...
Mysql进阶学习
目录 一.Mysql服务器内部架构(了解) 二.Mysql引擎 2.1 innodb引擎 2.2 myisam引擎 三.索引 3.1索引分类 3.2mysql索引数据结构 3.3聚簇索引和非聚簇索引 3.4回表查询 3.5索引下推 四.事务 数据库事务特征 事务隔离性,隔离级别 事务实现原理 五.锁 ①…...
白话DeepSeek-R1论文(二)| DeepSeek-R1:AI “升级打怪”,从“自学成才”到“全面发展”!
最近有不少朋友来询问Deepseek的核心技术,今天开始陆续针对DeepSeek-R1论文中的核心内容进行解读,并且用大家都能听懂的方式来解读。这是第二篇趣味解读。 DeepSeek-R1:AI “升级打怪”,从“自学成才”到“全面发展”!…...
WordPress eventon-lite插件存在未授权信息泄露漏洞(CVE-2024-0235)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
python 语音识别
目录 一、语音识别 二、代码实践 2.1 使用vosk三方库 2.2 使用SpeechRecognition 2.3 使用Whisper 一、语音识别 今天识别了别人做的这个app,觉得虽然是个日记app 但是用来学英语也挺好的,能进行语音识别,然后矫正语法,自己说的时候 ,实在不知道怎么说可以先乱说,然…...
2501,编写dll
DLL的优点 简单的说,dll有以下几个优点: 1)节省内存.同一个软件模块,若是源码重用,则会在不同可执行程序中编译,同时运行这些exe时,会在内存中重复加载这些模块的二进制码. 如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,每个进程会复制一份的d…...
Linux命令汇总
1、帮忙类 --help 直接在当前窗口显示帮助 command --help man 创建新窗口显示帮助 man command 2、目录操作类 2.1、查看目录 ls:以列表方式,查看目录中内容 tree:以树状方式,查看目录中内容 2.2、创建、删除文件及目录 touch:创建…...
漏洞扫描工具之xray
下载地址:https://github.com/chaitin/xray/releases 1.9.11 使用文档:https://docs.xray.cool/tools/xray/Scanning 与burpsuite联动: https://xz.aliyun.com/news/7563 参考:https://blog.csdn.net/lza20001103/article/details…...
Java手写简单Merkle树
Java手写Merkle树代码 package com.blockchain.qgy.component;import com.blockchain.qgy.model.MerkleTreeNode; import com.blockchain.qgy.util.SHAUtil;import java.util.*;public class MerkleTree<T> {//merkle树private List<MerkleTreeNode<T>> lis…...
vue之pinia组件的使用
1、搭建pinia环境 cnpm i pinia #安装pinia的组件 cnpm i nanoid #唯一id,相当于uuid cnpm install axios #网络请求组件 2、存储读取数据 存储数据 >> Count.ts文件import {defineStore} from piniaexport const useCountStore defineStore(count,{// a…...
升级到Mac15.1后pod install报错
升级Mac后,Flutter项目里的ios项目运行 pod install报错, 遇到这种问题,不要着急去百度,大概看一下报错信息,每个人遇到的问题都不一样。 别人的解决方法并不一定适合你; 下面是报错信息: #…...
力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)
让石头分成重量相同的两堆(尽可能相同),相撞之后剩下的石头就是最小的。进一步转化成容量为重量总喝一半的背包最多可以装多少质量的石头。这样就转化成了背包问题。 最后求结果时,我们所最多能装的时dp[target],那另一…...
CSS 图像、媒体和表单元素的样式化指南
CSS 图像、媒体和表单元素的样式化指南 1. 替换元素:图像和视频1.1 调整图像大小示例代码:调整图像大小 1.2 使用 object-fit 控制图像显示示例代码:使用 object-fit 2. 布局中的替换元素示例代码:Grid 布局中的图像 3. 表单元素的…...
寒武纪MLU370部署deepseek r1
文章目录 前言一、平台环境准备二、模型下载三、环境安装四、代码修改五、运行效果 前言 DeepSeek-R1拥有卓越的性能,在数学、代码和推理任务上可与OpenAI o1媲美。其采用的大规模强化学习技术,仅需少量标注数据即可显著提升模型性能,为大模…...
Spring的AOP的JoinPoint和ProceedingJoinPoint
Spring的AOP的JoinPoint 在Spring AOP中,JoinPoint 是一个核心接口,用于表示程序执行过程中的一个连接点(如方法调用或异常抛出)。它提供了访问当前被拦截方法的关键信息的能力。以下是关于 JoinPoint 的详细说明: 一…...
每日一道算法题
题目:单词接龙 II 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则: 每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的…...