- 博客(1898)
- 资源 (224)
- 问答 (1)
- 收藏
- 关注
转载 Git使用规范(Android版)
引言本文根据Git分支管理策略,结合Git Flow分支管理实践,制定了这个适合Android开发中的Git版本管理规范。同时结合实际操作演示了使用示例,希望对你有所帮助。1. 各分支简介下面分支中提到的的 version 应该替换为具体的版本,name 应该替换为具体的开发人员姓名,content 应该替换为需要优化的地方。master分支git的默认分⽀,主分支,不...
2019-08-22 14:55:16 3026 7
转载 不是人人都懂的学习要点
http://www.cnblogs.com/watsonyin/archive/2012/10/22/2734741.html学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 一.学习也是一种能力看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。
2012-12-12 15:54:05 7690 11
转载 一个三流学校程序员的奋斗
文章是转载的,我不是一个毅力很强的人,总得一些激励人的文章来激励自己 我也在一个三流的学校,在找有关考研的文章的时候看到这篇文章觉得不错,不敢独享,拿出来共勉…… 看完后我又一次明白,勤能补拙,一个人的成功,往往在于坚持没有挫折,不经历艰难的日子,就没有美好的明天……忘了是谁说的:当你感觉到艰难的时候,正是你在走上坡路的时候
2012-06-08 14:47:26 10184 20
转载 AGP8.0 ASM 更简单灵活了
在之前《Gradle Transform + ASM 探索》一文中讨论了使用 AGP 提供的 Transform 接口自定义 Gradle 插件,通过 ASM 进行代码插桩。实现一些类似方法耗时统计,批量添加点击事件做埋点的功能。但是随着 AGP8.0 的到来,Transform 接口已经被废弃了,至于废弃的原因官方解释也是很官方了。说白了,就是不好用,传统的 Transform API 增加编译耗时。同时提供了更好用的 API 来规避一些编译时的问题。
2024-08-06 01:16:52 68
转载 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 190
转载 Gradle自定义task打包AAR和APK
上图图示为打包AAR过程中,所经历的一系列task任务,以及执行顺序。如果我们想要修改其中的某一步,只需要定义我们自己的task对build目录下的文件做修改,将task插入到目标动作task中间,即可完成功能。以下列举多个例子来演示一下。
2024-07-09 19:41:46 260
转载 从Gradle生命周期到自定义Task挂接到Build构建流程全解
如果对一个构建流程的任务依赖关系不熟悉的话,可以使用第三方插件来查看,在根项目的build.gradle中添加如下代码:maven {// 应用插件然后执行./gradlew taskTree --no-repeat我们知道,Gradle 的构建流程是通过执行一系列的 Task 任务来完成的,每一个Task完成自己独特的工作之后,就根据Task的依赖关系,执行下一个 Task 任务。preBuild(开始构建之前执行的Task任务)->(合并资源文件的Task任务)->
2024-07-09 19:37:48 119
转载 Gradle8.0中Transform的替代方案
插件中对HuiRouterApi进行插桩,添加插入路由信息的字节码指令,在程序运行时,插桩的字节码指令执行,路由信息被注册到HuiRouterApi内部的路由表中,然后外部就可以通过HuiRouterApi进行跳转操作了。先定义一个注解,用来标记页面的路由信息,在定义一个路由管理类,用来存储路由信息并对外提供跳转功能。5、在taskAction方法中,扫描遍历所有的jar和class文件,收集路由信息,查找到HuiRouterApi类,并将收集到的路由信息通过插桩的方式添加到HuiRouterApi中。
2024-07-09 19:26:35 115
转载 Gradle自定义task打包AAR和APK
上图图示为打包AAR过程中,所经历的一系列task任务,以及执行顺序。如果我们想要修改其中的某一步,只需要定义我们自己的task对build目录下的文件做修改,将task插入到目标动作task中间,即可完成功能。以下列举多个例子来演示一下。
2024-07-03 11:34:08 201
转载 Gradle 进阶学习 之 Task
Gradle的任务依赖系统提供了灵活性和效率,允许开发者定义复杂的构建流程。了解任务依赖的执行顺序和重复依赖的处理方式,可以帮助开发者更好地控制构建过程,提高构建的可预测性和性能。在Gradle中,定义任务是构建自动化流程的基础。你可以通过几种不同的方式定义任务,每种方式都适用于不同的场景。通过Project的task()方法基本用法:使用Project对象的task()方法可以定义一个新任务。你可以传递一个字符串作为任务名称,以及一个闭包来定义任务的行为。闭包作为参数:闭包可以作为task()
2024-07-03 11:25:01 66
转载 从Gradle生命周期到自定义Task挂接到Build构建流程全解
如果对一个构建流程的任务依赖关系不熟悉的话,可以使用第三方插件来查看,在根项目的build.gradle中添加如下代码:maven {// 应用插件然后执行./gradlew taskTree --no-repeat我们知道,Gradle 的构建流程是通过执行一系列的 Task 任务来完成的,每一个Task完成自己独特的工作之后,就根据Task的依赖关系,执行下一个 Task 任务。preBuild(开始构建之前执行的Task任务)->(合并资源文件的Task任务)->
2024-07-03 10:31:05 154
转载 Gradle 动态修改VersionName和VersionCode
本文通过BuildType、Property、Variants三种方式介绍了动态修改VersionCode和VersionName的方法,但是他们的时机却有不同。BuildType:有局限性,仅能修改VersionName,无法修改VersionCode;Property:使用比较方便,在云编译场景比较常见,本地的话可以写在打包脚本里面;Variants:比较彻底,能完全覆盖,而且也可以抽成Plugin,但是如果有云编译的话,会导致云编译的更改失效;
2024-07-02 20:22:39 140
转载 Gradle不可忽视的构建分析
本文依次介绍了ProfileBuild Scan,通过这些构建分析工具,我们可以更好的去分析项目的构建过程,从而提升构建性能。Build Analyzer:开发工具提供,不割裂,但是分析能力相对基础,不过一般也够用了,推荐;Profile:本地分析报告,分析能力相对基础;Build Scan:在线分析报告,分析能力较强,可以进行深入的分析,推荐;其实Gradle还提供了Enterprice,比Build Scan的分析能力还要强,但是属于付费的,不是很符合现在降本增效的主题。
2024-07-02 20:18:01 54
转载 Gradle插件开发指南
编写一个插件Plugin其实挺简单的,只需要实现Plugin接口,并实现唯一apply方法即可。我们就直接写在@Overrideprintln("这是插件:${this.class.name}")这实际上是一个内联类。写完别忘了apply依赖上。第9行的apply方法是调用的PluginAware接口的apply()方法,参数是一个map,用来映射Plugin Id。sync输出:这是插件:YechaoaPlugin...在上一文。
2024-07-02 20:14:14 146
转载 Gradle构建核心之Task指南
Internal自定义一个类,继承自;Action的方法需要添加注解;对外暴露的参数需要使用@Internal注解;使用自定义Task:taskName = "我是传入的Task Name "类型传入自定义Task类。执行结果:我是传入的Task Name -- MyAction2我是传入的Task Name -- MyAction1至此关于Gradle Task的部分就介绍完了。
2024-07-02 20:02:35 93
转载 Gradle常用命令与参数
ok,现在我们就可以针对获取的参数去做一些自定义的操作了,比如修改我们的依赖。} else {} else {这里举例,在的时候依赖了devtools 1.1.1版本,时依赖了devtools 2.2.2版本。除了dependencies里面的依赖之外,Plugin、Task之类的也可以通过动态传参的方式去做自定义操作。
2024-07-02 18:11:27 312
转载 一文搞懂Gradle配置
Gradle第一点其实很好理解,比如Gradle需要java11的运行环境,再比如我们为了加快编译而给Gradle设置更大的运行空间等,这类配置往往相对固定的,因为它是跟随项目走的,即使是多团队协作,大家基本也都是用的同一个环境。
2024-07-02 18:00:17 1057
原创 通过反射和class文件asm字节码分析方法是get或者set方法
asm在解析文件的时候是按照特定顺序进行分析的,首先是visit方法,做类相关的解析,然后是注解,然后是属性,最后才是方法,属性是在所有方法分析前面进行,也就是只有当class文件中的所有属性都遍历完毕之后,才会去遍历方法:测试代码如下。1、反射获取类中的属性和方法,并判定方法是否是set或者get方法。
2024-06-28 09:28:16 219
原创 利用ASM和Javassist动态生成Class 类(set和get)
利用jvm的指令集直接构造class,简单的bean class 还是有应用场景的。在此利用ASM和Javassist各造例子以备忘!抽象类:SimpleJbean。
2024-06-28 00:08:37 288
原创 Asm动态生成类和get and set方法
asm在解析文件的时候是按照特定顺序进行分析的,首先是visit方法,做类相关的解析,然后是注解,然后是属性,最后才是方法,属性是在所有方法分析前面进行,也就是只有当class文件中的所有属性都遍历完毕之后,才会去遍历方法
2024-06-27 20:26:36 290
转载 ASM 在方法进入时候添加语句和方法退出的时候添加代码
在从 ClassReader 到 ClassVisitor 到ClassWriter的过程中, 由 ClassReader来触发各种visitXXX事件,在此过程中如果没有加入任何的ClassVisitor亦或是ClassVisitor只是trace等操作并没有在这个过程中做任何的拦截,那么最终调用的ClassWriter的visitXXX方法,此时将会把原来的class信息原封不动的写入。3 添加 常用Type类用来简化描述符以及internal name的书写。4 修改原始Student类并重命名。
2024-06-27 11:48:29 78
原创 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 1140
转载 一起来学字节码插桩:ASM Tree API
ASM是一个通用的Java字节码操作和分析框架。它可用于修改现有类或直接以二进制形式动态生成类。ASM提供了一些常见的字节码转换和分析算法,可以根据这些算法构建定制的复杂转换和代码分析工具。ASM提供了与其他Java字节码框架类似的功能,但更关注性能。因为它的设计和实现尽可能的小和快,它非常适合在动态系统中使用(但当然也可以以静态的方式使用,例如在编译器中)。关于ASM更多介绍,可以参见ASM官网。ASM从组成结构上可以分成两部分,一部分为Core API,另一部分为Tree API。Core API包括。
2024-06-20 22:27:44 82
原创 RecyclerView 、ScrollView滚动条长宽设置
如果我滚动条长度要求只占80%,或指定高度,滑块长度维持不变,那这明显不行。高亮滑块 长度固定, 滚动条总长度占整个高度的80%左右,并带有圆角效果。在styles.xml 文件中添加一个 style标签。此处设置一个 垂直的滚动条,然后在xml中引用该样式。最简单的一个效果出来了,但是这里可以看到,有两个现象。稍微修改下,背景跟滑块 使用两张自定义图片。背景图片仅少了指定高度。
2024-06-20 20:23:00 1240
原创 使用ASM为一个类增加属性工具类
使用ASM可以方便的访问和修改一个类,或者在JVM载入前动态更新一个类也是可以的,如下,使用反编译工具查看生成的CLASS文件,即可看到动态添加的属性了。
2024-06-19 00:25:12 204
原创 使用ASM动态创建接口实现类
注意,使用ASM访问属性和方法的时候,会返回一个Visitor对象,如属性为FieldVisitor,方法为MethodVisitor。
2024-06-19 00:09:46 255
原创 ASM之FieldVisitor创建变量
第一个参数是修饰类型,第二个参数是变量名,第三个是变量类型,第四个签名,第五个是变量的值(设置值好像没什么用,所以我在下面代码的初始化中重新初始化了str的值)
2024-06-18 23:49:31 610
原创 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 1265
转载 Android 编译插桩- APT 实战分析
可以看到经过 AspectJ 的字节码处理,它并不会直接把 Trace 函数直接插入到代码中,而是经过一系列自己的封装。如果想针对所有的函数都做插桩,AspectJ 会带来不少的性能影响。不过大部分情况,我们可能只会插桩某一小部分函数,这样 AspectJ 带来的性能影响就可以忽略不计了。从使用上来看,作为字节码处理元老,AspectJ 的框架也的确有自己的一些优势。成熟稳定。从字节码的格式和各种指令规则来看,字节码处理不是那么简单,如果处理出错,就会导致程序编译或者运行过程出问题。而 Aspect
2024-06-18 20:46:39 41
转载 Android 编译插桩深入了解
JavaPoet 是 square 推出的开源 java代码生成框架,提供 Java Api 生成 .java 源文件。这个框架功能非常有用,我们可以很方便的使用它根据注解、数据库模式、协议格式等来对应生成代码。通过这种自动化生成代码的方式,可以让我们用更加简洁优雅的方式要替代繁琐冗杂的重复工作。JavaPoet 原来还可以这样JavaPoet 编写过程为什么那么流畅,原来 Java 文件也可以用编程的方式生成JavaPoet 可不可以改进我的编码流程,提升效率。
2024-06-18 20:34:59 32
转载 Android 编译插桩入门
随着 Android 开发的发展,越来越多场景需要用到编译插桩了。日常开发中我们肯定也都接触过编译插桩,只是没有去深入挖掘它的实现原理,比如 ButterKnife、无痕埋点等,所以学习编译插桩不仅可以提升我们的竞争力,还可以让我们在开发中开拓视野、更好地解决问题。现在让我们一起学习一些编译插桩的基础来入门。不管是在 Java 后端开发还是 Android 开发,Java 注解都有很广泛的运用。
2024-06-18 20:16:52 65
转载 利用ASM完成第三方SDK安全整改
这篇文章用了Composing build的方式编写了gradle的插件,并使用gradle7.x的AsmClassVisitorFactory来对项目及SDK的代码进行整改,学习了!
2024-06-17 15:57:01 65
转载 ASM字节码插桩之Transform的替代方案
最近在学习asm字节码插桩相关的知识,发现在高版本的gradle上以前的Transform已经废弃,于是研究了一下新版本字节码插桩的实现,本文将简单地介绍下新版本gradle上字节码插桩的实现。
2024-06-17 15:37:05 84
转载 APM框架Matrix源码用到的字节码插桩
traceMethodFromSrc和traceMethodFromJar分别对src和jar插桩,以traceMethodFromSrc为例,会在子线程中执行。: 将方法信息封装成TraceMethod,把需要插桩和不需要插桩(过滤黑名单、空方法、get/set等简单方法)的方法存入两个map。CollectSrcTask和CollectJarTask逻辑相同,一个处理class,一个处理jar,使用了ASM。解析得到类、方法在混淆前和混淆后的映射关系,保存在MappingCollector中。
2024-06-17 14:51:40 62
转载 组件化框架 ARouter 完全解析(三)AGP/Transform/ASM—动态代码注入
本篇内容较多,前半部分都是在介绍铺垫知识,只有完全理解了才能掌握ARouter框架的核心。其中Gradle、AGP是Android开发中必定使用到的技术点,希望通过对ARouter的学习能更加深刻的理解Android编译构建的过程,以及使用Gradle插件能完成哪些事情。Transform是官方Gradle 插件中提供的API,它能获取和处理被打进dex文件之前的class文件。不过Transform在最新的Gradle插件版本中被废弃了,不过这不影响我们我们对它的学习。
2024-06-15 13:14:03 82
转载 组件化框架 ARouter 完全解析(二)APT技术
APT(Annotation Processing Tool),即注解处理器,是javac中提供的编译时扫描和处理注解的工具,它对源代码文件进行检测找出其中的注解,然后使用注解进行额外的处理。注解就像是一个标签,有很多类型,可以贴在某些元素上面进行标记,并且标签上可以写一些信息。APT就是用来处理标签的工具,在编译开始后,可以拿到自己所关心的类型的所有标签,然后根据标签信息和被标记的元素信息,做一些事情。
2024-06-15 13:09:00 51
Android将list数据通过LitePal保存到本地(集合保存到本地)
2016-06-17
AndroidDownLoad-多线程断点续传下载
2016-06-14
DownloadEngine-Android多线程下载断点续传
2016-06-14
android-rsa-http
2016-06-12
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
Android仿天天动态上拉播放界面控件
2016-01-31
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
Android socket即时通信Demo
2016-06-17
自定义view和自定义动画怎么学习比较好呢?
2016-11-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人