自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (6)
  • 收藏
  • 关注

原创 koin框架预研文档

背景 koin框架简介:Koin框架,适用于使用Kotlin开发 ,是一款轻量级的依赖注入框架,无代理,无代码生成,无反射,相对于dagger 而言更加适合Kotlin语引入目的:目前轻颜相机使用的是dagger框架,dagger框架属于一种依赖注入框架,经过证明这种框架有助于帮助代码中各个模块进行解耦,所以我们前提条件是支持引入依赖注入框架的。 另一方面,在依赖注入框架的选择上,我们对比了dagger和koin,发现了dagger的一些不足,比如上手难,需要手动注入等问题,同时研...

2020-12-07 18:10:43 891

原创 同步机制比较

背景 开发过程中经常用到同步相关场景,比如多进程、多线程、协程等,每种机制都有各自的优缺点。俗话说的好,存在即合理,每种机制既然还存在就代表还有各自的不可替代性,因此了解每种机制的优缺点能帮助我们更好判断每种场景下适合的方案,下面就简单来分析一下 几种同步机制比较 1、并发与并行看起来它们好像都一样,但其实还是有区别的:并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配...

2020-12-07 16:35:08 1021

原创 Navigation实践总结

背景 Navigation作为Jetpack四大组件之一,可以为单Activity多Fragment结构提供重要支持。我们知道Activity是属于比较重的组件,而Fragment是比较轻量化的,因此这种结构对界面性能方面有很大影响但是每种框架都有他的优缺点,Navigation对外宣传时的确优点很多,比如fragment各种状态管理,参数类型限制,快速切换fragment等,当然这种也是吸引我们尝试这种框架的原因,不过有些特点只有在使用过程中才会发现,这也是为什么我们经常要做预研的原因,...

2020-10-05 13:57:41 1130

原创 Kotlin协程基本原理介绍

背景 协程对于大家来说肯定不陌生了,一个进程有多个线程,一个线程有多个协程,协程作为轻量级“线程”,最大特点是可以把异步逻辑以同步方式写出来,让代码更加清晰。同时协程可以和生命周期绑定,比如viewModelScope、lifecycleScope等等,极大的方便了开发者。那协程的不阻塞线程到底是什么原理呢?它真的比线程开销小吗?这里帮大家初探一下! 协程使用 1、以viewModelScope为例,我们先来看一下简单的使用样例,如下:viewModelScope.launch...

2020-10-05 13:39:46 1443

原创 android性能优化&架构优化

架构篇 组件化: 1、将app拆分成业务和基础组件,业务包括像拍摄、推送、账户、分享, 业务组件之间的依赖可以通过定义接口来解耦 接口和实现可以分别定义一个module,接口module提供给业务层,实现接口的module通过动态方式与接口关联起来,两个module可以放在一个文件夹下 2、基础库像播放器、网络库、UI组件、图片库等 性能篇 systrace使用: 进入Android/sdk/platform-tools/syst...

2020-07-09 20:05:56 728 1

原创 systrace介绍

背景 1、什么是systrace?Systrace是Android4.1引入的性能分析工具。利用ftrace,在系统关键位置都有埋点,主要用于分析系统调用耗时问题,可以自定义trace标签来细化调用栈2 、为什么要用systrace,像腾讯的PerfDog不香吗?原因有以下几点:PerfDog这种软件能直观的查看CPU、GPU、内存等数据,比较适合用来做内存泄漏分析或者帧率的测试,但是对CPU具体使用情况是无法细化的,而systrace可以查看手机全部CPU每时每刻的占用情况...

2020-06-13 15:27:24 6312

原创 Android快速搭建MVVM框架

架构 上面是从一个开源项目中了解到的框架结构,以最简洁的方式搭建一个app的基础框架。框架的几个特点是:通过Jetpack的Navigation构建单Activity多Fragment结构,我们知道Activity是属于比较重的组件,而Fragment是比较轻量化的,因此这种结构对界面性能方面有很大影响 通过koin这个依赖注入框架来管理ViewModel等实例的生命周...

2020-04-05 00:28:08 8555

原创 听歌识曲原理分析

背景听歌识曲是我们生活中常见的功能了,那么这里面的原理又是什么呢?正如一句话说的:你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章,傅里叶同学告诉我们,任何周期函数,都可以看作是不同振幅,不同相位正弦波的叠加这也是听歌识曲里面用到的一个重要概念:频谱,更进一步说是短时傅里叶变换,通过变换采集音频特征作为匹配对象,将待识别的音频按同样方式采集特征,双方进行匹配...

2019-10-26 10:56:56 8705 2

原创 滑动拼接效果实现

