谈谈 Android 中的各种设备标识符 (www.jianshu.com)

【简介】

首先,我们先要弄清自己跟踪设备的具体需求。目前看来,需求无非两种:
1、跟踪用户设备使用周期层次上的设备:
意思是将每次用户的擦除设备、恢复出厂设置动作后将设备视为一台新的设备。
2、跟踪硬件层次上的设备:
意思是无论设备擦除数据或者恢复出厂设置后都需要将该设备视为同一台设备。

跟踪用户使用层次上的设备

方案 1:
这个层次上的设备跟踪,我比较推荐使用谷歌官方推荐的办法来跟踪, App 首次启动时生成一个 Random UUID 并保存在本地存储,以后每次启动时检查该 UUID 文件。具体可以查看我的上一篇翻译文章),其中有具体的代码实现。

方案 2:
如果你不喜欢谷歌推荐的这种方式,或者觉得这种方式涉及到文件读写太过繁琐等。我们也可以通过以上介绍的这些标识符来跟踪设备。因为需要将设备擦除数据或恢复出厂设置后将其视为一台新的设备,所以需要使用一些与当前用户设备使用周期有关的值。

理论上,Android_ID 这一个值就已经足够我们实现这样的需求,不过正是因为 Android_ID 存在缺陷,所以我们无法直接拿来识别设备。这里我们使用多个值拼凑来规避这些缺点。

与用户设备使用周期有关的标识符我推荐使用Android_ID和Sim Serial Number。另外可以加上Device_ID,通过 UUID 或者 MD5 等来计算生成设备的标识符。

跟踪硬件层次上的设备

跟踪硬件层次上的设备建议使用硬件的标识符,比如设备ID(DeviceId)、Mac 地址、设备序列号(SN)或者设备的品牌,型号名等,这些值在用户擦除数据或者恢复出厂设置后也不会改变。同样的,为了提升稳定性及排除单一标识符所存在的缺陷,我们使用多个标识符拼接,然后通过 UUID 或者 MD5 算法计算得出我们需要的设备标识符。

其他

以上这些值在使用前都建议判空。

因为硬件缺失或者不可用,获取标识符过程中也可能返回 null 对象。为了避免 NullPointerException,建议获取标识符操作全部在 try...catch 中操作。

安卓设备的用户不乏极客,修改 Android_ID 或者 Build 文件对他们来说并非难题。所以一定程度上说,没有绝对准确的跟踪设备的标识符。

点击查看原文 >>

@shengting 2018-01-21 23:31 / 0个评论
赞过的人: @技术头条
要不要再学学下面的文章?
谈谈跨服聊天 (www.addesp.com)
跨服聊天是指交谈双方,不在同一语境下进行交流。多因双方的兴趣爱好/知识差异或聊天内容本身容易引发歧义引起。双方使用语言的环境不同,对语句的理解也不同。同一句话,在不同的主题会产生不同的理解。以「你幸福么?」为例:我姓曾。

