Android

launcher 使用windowIsTranslucent引发的bug

说明 把launcher的theme添加 <item name="android:windowIsTranslucent">true</item> 会引起生命周期的异常,引发home键无效等bug。 解决方法 使用 <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowShowWallpaper">true</item> 代替

替换口袋阅上的Kindle/微信阅读应用

说明: 在未刷机的情况下,口袋阅1的默认桌面如下: 自己安装的程序无法在桌面上显示,而桌面上的kindle又不经常使用。可以改为,点击Kindle进入自己安装的程序,比如:点击Kindle进入koreader。 方法: 实质上就是,自己编写一个与Kindle包名相同的程序,启动该程序时,启动你设置的程序。核心代码如下,很简单: 可以使用已经编译好的程序: 安装后输入要替换的包名,点击确认即可。然后点击桌面的Kindle图标即可进入设置的app。注意:安装该程序后,无法安装Kindle app。包名冲突。 卸载方法:adb uninstall com.amazon.kindlefc 地址: 下载地址:http://img.xfans.me/download/kdy-replace-release.apk 代码地址:https://github.com/xfans/KdyReplace

retrofit2源码及请求流程分析

1.创建Retrofit对象 2.创建Service接口 retrofit.create方法为Service创建动态代理,可以说是Retrofit的核心。 3.创建调用API的Call对象 1.当调用Service中定义的方法时,会调用retrofit.create创建的动态代理,调用Proxy._newProxyInstance_中InvocationHandler的invoke方法,创建流程如下: 4.发起网络请求 请求网络的流程如下: 异步请求和同步类似,这里就不分析了。

自定义View实现图片地图,SVG室内地图

目标 实现一个室内地图,地图使用图片,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录音、播放音乐,跳动效果动画自定义VIew

实现了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