River Blog

Thinking will not overcome fear but action will.

native crash采集

native开发

前言 端上crash监控非常基础,也很常见;小公司一般用的bugly、友盟等三方免费服务,到公司开发APM的时候, 基础技术决定自研线上crash采集监控,Android端侧apm开发由我负责;整个过程内心是很崩溃的。 1、native crash的定义 每个Android App再运行时是一个Linux进程,Linux进程运行时,空间是在用户态。我们所能处理的crash, 其实也就...

Android实用的工具命令

高效干活

前言 码农无论是战斗力还是待遇,呈现了数量级的差异;那些大神高手除了天赋加刻苦训练以外; 基本都会总结提炼自己常用的工具,包括命令行,知识库等。 1、apksigner命令 apksigner -keystore /Users/river/Documents/hellobike-android/HellobikeAndroidAtlasApp/app/keys/easybike_...

一种hook系统函数的方法

合规检测

前言 有一次安全部门出了一份隐私合规报告,基础技术牵头配合整改,报告形式如下: 报告对系统方法Settings$Secure.getStringForUser做了hook,并拿到了调用堆栈。 这么小的一个技术也可以做成收费的商业服务,可见科学技术是第一生产力。 1、思考 三方的检测机构可未获取我们的源码,仅仅通过一个apk就能做到;一时间我也比较诧异, 想着自己尚有全部的源码,...

中大型app的架构设计

移动架构

前言 从事移动端基础技术良久,浅谈架构。先给个结论,架构设计为了解决工程中的痛点; 降低工程复杂度,保障工程质量而生;不能为了架构而架构。 市面常见的app架构图如下,显然不是我要说的重点;常见mvc,mpv,mvvm更像是一种编码的设计。 1、架构历史 我们来看下面两段代码,分别是机器码和汇编代码如下: 768+12288-1280的机器代码 101100...

一种埋点存储方案

埋点存储的选择

前言 回首Android基础技术,经历了一些有意思的项目在此记录下。 背景 1、为了配合ProtoBuffer的数据格式,开发了一套存取byte数组的日志组件。 2、这套日志组件用了mmap的存储映射技术,组件名为Hlog。 3、优点在于跟通常的直接用系统数据库相比,避免了数据库读写分离带来的一些异常;同时性能要优于数据库。 Hlog核心实现存储篇 上层调用 // POOL...

监听网络请求

Android线上统计网络时长好做吗

前言 移动端线上监控体系包括网络请求的部分,Android上实际开发起来并不是一件容易的事情。 ios因为有系统提供的NSURLProtocol,相对较容易实现;鸭梨山大。 需求背景 1.虽然高版本的okhttp提供了EventListener监听请求的各个时机回调,应用到线上并不容易 2.难点在于把每个请求的回调能区分识别出来。 3.网络库实现基于Retrofit实现,无缝对接k...

一些奇奇怪怪的bug

谈解bug技巧

前言 最近负责移动端基础技术的工作,其中crash治理碰到几个奇怪的bug再此记录。 治理背景 1.crash率超过千分之一 2.非业务因素的灰度失败率居高不下。 一个奇怪的native异常 1.摘要:TrichromeLibrary.apk 00 pc 0194c6aa /product/app/TrichromeLibrary/TrichromeLibrary.apk ...

Android蓝牙实践

蓝牙通信

前言 2020年受邀加入单车业务线,其中蓝牙长连实践涉及到蓝牙操作;让人印象深刻。 1、扫描蓝牙,寻找目标设备 // 先停止扫描 adapter.stopScanBle(this), // 再判断蓝牙权限android.permission.BLUETOOTH_CONNECT,android.permission.BLUETOOTH_SCAN val blueto...

Android自定义相机的适配

自定义相机

前言 最近支援bos端新app,接到一个自定义相机的需求; 因为需要适配大部分机型预览不变形,历时良久,特此记录。 1、核心实现类 核心实现类CameraPreview public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { static final ...

ab测试/灰度下发探索

ab测试

前言 最近转战到移动中台建设,接到设计ab测试/灰度的方案设计紧急任务,设计过程中点滴记录在此。 整体架构图 设计边界 1.用户画像数据库的查询QPS峰值不超过2000 2.关联测试深度不超过3层 请求参数 public class Req { /** * 灰度包安装成功埋点用的,option */ private String te...