图片进行不同分割采用不同的动效就会产生不同的效果,比如广告轮播图等,将图片裁剪后进行不同的移动方式既可以增加新鲜感,同时展示的内容也更丰富可以先看一下效果:要实现上面的效果我们有两个问题要考虑:图片裁剪问题 图片移动消失问题一、图片裁剪问题先来看第一个问题,图片裁剪的实现,刚做这个效果的时候自己也没想到合适的实现,经过网上一番搜索,发现了一个比较好用的工具BitmapSha...

2019-08-24 17:04:52 396

原创 ACGAN网络

什么是GAN网络?GAN(Generative Adversarial Networks)的初衷就是生成不存在于真实世界的数据,类似于使得 AI具有创造力或者想象力。应用场景如下:AI作家,AI画家等需要创造力的AI体; 将模糊图变清晰(去雨,去雾,去抖动,去马赛克等),这需要AI具有所谓的“想象力”,能脑补情节; 进行数据增强,根据已有数据生成更多新数据供以feed,可以减缓模型过拟...

2019-07-28 14:49:46 17047 16

原创 MVVM深入理解

还是基于上面的MVVM结构来谈一下对该结构深入一点的理解仓库层的理解刚开始看MVVM的时候ViewModel层比较好理解一些,就是作为View和Mode的桥接,将视图和数据解耦,但是对仓库层的理解就没那么好了第一次写仓库层的时候是直接在ViewModel层调用数据加载,比如下面这段代码:class LiveInfoViewMode : ViewModel() ...

2019-06-16 14:03:31 1125 1

原创 MVVM模式之基础篇

MVVM的定义如上所示,MVVM是Mode-View-ViewMode模式:Model :负责数据实现和逻辑处理,类似MVP。View : 对应于Activity和XML,负责View的绘制以及与用户交互,类似MVP。ViewModel : 创建关联,将model和view绑定起来,如此之后,我们model的更改,通过viewmodel反馈给view,从而自动刷新界面...

2019-04-30 14:16:37 2388

原创 GlideBitmapPool

背景字节池复用是什么?为什么我们需要用到这个呢?首先来看一个问题,android里面的垃圾回收机制我们都了解过一些,当内存不足时会执行GC来释放不再被引用的对象,那么问题来了,如果在内存快要到达极限时程序又在那反复申请和回收对象会造成什么问题呢?答案就是你申请的时候会等待一次GC,而GC本身是有一定耗时的,如果你是在UI线程里面这样做的话很快就会超过规定的执行时间,最终出现ANR。...

2019-03-30 14:53:36 2183

原创 OpenGL基础篇之渲染过程

背景 OpenGL是一种跨平台的图像渲染方式,这边主要介绍一下OpenGL在android上的应用,即OpenGLES,之所以用它来渲染是因为以往的c++渲染方式比较慢而且占用较大内存,使用OpenGL可以实现实时渲染,而且可以充分利用GPU的内存。  OpenGL数据传递 要使用OpenGL进行渲染,第一步就是怎样把数据放到GPU里面了,利用IPC这样的数据传递是不现实的,...

2019-01-12 16:20:05 3089

原创 Dialog异常总结

1、not attached to window manager原因分析:dialog.show()或者dialog.dismiss()的时候activity已经销毁解决办法:在show和dismiss之前判断activity状态2、has leaked window(窗体泄漏)原因分析:在activity销毁后dialog还存在着并持有activity引用解决办法:利用lif...

2018-08-18 16:34:52 1294

原创 Android内存泄漏分析工具

一、背景内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。通常我们开发的app如果没有检测内存泄漏严重时会导致崩溃,所以还是有必要检测一下的。二、android mat工具使用1、 mat(Memory Analyzer Tool)下载地址:http://www.e...

2018-06-30 13:46:39 300

原创 Android绘制贝塞尔曲线

一、背景贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线。利用贝塞尔曲线,我们可以更平滑的画出手势操作的轨迹,然后实现像橡皮檫等功能n阶贝兹曲线可如下推断。给定点P0、P1、…、Pn,其贝兹曲线即:t 值的计算方式为:j/(N),N代表要生成的贝塞尔点个数,控制点的数量是n...

2018-05-12 19:17:12 4509

原创 Android实现素材擦除功能

一、背景如果有这样一个需求,需要擦除的是素材而保留背景图片,并且保存的时候能将背景图片和素材重新绘制到一起生成一张新的图片,这张图片大小比例就和原图一样,只不过上面多了素材。之前在网上找过橡皮檫的实现,大多数是以整张view作为画板,但是这个需求情况下就不能使用整张view作为画板了,不然保存的时候还要裁剪出素材,一不小心还把素材大小什么的搞乱了,这时候就需要另一种办法了 二、实现先重写view的...

2018-04-29 20:31:28 1038 1

原创 RecycleView实现QQ侧滑效果

