移动开发

Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路

文章目录 一、痛点:为什么我们渴望“无侵入”? 二、核心原理:AOP 与字节码插桩 1. 工作流程详解 2. 为何选择编译期插桩? 三、实战:如何自动采集常见事件? 1. 页面浏览量(PV/UV)自动采集 1. 目标 2. 技术挑战 3. ASM 实现思路

Promise 对象

Promise 对象是一种连接生产者与消费者的特殊 JS 对象, 类似"订阅列表". let promise = new Promise( // 参数是执行器 executor function(resolve, reject) { // 扮演生产者的角色 通常是异步执行某些操作 // 生产者必须调用 resolve 或者 reject }); // promi

package.json 和 package-lock.json

1. 前言 应该很多人 搞不清楚, 我们天天见天天用的 这个 package.json 和package-lock.json到底有啥关系 那今天就来捋一下 2. package.json 首先在说下这个 我们自以为觉得熟的不能在熟的package.json package.json是帮我们管理项目中的依赖包的,让我们远离了依赖地狱。 遵循commonJS规范 ,通过 npm管理,

Android productFlavors 实现多项目打包

最近接到产品一个需求,需要将现有工程打一个新的apk出来,要给到新客户使用,需要替换appIcon, appName, appId以及切换新的api接口需要切换新的地址。 场景大概如下图: 使用场景 二话不说,直接上代码 第一步:添加productFlavors配置 打开项目app工程的build.gradle文件,在android {}标签里面添加下面代码 productFlavo

mac中使用QuickTime Player看了移动硬盘里的视频,如何清除记录?

mac的QuickTime Player有一个bug,就是用它看完移动硬盘中的视频之后,播放记录(也就是右击QuickTime Player的最近使用项目)没有办法清除。我们先来复现一下问题: 移动硬盘中的视频 我们双击打开这个移动硬盘里的电影进行播放: 播放 当我们关掉电影后,右击看一下QuickTime Player的记录: 记录 这时候如果我们正

浅谈NSProxy

什么是 NSProxy     在苹果官方文档中是这样对 NSProxy 描述的:一个抽象的根类,通常,发送给代理的消息被转发到真实对象,或使代理加载(或转换为)真实对象。头文件代码如下: @interface NSProxy <NSObject> { __ptrauth_objc_isa_pointer Class isa; } + (id)alloc; + (id)all

Android:exported 属性知识

1、android:exported 是 Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。 2、android:exported 代表是否能被其他应用隐式调用。 3、true允许被启动,false不允许被启动。 4、android:exported 默认值是由有无intent-filter决定的,如果有intent-fi

【Android 架构之 MVI 雏形】响应式编程 + 单向数据流 + 唯一可信数据源

这是 MVI 架构的第一篇,系列文章目录如下: 【Android 架构之 MVI 雏形】响应式编程 + 单向数据流 + 唯一可信数据源 关于Android 架构 的MVI 初级体 【Android 架构之 MVI 完全体】 就MVVM 来说关于PartialChange & Reducer [Android 架构之 MVI究极体]数据区分状态和事件,解决粘性数据 引子 MVI 是Mod