通常安卓手机用作识别码的有IMEI、MAC、Android ID。但是这几个值在虚拟器上面都是可以改的,有些虚拟器的IMEI值就是空或者都是一样的,特别是到了后面的安卓版本,玩家是可以不允许APP获邓这些值的权限的,这个有点尴尬。

假如我们不用上述的值,还有什么办法能获得一个手机的唯一码,可以在app删除,重装,清空缓存等操作后,仍然能获取到这个相同的码吗?

我们先看看市场上有没有这种功能的app?有,包括友盟统计,百度统计等统计的SDK,它们是怎么实现手机识别的呢?它既然能统计app安装的次数,那肯定能识别出这个手机是不是已经安装过了吧?是怎么识别的呢?

最简单的就是反编译一下大厂的统计sdk看看。原来大厂的手机识别码设计思路真是超级简单:

1、第一次启动时,按固定的几个保存的地方查找手机识别码

2、如果找到,就用它。并且将那些用户误删除掉的文件再重新生成会来。

3、如果没有找到,就随机(真的就是随机)生成一个,并且在所有固定的目标生成文件保存这个识别码。

真的蛮简单粗爆的,这种方法其实还是有漏洞,就是将所有的文件都删除后,再次启动的程序会生成一个全新的识别码,这样就相当于是一个新的手机了。但现实中这种机率太低了,为什么,看看大厂们都保存到了哪儿吧:

先看百度统计的cuid,原来百度统计是将自己的cuid保存在一个叫libcuid.so的文件里面,有点夸张,居然用了so文件后缀,so是动态库文件,这样垃圾清空软件就不敢轻易删除这个so文件,(哈哈,只能说百度全家桶真的不是一般的贱,程序猿的日常--祝百度早日倒闭):

百度的cuid一共保存了以下这几个地方,在使用时按以下优先级查找

  1. 先在程序内部files中找 libcuid.so
  2. 查找接收 "com.baidu.intent.action.GALAXY" 的接收者的包名,在它包名目录下面找libcuid.so (看起来像是找百度全家桶的包在sd卡生成的缓存)
  3. 用 getSystemSettingValue("com.baidu.deviceid.v2")的设置值加密
  4. 找文件"backups/.SystemConfig/.cuid2"
  5. 直接用getSystemSettingValue(“com.baidu.deviceid”)的值
  6. 找文件"baidu/.cuid"
  7. 找文件"backups/.SystemConfig/.cuid"

上述缓存文件都找不到,就生成一个随机数做md5加密

android sdk<23就用一个随机生成的数,大于23则用android_id

看看百度将cuid保存的几个地方,一般用户根本就不太可能删除得干净。特别是有全家桶的情况下,更加不可能了。

然后再看看友盟统计的umid的加载:

1、 在app内部加载一个.imprint的文件

2、从这个.imprint文件中读取一个umid的值

3、如果这个值不存在,会从下面三个文件中加载

4、如果这个三个文件不存在,会将imprint的值按顺序写入上面三个文件。如果上述三个文件中的值存在,但是和imprint的值不一样,会使用上述三个文件中的值,但是没有看到imprint的值怎么处理的代码。

5、另外还有一个extid.dat的地方保存了umid

友盟的初始化umid的地方一直没有找到代码。但保存的地方就上述几个文件。

友盟的umid不是用deviceID 或者android_id,因为它的代码里面这几个id是不一样的用途,所以猜测每一次生成umid时应该和百度的cuid一样仍然是一个随机数。但友盟的代码混驳做得比较好,函数名太乱,反编译没有找到初始化umid这一步。

友盟统计UMID潜在的一个坑

https://blog.csdn.net/codezjx/article/details/51823694

这个文章提到2016年时的umid在不同机器上是有可能相同的

UMID 方案解析

https://www.cnblogs.com/Umeng/p/3885497.html

这个文章提到了新的umid在同一个设备中也是可能会变化的,但是um sdk尽量用缓存保证它的生命周期足够长,不容易变化

跟据上述的分析,友盟的umid很有可能和百度cuid一样,是用随机值生成的。

好了,上述分析完大厂的做法,我们自己游戏的uid设计思路:

1、从app内部目录找xxxxxxuid.dat文件,从中读取uid

2、固定几个缓存目录,如果不存在xxxxxxuid.dat,就用内部的数据生成,如果存在,就和内部数据对比,如果不一致,就使用缓存的更新内部的

3、如果上述的缓存都不存在,就随机生成一个uid,并且保存在内部xxxxxxuid.dat和外部xxxxxxuid.dat

4、外部的缓存目录参考友盟,定为如下三个:

/sdcard/Android/data/.xxxxxx/xxxxxxuid.dat

/sdcard/Android/obj/.xxxxxx/xxxxxxuid.dat

/data/local/tmp/.xxxxxx/xxxxxxuid.dat(这个目录可能有写权限问题,还是换一个吧)

好了,到此,我们设计了一个uid,保存在上述三个地方,应该足够保证app被删除后再重装还是能找回来了。

