- 博客(328)
- 资源 (17)
- 问答 (5)
- 收藏
- 关注

原创 Android Git 工作流,基础,回撤commit
一 ,Git的工作流程1.删除工作区,暂存库,版本库(commited)git分区工作区、暂存区、版本库tip:1.1 除了隐藏的.git文件夹,其他项目文件位于的地方便是工作区 (默认)1.2 工作区的文件需要添加到Git的暂存区(git add)1.3 Git的版本库(git commit)2.git 状态untracked、unstaged、uncommited2.1 新建的文件都是untracked状态(未跟踪)2.2 git add到暂存区,Git便会在暂存区中生成一个该文件
2020-07-28 21:33:07
993
原创 Kotlin协程基础
Kotlin 协程提供了一种高效的方式来处理异步编程。通过 async 和 await,可以轻松地并行执行任务并获取结果。launch 函数用于启动不需要返回结果的协程,而协程上下文则管理协程的执行环境和生命周期。这些特性使得 Kotlin 协程在编写异步代码时更加简洁和易于维护。
2024-12-28 15:12:34
458
原创 Android中 Applicaton Context,Service context, Activity context 的区别。
在Activity中使用 View.inflate(context,r.layout.xxx)方法时,如果使用Application Context,则获得的View将不会受到Activity的生命周期的影响,即使Activity已经被销毁,View仍然存在。ContextWrapper是Context的派生类,它实现了Context类的接口。mBase本身也是Context对象,其类型是ContextImpl,因此,ContextImpl类才是Context类真正的实现。,但是它们之间有一些区别。
2023-11-08 17:15:03
371
原创 App违反Google数据安全政策,解决方案
google隐私政策阶段性会进行更新,时长关注隐私政策变化,避免app被强制下架,影响后续运营工作。
2023-05-05 15:48:16
1798
原创 GoF设计模式的基石-类间关系
软件系统在运行时,类将实例化成对象,并由这些对象来协作完成各项业务功能,类与类之间关系最终会反映在运行时类实例化对象间的关系。实例化对象之间关系用来模拟真实世界中各种关系。聚合,组合和普通关联的区别在语义,产品和客户之间不能使用聚合和组合,第一是因为,产品和客户之间没有整体与部分的关系,也就不会存在组合中整体与部分的同生共死关系。产品不是客户的部分,只能使用一般的关联关系。
2023-04-05 15:45:30
521
原创 Android Execution failed for task ‘:app:mergeDebugJavaResource
错误提示原因:App项目依赖的三方AAR,而AAR中编译后的字节码class.jar包含相同的kotlin-stdlib-1.7.10.jar文件,导致资源merge出现异常。官方给出了。
2023-03-08 14:26:39
2211
原创 Kotlin data class 数据类用法
使用该copy()函数复制对象,允许您更改其某些属性,同时保持其余属性不变。componentN()按声明顺序与属性相对应的函数。对于复杂copy()用例,建议自定义函数来处理。equals()/hashCode()对。stackoverflow:相关用例。上面copy()用例与预期不符原因。这里主要关注3,4,分别表示。
2023-02-14 18:09:01
641
原创 Android studio 项目中不小心把文件设置 Excluded 怎么恢复成原来的文件夹
一般用于标注排除目录。被排除的目录不会被 IntelliJ IDEA 创建索引,相当于被 IntelliJ IDEA 废弃,该目录下的代码文件是不具备代码检查和智能提示等常规代码功能。
2023-02-14 15:49:57
647
原创 Android 7.x 系统Webview No virtual method getWebViewClient() 解决
android 7.x 系统webView No Virtual method getWebViewClient()
2023-01-08 10:24:47
393
原创 Android Gradle发布Artifact (aar包)到Maven仓库
gradle升级之后,早期gradle发布artifact 到maven的脚本提示部分引用找不到,通过gradle 官方给的demo梳理出来 gradle 7.2 以上使用的发布脚本。publish.gradle 文件。
2022-11-14 08:56:34
2812
原创 Android Gradle 插件版本说明
Android studio 构建基于Gradle,而Android gradle plugins 提供几个构建Android的功能,使用Gradle脚本,或者其它被支持的脚本开发。包含Kotlin Dsl脚本。所以在更新Android studio IDE时,会提示让升级AGP插件。升级完成后,会提示升级的Kotlin插件。捋清楚它们的依赖关系,遇到不兼容问题可以快速定位Android Gradle 插件版本说明。
2022-11-09 20:44:32
1607
原创 Android Compose 修饰符类行为整理
compose 修饰符用来对界面组件装饰,类似View Tree系统的组件属性,compose对于修饰符用法做了限制,RowScope,ColumScope,BoxScope,等等限制为仅可以在这些组件使用的修饰符。各种修饰构成compose样式基础,入门第一步首先了解会使用修饰符。状态,副作用在掌握了修饰符之后进行梳理Compose 修饰符列表。
2022-09-20 21:05:08
817
原创 Android Compose 基础 搜索组件
近来 google compose 成为了热点,作为下一代ui组件开发利器,配合kotlin语法简洁性,能最大限度的提高ui开发效率。最近也在学习compose基础知识。脱离官方帮助文档和codeLab来谈。compose语法和View tree差异比较大。需要开发组件,管理状态,因为compose 可组合项的更新完全依赖与状态的跟踪,引用的状态被修改,所有依赖状态的可组合项均会发生重组,界面可组合项的刷新遵循mvi范式。
2022-09-20 20:14:07
1103
原创 基于jenkins进行定制化开发
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
2022-09-15 20:39:15
1418
原创 Android 用户如何将Room根据不同账户动态分库方案
开发中需要根据不同用户,创建不同名称数据库。登录用户关联自己名称命名的数据库,达到分库目的。也有基于同一个数据库进行分表的操作。这里仅介绍使用Android Room数据库,如何分库和关联已经存在的数据库。GreenDao数据库同样可以进行动态分库,原理一样。官方Room链接Room 持久性库在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite的强大功能的同时,能够流畅地访问数据库。针对 SQL 查询的编译时验证。可最大限度减少重复和容易出错的样板代码的方便注解。......
2022-08-31 11:46:13
2192
原创 Java类型Api初探
kotlin语言中大量使用泛型相关语法,对于比较抽象的类和函数如果认识仅仅停留在java 实体上,就不能很好的学习kotlin语法的精髓。协程以及compose中泛型相关api比比皆是。不理解java 类型,就不能学好kotlin和composeJava中的Type类型详解入............
2022-07-13 18:11:17
551
原创 初学者如何正确理解google官方建议架构原则(疑问?)
最近花时间看了google 的Jetpack 架构组件,kotlin协程、flow。接着了google官方推荐应用架构指南,compose等。这些目是 目前主流应用开发采用的技术栈。我们项目中已经搭建起来了,但是自己理解的很浅,使用官网推荐的架构写起来心里总觉的没有使用MVP 写起来直来直去。但是这些才是未来应该掌握的技术栈,记录下疑惑的地方。1.标准数据驱动代码样式,和各个层的职责,各层之间如何进行关联。Activity、Fragment中是否只放ui相关代码: ui相关代码指的是那些代码?是否是元素的显
2022-06-29 21:29:00
1013
原创 Andorid Jetpack Hilt
前言本blog 是学习Hilt官方文档后,随手记的笔记,欢迎一起探讨交流Hilt用法hilt用法xmind 脑图解决问题:1.不能通过构造函数注入接口2.不能通过构造函数注入不归您所有的类型(外部库的类)解决思路:@Module注释的Hilt模块类里面的@Binds注释的函数会告知 Hilt 如何提供某些类型的实例示例:说明:在 Hilt 模块内创建一个带有 @Binds 注释的抽象函数(@Binds 注释会告知 Hilt 在需要提供接口的实例时要使用哪种实现),解决问题:1.Retrofit、Ok
2022-06-23 16:56:15
658
原创 Google 软件版本经历周期
经常会看到依赖jar后缀一些alpha、release、rc、beta等,所代表的含义也很容易通过搜索引擎找到,以下就是通过搜索引擎找到的说明梳理。Jetpact库遵循严格的语义版本控制如下:Android 系统版本完整周期{developer 预览,beta外部测试,稳定版,正式发行版}Alpha:内测版,存在缺,已有功能改动大,代码不稳定Beta:早期版本,有缺陷,无大BUG,可能加入新功能,进一步开发完善。版,完善修改,成为正式发布的候选版本(Release Candidate)RC:(Relea
2022-06-22 15:20:32
198
原创 kotlin 注解声明与使用
1. java中应用注解语法和kotlin几乎一摸一样2. kotlin让注解的目标范围比java更广,包括了文件和表达式3. 一个注解类的参数可以是基本类型、字符串、枚举、类引用、其他注解类实例、或者数据4. 使用点目标来处理kotlin这种一个声明产生多个字节码元素情况。var a=1 对应java中三种字节码元素。5. 注解类声明拥有一个主构造没有类主体构造方法中所有参数都被标示成val属性6. 元注解用来指定使用点目标、保留期模式、和其他注解的特性...
2022-06-20 08:56:42
703
原创 Android kotlin泛型知识点梳理
学习知识需要提前设立目标,带着问题学习才能有的放矢。无论是java的泛型还是kotlin语言的泛型均是写框架,写通用工具类神器。如果不熟悉泛型语法,开发过程中将会遇到很多奇奇怪怪的问题。当然语言的高级特性肯定也理解不了。本blog基于 《kotlin实战》 第九章泛型的理解而来kotlin 引入新概念:实化类型参数、声明点变型、使用点变形实化类型参数:泛型函数的类型参数修用 refixed 饰符 如 : ,并且设置泛型函数为inline 内联函数,那么在运行时可以获取到泛型参数的泛型实参的具体类型。(普通的
2022-06-16 15:23:09
901
原创 Android kotlin 类委托 by,by lazy关键
接触kotlin语言也有几年时间了。日常开发工作中也推荐使用kotlin,但是对于一些kotlin语言语法的细节没有进行系统学习。碎片的知识点让工作中屡屡碰壁,前些天开始学习compose时候,意识到基础没有打好,最近也在分阶段的复习kotlin语言语法知识点。并统一输出。关关键字by解决的问题是:有继承实现导致的脆弱性,基类被子类继承并对某些功能进行了扩展,这样子类就依赖了父类实现细节。随着不断迭代,父类中实现细节会随着迭代而被修改。早期对父类实现细节的假设也会失效,最终导致程序以不正确的行为而告终。所以
2022-06-14 11:29:44
2568
原创 Kotlin DSL构建
通用编程语言: 有一系列足够完善的能力来解决几乎所有能被计算机解决的问题领域特定语言:专注在特定的任务或者领域上,并放弃的与该领域无关的功能 (外部DSL),而领域特定语言分为外部DSL与内部DSLDSL更趋向声明式 :语言包括有命令式和声明式写法 ,命令式语言描述执行操作所需步骤的确切序列,每个操作实现都被独立化了,而声明式描述了想要的结果并将执行细节留给解释它的引擎,通常让执行更有效率。外部DSL语言:声明式写法,很难与通用编程语言的宿主应用程序结合起来使用,外部DSL语言自己的语法并不能直接嵌套使
2022-06-13 16:33:24
446
原创 Android Jetpack 之 DataStore 初探
DataStore是google官方提供的,用于替换SharedPreferences来对简单数据进行存储的解决方案。对于SharedPreferences存在的缺陷进行修补,并且可以和Kotlin协程与Flow结合。DataStore提供对基本类型和对象类型进行分开存储,分别使用 PreferencesDataStore,ProtoDataStore.通过名字很容区分 PreferencesDataStore用来存储基本类型String、int、long、double、float、boolean、set
2022-06-07 16:58:52
631
原创 Java字节码基础
前言最近计划熟悉下jectpack api,很多java基础知识没有好好掌握。对于一些新技术中涉及到底层知识抓耳挠腮不知所以然。虽然不能一股脑的掌握所有知识。但是遇到不了解的地方做好笔记也能逐渐的提高自己专业知识字节码 .class 文件包含高级语言编译后输出的所有jvm虚拟机可以识别的元数据信息。了解字节码之前需要了解下 Hotspot 虚拟机栈和栈帧字节码基础:相关blog该篇blog的引子:类、接口、函数在学习kotlin相关文档时, inline 标识官方介绍说会将相关内联函数在java
2022-05-22 19:59:40
180
原创 类、接口、函数
前言各种专业技术名词不断增加,学好编程首先要了解技术术语,然后才可以对技术行业整体有一个大概判断。学习中对某个知识点经常使用但是看官方文档时还是很容易混淆,专业术语与自己已经掌握的知识对应关系。blog在于罗列 java 和 kotlin ,类、接口、函数 种类。函数Lambda 是一个对象。Lambda 表达式是一个函数接口对象lambda表达式 :block:String.()->Unitkotlin inline 关键字每次调用高阶函数,会创建一个匿名内部类。 函数设置成Inl
2022-05-22 11:16:57
219
原创 应用架构原则
前言基础架构好坏直接决定所开发项目未来的稳定性、可伸缩性。在jetpack 框架出来之前应用架构大部分是从网络上东拼西凑出来的产物,没有考虑日后维护.对于google官方提供的应用架构原则,应该认真研读。应用架构定义了应用的各个部分之间的界限以及每个部分应承担的职责架构务必要能允许应用扩缩、提升应用的稳健性并且方便对应用进行测试常见的架构原则如果您不应使用应用组件存储应用数据和状态,那么您应该改为如何设计应用呢?随着 Android 应用大小不断增加,您定义的架构务必要能允许应用扩缩、提升应用的
2022-05-19 16:32:28
1200
转载 如何写好技术文档 Software Engineering at Google
前言文大部分内容翻译总结自《Software Engineering at Google》 第10章节 Documentation,一直坚持写技术文档,进步一直不大。每次书写相关工具类或者三方sdk配套文档,草草写完,阅读量也少的可怜。科学学习书写文档,做好日常技术积累,定期进行输出很多技术人自己非常轻视技术文档的书写,然而又时常抱怨文档不完善、质量差、更新不及时…… 这种在程序猿间普遍存在的矛盾甚至已经演变成了一个段子。文档的重要性高质量的文档对于一个组织或团队来说有非常多的益处,比如让代码和AP
2022-05-14 14:08:46
284
原创 compose 编程思想
前言compose已经熟悉了几周了,跟着google sample进行理解时,对可组合函数参数列表如何声明,事件向上,数据向下传递理解还是有偏差。重新理解了下compose编程思想1.早期基于View 微件数:更新界面:多个需要同时更新View,会遗漏。复杂的View微件更新会更新前面已经移除过微件的状态2.声明性范式:tips:mvvm 为数据驱动界面ui更新。 界面(Fragment,Activity)订阅ViewModel中的LiveData,数据发生变化时通知界面进行刷新。而lifecy
2022-04-06 11:46:55
2482
原创 JetPack compose 状态提升(二)
前言状态管理是时使用JetPack compose 开发必须掌握的知识,为了提高可组合函数的复用率.通常会将状态从可组合函数之中提升到可组合函数外面。Jetpack Compose 中的常规状态提升模式是将状态变量替换为两个参数:value: T:要显示的当前值onValueChange: (T) -> Unit:请求更改值的事件,其中 T 是建议的新值类型@Composablefun HelloScreen() { var name by rememberSaveable {
2022-03-23 15:58:44
1111
原创 Google play 应用签名密钥证书,上传签名证书区别
前言2021年8月之前未要求通过google play分发的应用必须使用AAB格式。之后要求必须适应AAB格式进行签名后才可以在google play上进行分发。早期直接上传签好名字的apk到google play。分发下来apk签名与上传到google play的一致。下面分别是加入google 签名计划的签名和apk签名:google签名计划使用的jks为 google.jks sha1 33:C2:07:B8:6E:47:31:43:D0:AB:24:1A:12:1A:5A:8B:C4
2022-03-23 11:22:10
11785
1
原创 Jetpack Compose 管理状态(一)
前言Jetpack Compose 可帮助您明确状态在 Android 应用中的存储位置和使用方式,状态管理是过渡到 Compose 开发ui首要面临的问题。Jetpack compose 引入新的开发范式 (MVI)Jetpack Compose 架构比较:MVP & MVVM & MVI应用中的状态是指可以随时间变化的任何值。这是一个非常宽泛的定义,从 Room 数据库到类的变量,全部涵盖在内。所有 Android 应用都会向用户显示状态。下面是 Android 应用中的一
2022-03-22 15:48:29
3389
原创 Compose 中的附带效应
关键词附带效应是指在可组合函数范围之外发生的应用状态变化效应是一种可组合函数,该函数不会发出界面,并且在组合完成后产生附带效应。效应名称作用用例LaunchedEffect在某个可组合项的作用域内运行挂起函数snackBar显示rememberCoroutineScope获取组合感知作用域,以便在可组合项外启动协程snackBar显示rememberUpdatedState在效应中引用某个值,该效应在值改变时不应重启–DisposableEffe
2022-03-17 17:23:04
1324
Room 数据库 自动迁移,无法成功
2022-05-10
导航组件Navigation,从一个Activity 跳转到Fragment
2022-03-29
Android studio 升级到4.1 之后的bug
2020-11-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人