- 博客(218)
- 资源 (12)
- 收藏
- 关注

原创 android自定义view之星星动画
先上效果图其实上边效果分为几个部分,一个部分是多个小星星四处扩散,第二个部分是一个小星星从小变大,还有一个是实心圆的动画。代码如下第一:所有的小星星动画public class StarView extends View { private Paint mPaint; private Bitmap mStar; // 星星图片 private ...
2019-09-26 11:56:01
1014

原创 android设计模式之适配器模式
早期使用listview的时候,就需要设置adapter,但是当时一直不明白为何要叫adapter?而且也觉得我们自己设置布局,我们自己绑定数据,就能显示到列表上,觉得写的很神奇。直到后来有人跟我说了适配器模式。我才渐渐明白…定义将一个类的接口,转变为客户希望的另外一个类的接口。适配器模式使得原本因接口不兼容不能在一起功能的类可以在一起工作。其实用大白话来解释就是:我已经定义了标准,...
2018-12-28 22:04:41
219

原创 android 自定义view缩小放大拖动小人
效果图如下:刚开始产品说要做这个效果的时候,一脸懵逼,光是围绕屏幕中心原点动态添加view就让人头疼。况且还要进行缩放和拖动,小人头上还有个标志位,然后百度找缩放的例子,找了一圈之后,慢慢的发现效果图需要用到的几个技术点不过是如下 1:如何对所有的view进行缩放? 2:对view进行拖动? 3:小人+头顶的标志如何实现走动效果?并且一直围绕建筑物走动? 4:如何动...
2018-07-01 11:33:11
5794

原创 android 自定义view之掷骰子小人走动的游戏
最近产品经理出了一个幺蛾子,说要通过一个小游戏来吸引用户获取奖励,当时过需求的时候,内心何止是一万个草泥马奔腾而过,简直是一亿个草泥马。过需求之后就冷静下来讨论该怎么实现,做完之后发现,其实也没有那么难!总的效果如下:因为csnd上传最大不能超过2M所以把gif图放到github上了效果图仔细分析需求中的几个难点 1.小人走动效果 2.路线布局 3.小人走动的四个方向 4.动画效果:红包小...
2018-06-10 12:29:20
2587

原创 android 仿照支付宝蚂蚁森林
本文在大神的基础上添加了修改了一些功能先说下思路1.如何让小球不重叠分布?2.小球上下移动这个可以具体看原文作者分析本文主要分析第一点刚开始想法是,每次随机生成一个x,y位置,但是这保证不了小球重叠的问题。然后受到原文作者启发,其实我们可以固定前面6个小球的位置,让它们处于屏幕中心,然后剩余的4个小球再随机的从我们定义好的位置中获取。这样就能保证10个小球既不会重叠...
2018-05-13 12:11:06
4571

原创 android 最简单的饼状图
录制的gif图有点渣,但是实际效果还是可以的。因为项目需要绘制饼状图,就很简单的饼状图带一个选中的效果,本来也想使用MPAndroidChart这个库的,但是觉得就实现一个效果引用整个库,对于一个有态度的程序员来说,内心是拒绝的(我不是装逼的人),所以自己自定义了一个,写的不好仅供参考。要做这么一个效果,我们应该分几步来写,1.先做一个静态的饼状图2.然后加上属性动画,有一个绘...
2018-03-20 18:07:47
6141
6
转载 手动编译实现Native层ollvm混淆
一、前言最近在学习《看雪》课程的时候,老看见hanbing大佬在操作时,对着某个文件加几行代码就实现了so文件的ollvm混淆,我很好奇,混淆so文件为啥这么简单??于是就去研究研究,最终也实现了mllvm -fla:控制流扁平化mllvm -sub:指令替换mllvm -bcf:虚假控制流程mllvm -sobf: 字符串加密选择在liunx环境中搭建,因为参考网上大佬所说,在windows下会出现一个无法解决的问题,所以,还是选择Linux环境吧二、环境准备。
2024-12-06 09:45:53
57
原创 Failure to verify dex file xxxxxxxx Out-of-order type_ids: 336a then 336a 解决方案
找不到application
2024-10-11 17:44:05
245
原创 android 编译源码添加日志打印
最后说一下网络请求其实是用得okhttp,但是稍微改了下,如果我们自己添加拦截器,其实是不起作用得,需要到HttpEngine这个类里面去添加日志,如果不知道哪里调用了当前类,可以在OkHttpClient这个类得构造方法里,添加堆栈打印。最近闲来无事,把源码编译一下,然后把这个源码编译到pixel3手机上,并且简单修改一下源码的网络请求,添加一些日志打印,堆栈打印,记录一下防止忘记。2.lunch,执行完这个命令,会让你选一个编号,这个编号要对应你要刷的系统版本,手机类型。要注意引入包,就好了。
2024-06-07 17:47:16
446
原创 com.intellij.openapi.externalSystem.model.ExternalSystemException (no error message)
com.intellij.openapi.externalSystem.model.ExternalSystemException (no error message)
2024-04-12 19:55:34
1574
原创 python执行脚本的时候获取输入参数
当我们执行脚本的时候,通常都会执行 python test.py -i xxx -o xxx,这里的 -i 和 -o 都是输入参数,这到底是怎么传递的呢?最后执行代码的时候 python xxx.py -i aaa -o bbb。这样就会输出aaa 和 bbb。
2024-01-26 18:09:20
509
1
原创 解决 The option ‘android.useNewApkCreator‘ is deprecated.
An exception occurred applying plugin request [id: 'com.android.application']> Failed to apply plugin 'com.android.internal.application'. > The option 'android.useNewApkCreator' is deprecated. The current default is 'true'. It was removed in
2023-11-03 17:28:28
563
2
原创 c++基础二
字符串,这里Flavio只有6个字符,却用了一个数组长度是7的字符串数组,是因为字符串最后一个字符必须是0,它是字符串的终止符号,我们必须给它留个位置。当我们用C编程时,它对我们有很大的帮助,它是C标准的一部分,就像语言本身,编译器和标准库一样。这只是一个开始,我提到了这两个操作,是因为它们是最常见的两个,预处理器能做的事情还有很多。另外一种常量的定义方式,不需要添加类型,也不需要使用=符号,并且可以省略末尾的;sizeof运算符返回,你传入的操作数的大小,也可以传入变量,甚至是类型也可以。
2023-08-16 11:19:56
126
原创 frida native hook简单demo
注意:最开始的时候,写的demo,一直不能hook,因为我在activity页面初始化的时候就调用so里面的方法了,后来我发现需要加一个按钮,然后点击按钮再去调用so里面的方法,这个时候就能hook了。记录frida hook native的笔记。当前frida的版本是16.1.0。
2023-07-28 17:20:49
378
原创 frida的记录
注意的是,安装的时候需要一台root过的手机,然后下载安装到手机的时候记得是下载server的。chmod 777 *(或者chmod 777 frida)本文记录一下使用frida,至于安装过程则可自行搜索。然后是测试的js代码,hook1.js的全部代码是。执行hook的frida命令是下边的。首先需要开启frida服务。
2023-06-26 14:31:08
158
原创 java.util.zip.zipexception invalid entry compressed size (expected 36586 but got 37005 bytes)
java.util.zip.zipexception invalid entry compressed size
2022-05-10 19:20:34
1259
原创 GitLab Remote: HTTP Basic: Access denied. fatal: Authentication failed
最开始是报如下的错bash: /dev/tty: No such device or addresserror: failed to execute prompt script (exit code 1)经过百度谷歌一顿搜索,大部分文章都说是凭证的问题,但是我反复检查发现凭证没有问题,然后就试着直接修改.git下边的config文件里面的路径,然后就报如下的错GitLab Remote: HTTP Basic: Access denied. fatal: Authentication failed
2022-04-21 12:04:47
664
转载 arouter 自定生成autowired
原文地址Evil Mouth’s BlogARouter @Autowired 自动注入May 31, 2020前言ARouter 有一个@Autowired 的注解,能自动帮我们赋值一些变量,例如public class MainFragment {@AutowiredString name;protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Ar
2022-03-11 17:30:23
786
原创 gradle笔记
最近跟gradle打交道比较多,tinker也用到了,然后混淆过程还有写一些脚本都需要用到gradle,所以零零碎碎记录一些gradle的知识点,不然经常去搜索很容易忘记,本文是方便自己后边查看,有写的不好的地方请勿见怪。Gradle执行的时候遵循如下顺序首先是解析settings.gradle来获取模块信息,这是初始化阶段然后配置每个模块,配置的时候不会执行task配置完成之后,有一个重要的回调project.afterEvaluate,这个表示所有模块配置完成,可以准备执行task了(可以.
2022-02-07 21:24:43
1306
转载 声明主要 DEX 文件中必需的类
为 MultiDex 应用构建每个 DEX 文件时,构建工具会执行复杂的决策制定以确定主要 DEX 文件中需要的类,以便您的应用能够成功启动。如果主要 DEX 文件中未提供启动期间需要的任何类,则您的应用会崩溃并出现 java.lang.NoClassDefFoundError 错误。对于直接从您的应用代码访问的代码,不应发生这种情况,因为构建工具可以识别这些代码路径。但是,当代码路径的可见性较低时(例如,当您使用的库具有复杂的依赖项时),可能会发生这种情况。例如,如果代码使用自检机制或从原生代码调用 J
2022-02-07 09:24:52
209
原创 记录几个常用的adb命令
1、adb logcat -b events > eventlog1 将系统日志打印输入到eventlog1文件中2、adb logcat -b events | findstr “am_proc_died | am_proc_start” 查看进程的启动信息,下边会记录每个进程的启动信息和死亡信息3、adb shell ps 查看所有进程4、adb shell ps | findstr “com” 查看所有以com开头的进程5、adb shell pm list packages 查看手机
2022-01-22 11:43:59
2481
原创 gradle 脚本扫描文件夹并把文件内容写到新建txt中
快要下班的时候,小哥给安排一个任务,需要把一个工程下边的所有的类导入的包给查找出来,我一想,我草,这尼玛,这个工程这么多文件夹,文件夹下还有文件夹,然后还有很多类,这个要是自己弄,生产队的驴也受不鸟,赶紧写了个脚本自动扫描,十分钟搞定,剩下的时间就可以愉快的摸鱼啦!代码如下task("scan") { println("开始扫描") def list = [] // 你要扫描的文件夹路径 def fileDir = file("F:\\workApp") fileD.
2021-11-09 20:12:34
2527
原创 gradle复制文件到你的build文件夹下
接到需求是,复制一个apk到build文件夹的assets文件夹下,我们都知道当我们点击clean的时候,build文件夹就会被清理,而且build文件夹下的assets文件夹并不存在,这个里面会根据application和library不同assets文件夹也会不同,具体看如下分析application下,build文件夹的assets文件夹名称叫做 merged_assetslibrary下,build文件夹的assets文件夹名称叫做library_assets全路径是在build/inte.
2021-11-09 17:24:03
3457
原创 android 插件化之不支持constraintLayout属性
最近有做插件化相关的东西,发现插件对constraintLayout的app:自定义属性不支持,我没找到真正解决问题的原因,临时思考得出的一个应对方案,但是能解决宿主和插件都引用constraintLayout的时候所引发的问题。背景在写demo的时候发现,宿主引用了constraintLayout,插件也引用了constraintLayout,但是插件里面使用constraintLayout的app:这种自定义属性就失效,虽然有打断点跟踪,但是没发现有什么不同之处,最主要的应该是跟Resource.
2021-11-05 10:31:57
1250
1
原创 gradle创建工程
之前对gradle脚本不熟悉,最近因为工作需要才学一点点基础知识,不过也踩了一些坑,记录一下,网上其实很多文章写的很好,有时候我们根据某一篇文章然后实战的时候,还是会出现问题,这个时候就需要看怎么去解决了。坑一Unable to load class这个问题找的时间最久,字面意思就是,我们在其他module使用我们的gradle工程时候,找不到我们自定义的groovy类。可能出错的地方有:1.包名要手动添加2.properties文件里面的路径也要写对3.我们的包名必须要写在groov.
2021-11-05 10:20:08
343
原创 android对文件进行加密
最开始想的是对apk进行加密,但是搜到的资料都是对dex层面的加密,后来转念一想,apk也可以被看做是一个普通的文件,普通的文件其实是可以使用AES进行加密的(AES比DES安全性和速度要更好,属于对称性加密里面很好的了),代码如下fun main(args: Array<String>) { // key也可以采用下边的FileAESUtil.getAutoCreateAESKey()方法自动生成 val key = "asdfghjkl" val content = .
2021-11-05 09:37:12
3838
2
原创 gradle复制文件到指定目录并且重新命名
Gradle复制apk到其他module下,并且重新命名// 直接在project下的build.gradle文件下加下边代码就好this.project.afterEvaluate { project -> project.tasks.each { task -> task.doLast { def fromFile = "${project.getProjectDir().path}\\plugindemo1\\build\\outputs
2021-11-03 15:15:36
1826
原创 Glide的缓存原理
Glide的源码比较复杂,功能也比较多,我看这个框架的时候,结合一位大佬写的博客,看了一个多月,才马虎看明白Glide的缓存原理1.我们都知道Glide是一个很优秀的框架,用起来非常简单,功能强大,越是用起来简单的东西,源码就越复杂,下边我们来扒一扒它的源码我们使用的时候,直接使用Glide.with(Context).load(url).into(imageview)我们直入主题,核心代码就在Engine这个类的load()方法中public synchronized <R> .
2021-08-31 15:32:49
239
原创 tcp四次挥手为何最后要等待2MSL时间?
之前别人问过的一个问题,说是四次挥手为何要等待2MSL时间?首先我们需要明白,MSL是表示什么意思?其实是maxinum segment lifttime(报文最大存活时间),tcp发出的包是有一个存活时间的。我们先来复习下tcp 的四次挥手,用C(client)和S(server)来代替1.C发出报文,说请求关闭,标识位为FIN,然后客户端进入一个等待状态,表示客户端没有数据发送给服务端了。2.S收到C的报文之后,会回复C一个报文,标志位为ACK,意思是我收到了,服务端进入等待关闭的状态。.
2021-08-30 11:29:40
1070
仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名,以及输入搜索条件过滤,显示姓名的文字图片,添加挤压动画
2016-01-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人