跨服聊天通常会出现在作品中用来提供笑料。如此的话,直觉上跨服聊天应该离我们很远。真的么?以前我这么认为,但是现在我觉得离我很近。
by @技术头条 2023-12-11 23:17 查看详情
谈谈晋升述职 (jokerbai.com)
年底了,该晋升的晋升,该总结的总结,不论是哪一种都逃不过PPT的魔咒。有幸今年参加了晋升述职,下面就简要说说我是怎么整理的PPT,以及要注意什么。
by @技术头条 2023-11-29 23:48 查看详情
深入 Android 可信应用漏洞挖掘 (paper.seebug.org)
重点介绍了主流厂商的TEE环境中的TA实现以及常见的攻击面并分享了一些针对TA做安全研究的技巧与方法,比如如何尽可能快速的拥有一台具备Root权限的手机用于研究与测试。同时还介绍了如何实现对TA进行模拟以及使用到的Fuzzing技术和部分调优策略。
by @技术头条 2023-10-30 23:40 查看详情
Android|集成 slf4j + logback 作为日志框架 (mazhuang.org)
最近在做一个 Android APP 的日志改造,我搜了一下「Android 日志框架」,大多网友推荐的是 logger、timber、xLog 等等,看着也不错。不过出于几年后端开发的经验和习惯,我进一步了解,发现熟悉的 log4j 和 logback 在 Android 上也有人做过适配,所以最终决定使用 slf4j + logback,以在前后端开发中取得一致的体验。
by @技术头条 2023-10-30 22:56 查看详情
C# 使用 LibUsbDotNet 实现 USB 设备检测 (blog.yuanpei.me)
基于某些不可抗因素上的考虑,博主需要在程序中集成某厂商的硬件。我猜测,人们觉得这件事情“简单”,或许是看到这个设备有一条 USB 连接线,因为在人们的固有印象中,只要把它接到电脑上就可以正常工作了。事实的确如此,因为你只要考虑串口(SerialPort)、USB 以及这两者间的相互转换即可。当然,这世上的事情圆满者少,遗憾者多,博主在使用过程中发现,厂商的提供的 SDK 存在 Bug,当设备从电脑上拔出后,其 SDK 的初始化函数依然正常返回了,这意味着我们无法在使用设备前“正确”地检测出硬件状态。考虑厂商愿不愿意修复这个 Bug 还是个未知数,博主不得不尝试另辟蹊径。
by @技术头条 2023-10-24 23:39 查看详情
个人电脑作为办公设备时,我们如何保护隐私? (xaoxuu.com)
公司一般都会强制安装安防软件,这些软件要求开机自启动,要求有屏幕录制权限、完全的磁盘访问权限包括相册图库。因此如果使用自己的 MacBook 作为办公设备,必须要把生活区和工作区完全独立开,安装在两个磁盘分区,并且对磁盘分区加密。
by @技术头条 2023-09-06 00:16 查看详情
Android 模拟器实现 hosts 修改 (droidyue.com)
有时候我们需要使用 Android 模拟器来 绑定一下 hosts 来实现功能的开发与验证,刚好最近遇到了这样的需求,处理完成,简单记录一下。
by @技术头条 2023-06-24 23:28 查看详情
Robust 2.0:支持Android R8的升级版热修复框架 (tech.meituan.com)
2016年,我们对美团Android热更新方案Robust的技术原理做了详细介绍。近几年,Google 推出了新的代码优化混淆工具R8,Android 热修复补丁制作依赖二次构建包和线上包对比,需要对Proguard切换到R8提前进行适配和改造,本文分享 Robust 在适配 R8 以及优化改进中的一些思路和经验,希望能对大家有所帮助或者启发。
by @技术头条 2023-06-24 09:21 查看详情
iptables 在 Android 抓包中的妙用 (paper.seebug.org)
昨天在测试一个 Android APK 的时候发现使用 WiFi 的 HTTP 代理无法抓到包,在代理的日志中没有发现任何 SSL Alert,因此可以判断不是证书问题;另外 APP 本身仍可以正常收发数据,这说明代理设置被应用绕过了。

根据我们前一篇文章(终端应用安全之网络流量分析)中所介绍的,遇到这种情况时就可以使用路由抓包方法,确保接管所有流量。但是因为端午放假被封印在家,且用于抓包的树莓派放在了公司,因此只有另谋他路。

本来接着考虑装个 DroidProxy 去试一下,但突然间灵光一闪,为什么不直接用 iptables 去修改流量呢?于是,就有了这篇小记。
by @技术头条 2023-02-12 14:10 查看详情
廉价的家庭工作站设备改造记录:苹果垃圾桶(Mac Pro 2013) (soulteary.com)
聊聊最近对一台便宜的苹果老设备的使用和升级改造,以及过程中的小经验。

如果你没有在家里安静的进行长时间密集计算的需求,也不想“烧烤”你的 MacBook ,并且没有总成本低一些的要求,那么这个方案或许并不适合你。

相比之下,我更推荐采购支持 ECC 内存的搭载 13 代桌面 CPU 工作站(如 P360 之类的),功耗比、性能、可扩展性都很棒,美中不足的只有三点:体积大一些,使用的是工作频率不高的 DDR5 ECC 内存,价格会是这台设备的三倍。
by @技术头条 2023-02-12 14:06 查看详情