http://www.movable-type.co.uk/scripts/latlong.html
1.创建Retrofit对象 2.创建Service接口 retrofit.create方法为Service创建动态代理,可以说是Retrofit的核心。
3.创建调用API的Call对象 1.当调用Service中定义的方法时,会调用retrofit.create创建的动态代理,调用Proxy._newProxyInstance_中InvocationHandler的invoke方法,创建流程如下:
4.发起网络请求 请求网络的流程如下:
异步请求和同步类似,这里就不分析了。
okhttp3请求流程图如下
说明 使用MANJARO做Android开发将近3年时间了,整理下自己用到的工具,做到了基本替代Windows.
软件名称 arduino Arduino开发工具,玩esp8266用到的
calibre 电子书转换工具,mobi转epub等
code VSCode,编辑器\IDE
sqlitebrowser sqlite管理工具
dbeaver mysql管理工具
filezilla FTP客户端
goldendict 桌面取词翻译工具
intellij-idea-community IDEA
meld 文件比较工具
virtualbox vbox虚拟机
qpdfview pdf阅读器
shadowsocks-qt5
simplescreenrecorder 录屏工具
guvcview 查看摄像头工具
telegram-desktop telegram客户端
uget 带gui的下载工具
vlc 视频播放器
wireshark 大鲨鱼抓包
aria2 下载工具,配合uget
baiduunetdisk-bin 百度网盘
deepin-wine-wechat wine版本的微信
deepin.com.qq.office wine版本qqtim
genymotion android模拟器
qpdf pdf文件合并分割工具
realvnc-vnc-viewer vnc工具
wps-office wps
gimp 图片编辑程序,类似Photoshop
gparted 磁盘分区管理工具
termlnator 终端终结者 一个终端可以分成多个格子
sogoupinyin sogou输入法
ncdu 查看文件夹下所有文件夹占用大小
privoxy socks代理转http代理
xnviewmp 支持pdf的图片批量查看工具
SwitchHosts!-linux-x64 host切换工具
目标 实现一个室内地图,地图使用图片,svg格式,能够实现Marker,Polyline,放大,缩小等功能.
实现方法 其中的难点主要是,图像经过放大缩小后Marker\Polyline等坐标的对应关系.
地址 https://github.com/xfans/imagemap
说明 某微信群控软件,软件使用PC控制手机端实现对微信的群控,有PC端控制软件及android端控制软件,android端使用xposed实现对微信的控制.
逆向思路 逆向的目标是跨过PC端,使用自己的系统实现对android端的控制.因此要破解的是PC端与android端的通信协议.
逆向过程 1.熟悉软件 首先熟悉软件的功能,使用方法,常见的提示等,方便在后续逆向时能更好的理解代码.
2.分析逆向代码 使用jadx查看逆向出的伪java代码,通过分析代码最终找到pc端与android端是通过socket进行通信的.socket报文解析代码如下:
根据代码可以看出报文格式:
前4个字节为报文长度,最后一个字节为结束标示,中间为消息内容,消息内容是protobuff格式.
3.编写测试代码,逆向protobuff 根据逆向得到的消息格式尝试编写控制端,为了方便直接使用mina库实现socket.报文的编码解码很简单,复杂的是消息内容protobuff文件的逆向.
protobuff是google推出的数据格式化协议,之前没有用过pb但使用过facebook的thrift,原理上大体一致.
根据proto与java类型的对应关系,可以使用java的逆向文件反推出proto文件,然后再使用proto文件就可以生成java文件.反推比较复杂点就是注意required/optional/repeated限定符的使用.
生成protobuff的java类后就可以编写mina编写socket的编解码类了.Decode方法如下:
encode方法同理就不再贴了.
测试socket通信 要进行通信测试,首先要知道传递的参数有哪些.获取参数最简单的方法就是在protobuff解析的地方打印出log.
先使用baksmali\apktool反编译出smali代码,然后找到相应的地方插入log.然后正常操作群控工具拿到相应的log即可.具体操作步骤就不详细写了.
后续根据log中的信息,构造出protobuff对象即可与群控app正常通信.
相关链接 JADXhttps://github.com/skylot/jadx
Linux下的逆向工具集https://github.com/APK-Multi-Tool/APK-Multi-Tool-Linux
实现了Android录音,语音输入时的竖线波纹动画效果和音乐播放时的跳动效果
效果 实现原理 实现了两种运动效果:
1.从左到右移动 假设柱状图的高度是一个对列
27,17,38,91,38,24,8,60,38,14,8
8,27,17,38,91,38,24,8,60,38,14
14,8,27,17,38,91,38,24,8,60,38
从左到右移动实际上就是不断的将队列中的最后一个插入到队列的第一个。
代码:
2.上下跳动 假设柱状图是一个队列
27,17,38,91,38,24,8,60,38,14,8
上下跳动就是将队列的高度,从0%-100%变化
代码:
然后在onDraw绘制时高度*valueAnimatorOffset
绘制 代码:
地址 https://github.com/xfans/VoiceWaveView
问题 使用Manjaro工作大约两年了,习惯性的sudo pacman -Syyu,前一段时间更新完后,很多地方的中文字体都变成了方框。
解决方法 安装字体
重启后就好了
说明 把manjaro滚到最新版本后deepin-wine-wechat微信无法输入中文
解决方法 deepin-wine-wechat的github上给出了兼容列表
<th> wine版本 </th> <th> 兼容性 </th> <th> 备注 </th> <th> deepin-wine版本 </th> <th> 兼容性 </th> <th> 备注 </th> <td> 4.18-1 </td> <td> 部分 </td> <td> 不能使用中文输入法 </td> <td> </td> <td> </td> <td> </td> <td> 4.18-1 </td> <td> 部分 </td> <td> 不能使用中文输入法 </td> <td> 2.18_18-2 </td> <td> ? </td> <td> </td> <td> 4.18-1 </td> <td> 部分 </td> <td> 不能使用中文输入法 </td> <td> 2.18_18-2 </td> <td> 不支持 </td> <td> 闪退 </td> <td> 4.
按照最简单的原则即可:Activity处理自己的SaveInstanceState,Fragment处理自己的SaveInstanceState,不要调用Activity与Fragment之间数据传递的方法.