一、    侧滑效果描述1、 item向左滑动不是马上删除Item,而是展示删除按钮2、 这边利用RecycleView提供的ItemTouchHelper可以较轻松实现这个效果3、 效果图:  二、    代码实现1、创建含有RecycleView的fragmentpackage com.example.myapplication;import android.os.Bundle;imp...

2018-03-31 20:53:47 1315 6

原创 Jni调用PBO提高读取速度

一、初始化PBO环境如果你的minSdkVersion小于18,那么你需要下载google提供的gl3stub.c文件,不然编译都通过不了,会一直报错找不到GLESv3,具体可以参考google提供的demo:https://github.com/googlesamples/android-ndk/tree/master/gles3jni下载好gl3stub.h和gl3stub....

2018-03-18 14:42:11 1131 1

原创 基于android things的MDM方案

一、       android things环境搭建1、 设备:1) 树莓派32) 树莓派3充电器3) HDMI转vga或者HDMI转dvi(具体根据你的显示器接口而定)4) 路由器(用于adb连接树莓派进行调试应用等各种操作)5) 两条网线6) 显示器7) 读卡器8) Sdcard卡(用于烧入android things系统镜像)9) Android s

2017-12-26 11:02:09 2990

原创 android图片缓存框架Glide解析

Glide 是基于 Picasso 的一套android图片缓存框架,它在Picasso 的基础上做了大量优化与改进。Glide 默认的 Bitmap 格式是 RGB_565 格式,而 Picasso 默认的是 ARGB_8888 格式,这个内存开销要小一半。Glide的特点是能和activity、fragment的生命周期保持一致,这样应用退出后可以停止图片加载Glide缓存...

2017-12-10 14:27:15 991

原创 Android 7.0系统校验证书流程

Android系统在建立HTTPS三次握手后会进行证书校验,接下来根据android 7.0系统代码来看一下证书校验流程 当我们校验证书的时候首先需要创建一个android.security.net.config.RootTrustMangaer对象,然后调用它的checkServerTrusted1、证书校验入口函数  @Override public void chec

2017-09-25 21:13:40 5613

原创 Android 4.4系统HTTPS证书校验

Android系统在建立HTTPS三次握手后会进行证书校验,接下来根据android 7.0系统代码来看一下证书校验流程 从org.conscrypt.TrustManagerImpl开始介绍1、证书校验入口函数  @Override public void checkServerTrusted(X509Certificate[] chain, String authType)

2017-09-24 14:28:24 3752

原创 Android View事件传播机制

