Android中使用ASPECTJ进行用户操作路径跟踪与日志搜集

编写初衷

在Android App开发中,出现了bug和崩溃测试们就会提着手机上门,然后开发一顿操作,bug消失了,测试们又只有进行大量的操作来复现。

这样的情况想必大家都遇到过,更极端的是线上出现了bug,虽然可以设置崩溃日志上传来收集崩溃日志,但是用户是怎么操作的,我们也只能靠猜

为什么不能有一个工具,记录下最近打开了什么界面,点击了哪些按钮,并且记录到本地,方便开发们查看呢?于是笔者有了写这个工具的想法。

我们来缕一缕:我们的工具要实现的几个功能
1. 记录activity的打开和关闭情况
2. 记录fragment的打开和关闭情况
3. 记录控件的点击情况
4. 把这些日志存放[……]

Read more

彻底摆脱数据线——远程ADB调试小工具开发过程记录

前排提示

本文中所描述工具只在ROOT过的设备上有效,如果不感兴趣的朋友可以点赞后退出了,也可以去github给我点个星星,源码地址在这里

写在开始前

每次重启测试机都要连接usb才能开始远程adb调试,真麻烦,能不能弄一个软件点一下就能开始远程调试呢?

如果对什么是adb远程调试不熟悉的朋友,可以搜索下adb tcpip 5555这条命令

为了解决每次重启都要连接一次电脑的问题,经过了大量的网络搜索,终于解决了这个问题。

本文记录了从提出问题到解决问题的全过程。

提问环节

  • 1.为什么要做这个工具?

    adb提供的远程调试工具不香吗,为什么还要没事找事折腾半天来做这个工具

  • 2[……]

    Read more

自己实现一个Android网络图片加载器

在Android开发中,我们经常会用到各种各样的图片加载框架来帮助我们加载网络图片,那有没有想过自己实现一个呢

本文记录了实现一个图片框架的整个流程,以及对代码的优化整理过程,文章比较长,如果只对其中的一部分感兴趣直接跳转到相应部分即可

提问环节

把大象装进冰箱分几步?是不是感觉在这初秋时节更加凉爽了呢

好吧,下面开始提问

  • 大多数图片都是网络获取的,如何加载网络图片到本地imageview
  • 图片有可能很大,怎么在加载前进行压缩
  • 每次加载同一个url的图片都要请求网络,可以做一个缓存来防止过度请求吗
  • 头像想显示圆角,怎么通过加载器显示圆角图片
  • 在图片没加载出来之前,会显示placeh[……]

    Read more

使用Databinding为Recyclerview使用同一个ViewHolder加载不同Item

提示:在阅读本篇文章前,你最好对android databinding有一定了解,本文使用的代码均为kotlin,但是不用担心,都很简单

最近在写项目的时候使用了databinding技术,突发奇想,databinding是不是也能应用于recyclerview中,让加载多个不同的item更简单呢。在网上搜索过后读到了这篇文章,发现作者巧妙的使用了原有的函数来实现,在结合了自身使用实践之后,就有了现在这篇博客。

提问环节

为了让阅读过程更有目的性,先提几个问题,让大家带着问题来阅读

adaper部分

Q1:onCreateViewHolder中怎么动态的创建不同类型的ViewHold[……]

Read more

Android测试体系-在MVVM架构中如何测试Model层与ViewModel层

背景

此文章是对于google code lab中《Introduction to Test Double and Dependence injection》 与 《Testing Basics》的总结,本篇主要讲述如何在mvvm架构的android项目中对Model层以及ViewModel层进行测试

Model层

为什么要测它

model层作为数据获取层,主要与network和数据库打交道,我们需要测试其对数据的获取和更新操作逻辑的正确性

测它的时候会遇到什么问题

如上所述,Model层通常和数据库和网络有较强相关性,我们需要测试的只是其对数据的处理逻辑。

如何解决

改变数[……]

Read more

项目的升级-给RemoveButterKnife插件增加新功能

前言

经过项目的初步编写和进一步改造,RemoveButterKnife插件终于也有模有样了,但是,功能上仅仅支持Activity/Fragment的BindView注解。

关于编写和优化的过程可以看下面两篇文章
项目构造RemoveButterKnife
项目改进-重构RemoveButterKnife
当然,这里也附上这个项目的github地址

为了让插件支持更加彻底,我们还要支持组合自定义view以及viewholder中使用butterknife的情况,当然,我们也要支持OnClick注解以及一些其他的使用场景。

要增加哪些功能?

首先要确定需要增加哪些功能点,功能点的更新如[……]

Read more

项目的改造——RemoveButterKnife插件代码的重构

前言

这篇文章记述了我的插件RemoveButterKnife的代码改进过程以及思路,关于插件,各位可以看RemoveButterKnife代码库,关于文章,可以看RemoveButterKnife从构思到实现

原因

近期想给原来的插件RemoveButterKnife加入一些新的功能,发现以前的代码没有使用任何的设计模式,全部功能都写在一起,对于新功能的添加来说十分糟糕。趁此机会重构了一下代码,在此记录过程。

具体步骤

插件主要分为三个部分
1. 主插件入口部分
2. 代码寻找/处理部分
3. 代码生成部分

1. 主插件入口部分

我们首先看第一部分,主入口部分,这部分内容主要代[……]

Read more

Android开发中的MVP模式概念以及网络请求实现顺序

MVP模式

三层

1.view
2.presenter
3.model

View

1.view职责,继承view接口,实现方法,持有presenter,this传入presenter

Presenter

2.presenter职责,实现databridge接口,接收view实现,处理逻辑,完成后使用view回调,与model交互,this传入model实例

Model

3.model职责,接收databridge实现,做网络请求,调用databridge实例做回调

结构如上图

1`7.view层创建presenter实例,并实现view接口
2.presenter层接收[……]

Read more

React Native Windows平台配置+接入typescript总结

配置

1.根据https://facebook.github.io/react-native/docs/getting-started.html的配置来进行初步设置
2.设置完毕后如果出现各种网络请求错误/拉取错误,使用android studio打开android目录,进行一次拉取
3.完毕之后再运行react-native run-android会遇到500错误,这是由于reactnative的版本错误造成的,按照下面步骤执行命令

接入typescript

1.在项目目录下运行命令行
2.执行以下指令

[crayo[……]

Read more