Guofeng Blog

「离开世界之前 一切都是过程」

Java 泛型上界 extends 和泛型下界 super 详解

Java 泛型上界 extends 和泛型下界 super 详解 转载于 Java 泛型上下界 <? extends T>和<? super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。 <? extends T>:是指 “上界通配符(Upper Bounds Wildcards)” <...

Android VasDolly渠道包实现原理(v1,v2签名介绍)

Android VasDolly渠道包实现原理(v1,v2签名介绍) 转载于 VasDolly 概述 众所周知,因为国内Android应用分发市场的现状,我们在发布APP时,一般需要生成多个渠道包,上传到不同的应用市场。这些渠道包需要包含不同的渠道信息,在APP和后台交互或者数据上报时,会带上各自的渠道信息。这样,我们就能统计到每个分发市场的下载数、用户数等关键数据。 普通的多渠道打...

Android 权限实践总结

Android 权限实践总结 前言 虽然Android M 23推出了动态权限申请,但是6.0之前的系统怎么办呢?特别是恶心的国产 ROM 各自为政,都搞了一套自己的权限。除此之外,当你的 targetSDKVersion < 23时,在 M 以上的手机是默认全部授予的,看起来没问题,但是用户居然可以手动取消。WTF……..这一坨该怎么弄,本文综合对权限的理解与工程中的使用,给出如...

手写SDK 项目之网络框架

手写Android SDK 项目网络框架 原作者 我的前言 作为一款 app 开发者而言,可能真的就是 rxjava+retrofit+okhttp 搞定网络请求了。但是假如你是做一个 sdk 的,比如地图 SDK,埋点 SDK,就不能这么搞了,因为你依赖了一个外部特定的 SDK,假如接入的 APP 也用了同样的库,但是版本不一样,新版本往往有些新的改动,这个时候你的 SDK 就不稳定...

介绍一款好玩的工具 [Appetizer]

介绍一款好玩的工具 [Appetizer] 介绍一款好玩的工具,测试同学可能比较感兴趣,同时控制多个收集操作: replaykit 是 Appetizer 的核心功能,它提供了如下功能: 从单台设备录制屏幕触碰事件,在多台设备上重放(需要屏幕横宽比一致) 同时控制多台设备(例如, 运行一个 shell 命令,安装 apk 等) 将一台设备的屏幕触碰事件,镜像操作到多台设备...

Android6.0动态权限源码导读

Android6.0动态权限源码导读 原文作者 作者对源码进行过跟踪调试,所以整个源码流程还是很清晰的,转载过来,以备不时之需。 1 写在前面 话说 6.0 出来已经挺久了,对于权限适配我们也有很多轮子可用。关于如何适配 6.0 权限,网上资料很多也很完善,故并不会展开探讨。 不用第三方框架的话,我们会和这些 api 打交道 (方法太长省略参数): Context.check...

OkHttpDNS实现原理

OkHttpDNS实现原理 原文作者 作者在解析 HttpDNS之后,并没有把解析的结果包装为 InetAddress,而是直接调用了 InetAddress.getByName 方法,方法仍然是调用系统原生 dns 查询,所以我写了一个 IPUtils 库,安全的解析返回结果(出现任何异常都会走系统解析,保证安全) The Application of HTTP DNS on OkH...

HTTP(S) DNS优化

HTTP(S) DNS优化 作者:美图:颜向群 高可用架构 备注: 1.我所在的团队之前做过 HttpDNS,但是采用的是文章中作者说的最原始的方案,替换 host,hostnameverify,整个过程很繁琐,而且容易出问题。一旦出了问题,是致命的,没有 fallback。 2.作者介绍的 java 层和 native 层 hook 方案,对业务层无感知,非常好。我觉得好的方案就是...

优雅地封装和使用 onActivityResult

优雅地封装和使用 onActivityResult 作者:国风 更新 github AvoidResult 调用时去掉 requestcode,更加简单清晰,内部使用 callback.hashcode 作为 requestcode 1 2 3 4 5 6 7 8 9 10 AvoidOnResult(this).startForResult(FetchDataActivity::c...

Android 插件原理解析

Android 插件原理解析 作者:国风 一、背景 作为 B/S 架构的移动端 APP,从其诞生开始,便一直面临着发版更新问题。每次有新业务上线、或者 bug 修复,都必须重新打包,上线。整个流程非常耗时,对于业务高速迭代的产品而言,简直就是个灾难。有没有一种方式可以动态的下载业务模块呢?插件化就是解决这一问题的最佳方案。 引用主席的一句话”完成一个插件 demo 很简单,但是真正完...