- 博客(1902)
- 资源 (224)
- 问答 (1)
- 收藏
- 关注

转载 Git使用规范(Android版)
引言本文根据Git分支管理策略,结合Git Flow分支管理实践,制定了这个适合Android开发中的Git版本管理规范。同时结合实际操作演示了使用示例,希望对你有所帮助。1. 各分支简介下面分支中提到的的 version 应该替换为具体的版本,name 应该替换为具体的开发人员姓名,content 应该替换为需要优化的地方。master分支git的默认分⽀,主分支,不...
2019-08-22 14:55:16
3208
7

转载 不是人人都懂的学习要点
http://www.cnblogs.com/watsonyin/archive/2012/10/22/2734741.html学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 一.学习也是一种能力看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。
2012-12-12 15:54:05
7990
5

转载 一个三流学校程序员的奋斗
文章是转载的,我不是一个毅力很强的人,总得一些激励人的文章来激励自己 我也在一个三流的学校,在找有关考研的文章的时候看到这篇文章觉得不错,不敢独享,拿出来共勉…… 看完后我又一次明白,勤能补拙,一个人的成功,往往在于坚持没有挫折,不经历艰难的日子,就没有美好的明天……忘了是谁说的:当你感觉到艰难的时候,正是你在走上坡路的时候
2012-06-08 14:47:26
10267
20
转载 App处于前台,Activity就不会被回收了?
Android系统中,进程的生命周期由系统控制,处于体验和性能考虑,在APP中点击Home键或Back回退操作,并不会真的杀掉APP,进程依旧存在于内存中,这样下次启动此APP时就能更加快速。随着系统运行时间增长,打开APP越来越多,内存中的进程随着增多,系统的可用内存会越来越少。可以看到,adj是动态变化的,当App状态及四大组件生命周期发生改变时,都会改变它的值。下次GC,又会走一遍这里的代码,啧啧啧,相比起轮询高效多了。当然,不会那么蠢,还要开发仔自己在APP里回收内存,虚拟机自带。
2024-12-02 16:53:40
223
转载 Android 跨进程+解耦的数据持久化方案
如果提到跨进程你肯定会想到 AIDL , 没错我们确实是频繁使用到 AIDL 去 bind 服来完成跨进程通信。另外如果是一些持久化到本地的数据,bind service 的方式也不是最优解。这种解耦的支持跨进程的持久化存储方案:今天带来 ContentProvider+Room 来给大家出个示例。ContentProvider 是基于 Uri 的,天然就算是解耦的,不需要有任何的 sdk 或者 aidl 文件依赖就能达到耦合和跨进程。
2024-11-12 16:18:51
239
原创 HarmonyOS Next(鸿蒙星河版)侧载应用
仅需登录华为账号, 开启手机开发者模式和usb调试,即可安装任意hap应用 (tip: 必须保持开发者模式才能正常使用哦)这个版本支持无线安装哦!github找到了个项目。
2024-11-06 10:00:17
12005
转载 Android ScrollView上可拖拽滚动条
纯干货,希望您能看完自定义可拖拽滚动条,适用于ScrollView,RecyclerView,ListView纯Canvas实现,同样基于原逻辑,也可以更换成任何View,原理相同实现比原生体验更好的交互,如动画,按压拖拽等调用原生原有API,省去大量计算带来的卡顿及位置错乱的问题。
2024-09-29 11:26:34
696
转载 AGP8.0 ASM 更简单灵活了
在之前《Gradle Transform + ASM 探索》一文中讨论了使用 AGP 提供的 Transform 接口自定义 Gradle 插件,通过 ASM 进行代码插桩。实现一些类似方法耗时统计,批量添加点击事件做埋点的功能。但是随着 AGP8.0 的到来,Transform 接口已经被废弃了,至于废弃的原因官方解释也是很官方了。说白了,就是不好用,传统的 Transform API 增加编译耗时。同时提供了更好用的 API 来规避一些编译时的问题。
2024-08-06 01:16:52
295
转载 Android Gradle8.0 Transform 废弃如何适配,手撸Arouter插件教你使用
最近公司也在适配项目至Android 14 否则市场不让上架,因此 gradle也必须适配升级了,就先来试试水。目前最新的AGP已经到8.3了,适配AGP8.0也要提上日程了,尤其是一些插件项目,因为8.0删除了transform API,所以需要提前做好适配工作。对于之前未了解过gradle自定义插件的同学可以看下我以前的7.0之前的gradle自定义插件的用法 教你如何一步步实现路由插件。Android 自定义Gradle插件,使用Transform。
2024-08-06 01:10:53
1399
1
转载 Gradle自定义task打包AAR和APK
上图图示为打包AAR过程中,所经历的一系列task任务,以及执行顺序。如果我们想要修改其中的某一步,只需要定义我们自己的task对build目录下的文件做修改,将task插入到目标动作task中间,即可完成功能。以下列举多个例子来演示一下。
2024-07-09 19:41:46
812
转载 从Gradle生命周期到自定义Task挂接到Build构建流程全解
如果对一个构建流程的任务依赖关系不熟悉的话,可以使用第三方插件来查看,在根项目的build.gradle中添加如下代码:maven {// 应用插件然后执行./gradlew taskTree --no-repeat我们知道,Gradle 的构建流程是通过执行一系列的 Task 任务来完成的,每一个Task完成自己独特的工作之后,就根据Task的依赖关系,执行下一个 Task 任务。preBuild(开始构建之前执行的Task任务)->(合并资源文件的Task任务)->
2024-07-09 19:37:48
343
转载 Gradle8.0中Transform的替代方案
插件中对HuiRouterApi进行插桩,添加插入路由信息的字节码指令,在程序运行时,插桩的字节码指令执行,路由信息被注册到HuiRouterApi内部的路由表中,然后外部就可以通过HuiRouterApi进行跳转操作了。先定义一个注解,用来标记页面的路由信息,在定义一个路由管理类,用来存储路由信息并对外提供跳转功能。5、在taskAction方法中,扫描遍历所有的jar和class文件,收集路由信息,查找到HuiRouterApi类,并将收集到的路由信息通过插桩的方式添加到HuiRouterApi中。
2024-07-09 19:26:35
579
转载 Gradle自定义task打包AAR和APK
上图图示为打包AAR过程中,所经历的一系列task任务,以及执行顺序。如果我们想要修改其中的某一步,只需要定义我们自己的task对build目录下的文件做修改,将task插入到目标动作task中间,即可完成功能。以下列举多个例子来演示一下。
2024-07-03 11:34:08
569
转载 Gradle 进阶学习 之 Task
Gradle的任务依赖系统提供了灵活性和效率,允许开发者定义复杂的构建流程。了解任务依赖的执行顺序和重复依赖的处理方式,可以帮助开发者更好地控制构建过程,提高构建的可预测性和性能。在Gradle中,定义任务是构建自动化流程的基础。你可以通过几种不同的方式定义任务,每种方式都适用于不同的场景。通过Project的task()方法基本用法:使用Project对象的task()方法可以定义一个新任务。你可以传递一个字符串作为任务名称,以及一个闭包来定义任务的行为。闭包作为参数:闭包可以作为task()
2024-07-03 11:25:01
270
转载 从Gradle生命周期到自定义Task挂接到Build构建流程全解
如果对一个构建流程的任务依赖关系不熟悉的话,可以使用第三方插件来查看,在根项目的build.gradle中添加如下代码:maven {// 应用插件然后执行./gradlew taskTree --no-repeat我们知道,Gradle 的构建流程是通过执行一系列的 Task 任务来完成的,每一个Task完成自己独特的工作之后,就根据Task的依赖关系,执行下一个 Task 任务。preBuild(开始构建之前执行的Task任务)->(合并资源文件的Task任务)->
2024-07-03 10:31:05
557
转载 Gradle 动态修改VersionName和VersionCode
本文通过BuildType、Property、Variants三种方式介绍了动态修改VersionCode和VersionName的方法,但是他们的时机却有不同。BuildType:有局限性,仅能修改VersionName,无法修改VersionCode;Property:使用比较方便,在云编译场景比较常见,本地的话可以写在打包脚本里面;Variants:比较彻底,能完全覆盖,而且也可以抽成Plugin,但是如果有云编译的话,会导致云编译的更改失效;
2024-07-02 20:22:39
440
转载 Gradle不可忽视的构建分析
本文依次介绍了ProfileBuild Scan,通过这些构建分析工具,我们可以更好的去分析项目的构建过程,从而提升构建性能。Build Analyzer:开发工具提供,不割裂,但是分析能力相对基础,不过一般也够用了,推荐;Profile:本地分析报告,分析能力相对基础;Build Scan:在线分析报告,分析能力较强,可以进行深入的分析,推荐;其实Gradle还提供了Enterprice,比Build Scan的分析能力还要强,但是属于付费的,不是很符合现在降本增效的主题。
2024-07-02 20:18:01
370
转载 Gradle插件开发指南
编写一个插件Plugin其实挺简单的,只需要实现Plugin接口,并实现唯一apply方法即可。我们就直接写在@Overrideprintln("这是插件:${this.class.name}")这实际上是一个内联类。写完别忘了apply依赖上。第9行的apply方法是调用的PluginAware接口的apply()方法,参数是一个map,用来映射Plugin Id。sync输出:这是插件:YechaoaPlugin...在上一文。
2024-07-02 20:14:14
521
转载 Gradle构建核心之Task指南
Internal自定义一个类,继承自;Action的方法需要添加注解;对外暴露的参数需要使用@Internal注解;使用自定义Task:taskName = "我是传入的Task Name "类型传入自定义Task类。执行结果:我是传入的Task Name -- MyAction2我是传入的Task Name -- MyAction1至此关于Gradle Task的部分就介绍完了。
2024-07-02 20:02:35
426
1
转载 Gradle常用命令与参数
ok,现在我们就可以针对获取的参数去做一些自定义的操作了,比如修改我们的依赖。} else {} else {这里举例,在的时候依赖了devtools 1.1.1版本,时依赖了devtools 2.2.2版本。除了dependencies里面的依赖之外,Plugin、Task之类的也可以通过动态传参的方式去做自定义操作。
2024-07-02 18:11:27
949
转载 一文搞懂Gradle配置
Gradle第一点其实很好理解,比如Gradle需要java11的运行环境,再比如我们为了加快编译而给Gradle设置更大的运行空间等,这类配置往往相对固定的,因为它是跟随项目走的,即使是多团队协作,大家基本也都是用的同一个环境。
2024-07-02 18:00:17
3022
原创 通过反射和class文件asm字节码分析方法是get或者set方法
asm在解析文件的时候是按照特定顺序进行分析的,首先是visit方法,做类相关的解析,然后是注解,然后是属性,最后才是方法,属性是在所有方法分析前面进行,也就是只有当class文件中的所有属性都遍历完毕之后,才会去遍历方法:测试代码如下。1、反射获取类中的属性和方法,并判定方法是否是set或者get方法。
2024-06-28 09:28:16
311
原创 利用ASM和Javassist动态生成Class 类(set和get)
利用jvm的指令集直接构造class,简单的bean class 还是有应用场景的。在此利用ASM和Javassist各造例子以备忘!抽象类:SimpleJbean。
2024-06-28 00:08:37
390
原创 Asm动态生成类和get and set方法
asm在解析文件的时候是按照特定顺序进行分析的,首先是visit方法,做类相关的解析,然后是注解,然后是属性,最后才是方法,属性是在所有方法分析前面进行,也就是只有当class文件中的所有属性都遍历完毕之后,才会去遍历方法
2024-06-27 20:26:36
406
转载 ASM 在方法进入时候添加语句和方法退出的时候添加代码
在从 ClassReader 到 ClassVisitor 到ClassWriter的过程中, 由 ClassReader来触发各种visitXXX事件,在此过程中如果没有加入任何的ClassVisitor亦或是ClassVisitor只是trace等操作并没有在这个过程中做任何的拦截,那么最终调用的ClassWriter的visitXXX方法,此时将会把原来的class信息原封不动的写入。3 添加 常用Type类用来简化描述符以及internal name的书写。4 修改原始Student类并重命名。
2024-06-27 11:48:29
164
原创 Gradle 核心之 Task
只有 Task 才可以在Gradle的执行阶段去执行(其实质是执行的 Task 中的一系列 Action),所以 Task 的重要性不言而喻。Task 的定义方式有如下两种:Task 的配置方式也有如下两种:配置了 group 后可以在 Android Studio 的 Gradle 面板看到对应的 Task Group 及其分组下的 Tasks,如下图所示:一般来说都推荐为我们的 task 配置 group,便于我们查找 task。
2024-06-24 19:37:16
1465
转载 一起来学字节码插桩:ASM Tree API
ASM是一个通用的Java字节码操作和分析框架。它可用于修改现有类或直接以二进制形式动态生成类。ASM提供了一些常见的字节码转换和分析算法,可以根据这些算法构建定制的复杂转换和代码分析工具。ASM提供了与其他Java字节码框架类似的功能,但更关注性能。因为它的设计和实现尽可能的小和快,它非常适合在动态系统中使用(但当然也可以以静态的方式使用,例如在编译器中)。关于ASM更多介绍,可以参见ASM官网。ASM从组成结构上可以分成两部分,一部分为Core API,另一部分为Tree API。Core API包括。
2024-06-20 22:27:44
197
原创 RecyclerView 、ScrollView滚动条长宽设置
如果我滚动条长度要求只占80%,或指定高度,滑块长度维持不变,那这明显不行。高亮滑块 长度固定, 滚动条总长度占整个高度的80%左右,并带有圆角效果。在styles.xml 文件中添加一个 style标签。此处设置一个 垂直的滚动条,然后在xml中引用该样式。最简单的一个效果出来了,但是这里可以看到,有两个现象。稍微修改下,背景跟滑块 使用两张自定义图片。背景图片仅少了指定高度。
2024-06-20 20:23:00
1920
原创 使用ASM为一个类增加属性工具类
使用ASM可以方便的访问和修改一个类,或者在JVM载入前动态更新一个类也是可以的,如下,使用反编译工具查看生成的CLASS文件,即可看到动态添加的属性了。
2024-06-19 00:25:12
308
原创 使用ASM动态创建接口实现类
注意,使用ASM访问属性和方法的时候,会返回一个Visitor对象,如属性为FieldVisitor,方法为MethodVisitor。
2024-06-19 00:09:46
357
原创 ASM之FieldVisitor创建变量
第一个参数是修饰类型,第二个参数是变量名,第三个是变量类型,第四个签名,第五个是变量的值(设置值好像没什么用,所以我在下面代码的初始化中重新初始化了str的值)
2024-06-18 23:49:31
688
原创 Gradle 自动化项目构建-Gradle 核心之 Project
从明面上看,Gradle是一款强大的构建工具,但 Gradle 不仅仅是一款强大的构建工具,它更像是一个编程框架。groovy 核心语法:包括 groovy 基本语法、闭包、数据结构、面向对象等等。Android DSL(build scrpit block):Android 插件在 Gradle 所特有的东西,我们可以在不同的 build scrpit block 中去做不同的事情。Gradle API:包含 Project、Task、Setting 等等。
2024-06-18 20:52:50
1436
转载 Android 编译插桩- APT 实战分析
可以看到经过 AspectJ 的字节码处理,它并不会直接把 Trace 函数直接插入到代码中,而是经过一系列自己的封装。如果想针对所有的函数都做插桩,AspectJ 会带来不少的性能影响。不过大部分情况,我们可能只会插桩某一小部分函数,这样 AspectJ 带来的性能影响就可以忽略不计了。从使用上来看,作为字节码处理元老,AspectJ 的框架也的确有自己的一些优势。成熟稳定。从字节码的格式和各种指令规则来看,字节码处理不是那么简单,如果处理出错,就会导致程序编译或者运行过程出问题。而 Aspect
2024-06-18 20:46:39
123
转载 Android 编译插桩深入了解
JavaPoet 是 square 推出的开源 java代码生成框架,提供 Java Api 生成 .java 源文件。这个框架功能非常有用,我们可以很方便的使用它根据注解、数据库模式、协议格式等来对应生成代码。通过这种自动化生成代码的方式,可以让我们用更加简洁优雅的方式要替代繁琐冗杂的重复工作。JavaPoet 原来还可以这样JavaPoet 编写过程为什么那么流畅,原来 Java 文件也可以用编程的方式生成JavaPoet 可不可以改进我的编码流程,提升效率。
2024-06-18 20:34:59
115
转载 Android 编译插桩入门
随着 Android 开发的发展,越来越多场景需要用到编译插桩了。日常开发中我们肯定也都接触过编译插桩,只是没有去深入挖掘它的实现原理,比如 ButterKnife、无痕埋点等,所以学习编译插桩不仅可以提升我们的竞争力,还可以让我们在开发中开拓视野、更好地解决问题。现在让我们一起学习一些编译插桩的基础来入门。不管是在 Java 后端开发还是 Android 开发,Java 注解都有很广泛的运用。
2024-06-18 20:16:52
177
转载 利用ASM完成第三方SDK安全整改
这篇文章用了Composing build的方式编写了gradle的插件,并使用gradle7.x的AsmClassVisitorFactory来对项目及SDK的代码进行整改,学习了!
2024-06-17 15:57:01
225
Android socket即时通信Demo
2016-06-17
Android将list数据通过LitePal保存到本地(集合保存到本地)
2016-06-17
AndroidDownLoad-多线程断点续传下载
2016-06-14
DownloadEngine-Android多线程下载断点续传
2016-06-14
android-rsa-http
2016-06-12
RxJava封装、离线缓存、在线缓存时间控制
2016-05-24
RxJava在Android中内存泄漏解决以及RxJava的封装
2016-05-23
Android H5做的商城客户端
2016-04-29
Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
2016-03-31
Android Bluetooth蓝牙通信文件传输
2016-03-27
Android蓝牙聊天程序的扩展开发(基于Google Sample,类QQ设计)
2016-03-26
Android蓝牙聊天程序优化版
2016-03-26
Android 通过Socket 和服务器通讯
2016-02-16
android RangeSeekBarView 选定范围值的控件
2016-02-01
Notepad++ 8.7最新版 64位安装包
2024-10-12
Flutter编程指南-多线程
2022-02-21
java数据结构与算法之美(物超所值)
2022-02-09
flutter_macos_2.8.1-stable.zip
2022-01-05
mac_apktool.zip
2021-03-25
Postman-osx-5.3.2 for Mac
2017-10-31
CoordinatorLayout+AppBarLayout实现上滑隐藏ToolBar
2016-08-19
android自定义进度条渐变色View的实例代码
2016-07-26
Android多行文本折叠展开效果
2016-07-25
Android封装popwindow类(下拉菜单弹出和收缩效果)
2016-07-22
Android自定义spinner下拉框
2016-07-16
Android DigitalClock实现倒计时
2016-07-12
Android 带箭头有光晕效果的ProgressBar
2016-07-04
android webview与 js交互通信
2016-06-20
Android项目webview中做与js交互
2016-06-20
Android客户端提供Socket服务与pc通过USB通信
2016-06-17
Android 使用Socket,ServerSocket编程网络通信
2016-06-17
自定义view和自定义动画怎么学习比较好呢?
2016-11-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人