Android上View是最常用的一个类,很多控件都是继承它的,接下来主要介绍一些view的传播机制,这个对于处理各种点击事件还是很重要的,下面就拿android N的代码看一下view上面touch event的传播过程 一、View中的dispatchTouchEvent方法 public boolean dispatchTouchEvent(MotionEvent event) { ...

2017-09-09 15:16:27 321

原创 android DNS检测

前段时间心血来潮,突然想研究一下dns检测是什么实现的,于是拿wifi管家开刀了,下面是分析结果: 首先入口函数:protected boolean arQ() { String v0_2; String v4_1; int v12 = 2; int v11 = 3; int v4 = ((int)(this.

2017-08-20 12:40:00 4289

原创 android检测arp攻击

前段时间突然和别人讨论到arp检测这块的实现,心血来潮,将腾讯的wifi管家给反编译了一下,看了它如何实现arp检测,下面是分析的结果。 下面是wifi管家检测arp攻击的类,进入的时候会发送一个message,然后执行handleMessage函数 public void handleMessage(Message arg8) { ...

2017-08-12 15:52:40 4036

原创 Spark+hbase环境搭建

一、环境Spark: 2.1.0Hadoop: 2.6.0Hbase: 1.2.6开发环境:Android Studio 二、hbase简介HBase是一个分布式的、面向列的开源数据库,该技术来源于Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File Syste

2017-06-24 11:33:06 8610

原创 Spark+Hadoop环境搭建

一、工具下载:1、spark下载目前最新的是2.1.1,spark 2.0开始api和之前的还是有比较多的变化,因此如果选择2.0以上版本,最好看一下api变化,下载地址:http://spark.apache.org/downloads.html2、hadoop下载目前最新的hadoop版本已经到了3.0了,可以根据你的选择需要的版本,下载地址:https://dist.apac

2017-06-17 11:51:22 8473

原创 IDA动态调试so

IDA是一个可以用来反编译so、dll、exe、sys等文件,不过IDA无法直接修改汇编代码,这个相对于Ollydbg来说是一个不足的地方,不过它可以通过修改hex代码来修改指令。下面是关于IDA调试android so的介绍 IDA调试so步骤:1. 复制IDA 6.8\dbgsrv\android_server到/data/local/tmp目录下2. 进入/data/lo

2017-05-13 13:58:26 9523 6

原创 Android系统服务

   Android框架层提供了本地系统服务和java系统服务,那么这些服务是如何检索的呢,下面简要分析一下这个过程。 一、服务检索 服务检索是指调用服务的客户端向Context Manager(service manager中第一个注册的节点)请求指定服务的handle的过程。调用服务的客户端把包含服务请求信息的IPC数据发送给Context Manager,然后Context ...

2017-05-04 12:33:25 296

原创 ListView图片错乱原因分析

先来看一段代码:@Overridepublic View getView(finalint position, ViewconvertView, ViewGroup parent) { ViewHolder holder; if (convertView== null) { convertView = mInflater.inflate(R.layout.it

2017-04-28 14:46:43 553

原创 libpcap原理分析

Libpcap是一个比较好用的抓包工具,tcpdump也是基于它实现的,下面介绍一下android上是如何利用它抓包的  调用示例:由于它是基于c的代码,因此使用c++时记得extern "C",下面代码是结合libnet实现的:#include #include #include #include #include #include #include #include

2017-04-16 17:24:02 6469

原创 Apk加壳实现

前几天在网上看到一篇不错的介绍关于apk加壳的介绍,Android中的Apk的加固(加壳)原理解析和实现,针对里面关于资源加载这块自己研究了下,给出了一个方案,下面结合那篇文章的内容做一下apk加壳流程介绍  一、将目标apk加密放进壳apk的classes.dex里面,代码如下package com.example;import java.io.ByteArrayOutputSt

2017-03-25 14:49:43 4179 3

原创 Android插件研究

Android可以通过插件来hook系统api,这个功能既能用在安全方面,也能用在其他方面,下面是通过研究360开源的插件源码来分析的。  一、  声明Application:<applicationandroid:name="com.morgoo.droidplugin.PluginApplication"android:label="@string/app_name"

2017-03-18 15:26:14 647

原创 图片隐藏文件技术

之前看到一篇关于将文件隐藏在图片中的技术介绍,感觉非常有意思,于是研究了一下,它介绍的是将恶意apk文件加密成一张图片,再把它放到正常的apk里,当用户点击这张图片的时候再将它解密,就能实现恶意加载了,不过经过自己的测试,apk文件处理后会导致签名校验失败,从而导致无法安装,重新签名的话又不能加密成图片,一个办法就是将apk文件压缩成一个zip文件,再把这个zip文件加密成图片就可以了。...

2017-03-04 13:12:58 1194

转载 Android Sqlite 漏洞

Android 版本在2.3.7和4.0.1之间有个sqlite漏洞,这个漏洞会导致任何第三方应用可以访问/data/data//databases/文件,这样就能读取你的私密数据,特别里面如果有密码什么的,读取方法如下:public class SqliteJournalLeakActivity extends Activity { @Override protec

2017-02-16 15:15:35 641

原创 Android权限校验过程

Android框架层提供了权限机制来确保安全,下面是android 7.0源码中关于权限校验过程的介绍:1、首先调用ContextImpl中checkCallingOrSelfPermission方法:@Override public int checkCallingOrSelfPermission(String permission) { if (pe

2017-02-12 16:36:44 3359

原创 Android 常用代码混淆语法

Android提供的proguard.cfg文件可以用来配置代码混淆,不过默认情况下是关闭的,下面是android studio中开启混淆的方法:android { buildTypes { debug{ minifyEnabled true proguardFiles getDefaultProguardFile('progua...

2017-01-14 12:40:28 728

原创 Python自动登录脚本

一、环境Python 2.7.xpip 8.1.1注意:pip升级后下载依赖包会报certificate verifyfailed      解决办法是加入--trusted-host pypi.python.org例如:pip install --trusted-host pypi.python.org Exception 二、urllib21)Get方式:# 登

2016-12-21 16:29:57 10137

android apk加壳

给apk加壳,运行时动态把壳去掉,让apk更加安全,适合研究android安全

2018-01-08

文件隐藏到图片中demo

利用图片文件特点将zip文件放到图片里面,等需要的时候再提取出来

2018-01-08

apktool-2.2.1

apktool最新版本,可以支持到android7.0

2016-11-30

hadoop源码

hadoop最新源码,可以在linux下编译生成适合虚拟机的hadoop版本,hadoop完整源码,用于hadoop开发环境的搭建

2014-11-08

SQLyog.Ultimate.v11.1.1.0 32bit&64bit TTRAR.Com

能够连接mysql等数据库,执行所有的数据库命令,可视化操作也相当方便,可以迅速掌握数据库的情况和对数据库进行操作,支持32位和64位系统

2014-09-13

淘吧客户端源码

淘宝客户端源码,介绍如何进行网上交易,介绍了具体的操作

2014-07-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除