安卓手机游戏的识别码设计思路相关推荐

  1. android 升级带服务端,安卓应用升级服务端设计思路

    原标题:安卓应用升级服务端设计思路 前言 去年支付宝集福卡活动玩出新花样,增加了一种花花卡,豪称全年帮你还花呗,一时火热.听到很多人在说要花花卡时,不准备玩集福卡的我准备再玩一把.进入页面功能点直接系 ...

  2. 2018年android游戏,2018年十佳安卓手机游戏!都是用心做出来的精品!

    原标题:2018年十佳安卓手机游戏!都是用心做出来的精品! 国外手游媒体评选的2018年十佳安卓手机游戏,排名不分先后.老外的口味跟我们稍微有点不一样~看看就好 游戏名称:阿尔托的奥德赛 类型:跑酷 ...

  3. 安卓手机游戏测试要点

    安卓手机游戏测试要点 广告位 1.上线产品是否需要加上广告,广告是否加上 <!--[if !supportLists]-->2.<!--[endif]-->广告位是否遮挡重要信 ...

  4. 基于android平台的手机游戏的设计与实现,基于Android平台手机游戏社区的设计与实现...

    摘要: 在移动终端性能的不断提高和移动互联网的不断普及,SNS社区以及不再只停留在电脑上,逐渐的走进了手机里,与以往的社区相比,手机社区有更好的实时性,以及能够更方便的提供LBS服务功能.目前每个社区 ...

  5. 安卓手机应用软件UI界面设计展示PR样机模板MOGRT

    9个不同角度展示安卓手机应用软件UI界面设计作品展示PR模板Mogrt|Android安卓样机模板 主要特点: 适用于 Premiere Pro CC 2021+ 适用于图像或视频 轻松改变颜色 轻松 ...

  6. 最新的安卓手机游戏排行榜Top10

    最新的安卓手机游戏排行榜Top10火热出炉,快来看看有哪些你喜爱的手机游戏上榜了吧.更多好玩有趣的安卓手机游戏下载尽在卓易市场,众多玩家等着你的加入哦! 1.梦幻西游 梦幻西游手游延续了中国经典.传统 ...

  7. android 呼入电话游戏闪退,安卓手机游戏卡顿、闪退问题解决方案

    安卓手机游戏卡顿.闪退问题解决方案,下面就由去游戏pro小编忆成殇为大家带来安卓手机游戏卡顿.闪退问题解决方案,剑魂之刃闪退.卡顿一直困扰着玩家,那么究竟怎样更好的玩好我们的卡顿及闪退问题呢,下面就随 ...

  8. sketch android设计,安卓手机预览sketch设计稿的偏方

    在Android和iOS都使用同一套设计风格的情况下.我见过很大部分的视觉设计师,都喜欢并擅长从iOS端开始设计工作. Android和iOS的交互方式大大不同,设计风格也各有千秋.甚至在某一个官方设 ...

  9. sketch设计android,安卓手机预览sketch设计稿的偏方

    在Android和iOS都使用同一套设计风格的情况下.我见过很大部分的视觉设计师,都喜欢并擅长从iOS端开始设计工作. Android和iOS的交互方式大大不同,设计风格也各有千秋.甚至在某一个官方设 ...

最新文章

  1. 前端知识点回顾之重点篇——JavaScript异步机制
  2. jsonp跨域原理_【网站技术解读①】Javascript实现跨域请求
  3. 开源服务专题之------ssh防止暴力破解及fail2ban的使用方法
  4. 小程序与云服务器api接口,小程序云函数调用http api进行对云数据库的操作
  5. java插入时间 mssql_JAVA操作数据库Datetime数据
  6. html向后端发送请求
  7. 简单看java异常栈
  8. idea怎么把代码放到git_在IntelliJ IDEA中同步代码到华为云git仓库 (on windows)
  9. 电脑中毒了怎么办 电脑中病毒的解决方法
  10. 数据结构 3-0 栈与队列总结
  11. Filenet 周报(12.02-12.08)
  12. flash基础动画制作
  13. 第九讲 函数间接展开成幂级数
  14. 电子元器件篇—共模电感
  15. python自动qq群发_自动给qq好友发消息
  16. iOS 微信支付和支付宝支付
  17. error C2059: syntax error : 'constant'
  18. STM32 GPS悬停飞控 (三十五)树莓派 4g视频回传
  19. Leetcode学习之贪心算法
  20. TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别

热门文章

  1. 航空——襟翼、逢翼、副翼、扰流板
  2. android中的滤镜,android 实现滤镜效果
  3. BCryptPasswordEncoder密码加密器
  4. 【电路】4线智能调速风扇
  5. 商旅专业名词中英文对照
  6. 数据治理新法案6月即将发布,数据行业会被颠覆吗?
  7. 如何对项目进度进行管理,把控项目风险?
  8. 保护电脑私密资源,隐藏你的小秘密
  9. 神经网络——MLP(多层感知机)和RBF(径向基函数神经网络)
  10. 如何拿到带名字的PA认证证书