android10获取imei,Android 10 root用户获取imei

IMEI(International Mobile Equipment Identity)是国际移动设备识别码的缩写,由15-17位数字组成,与手机是一一对应的关系。无论刷机还是恢复出厂设置,该设备标识码都不会改变,所以在广告和流量统计等方面特别好用,备受开发者的青睐。

但自从android29之后,通android api的TelephonyManager提供的getImei方法已经无法获取到手机的imei了,那我们又该如何获取的手机的唯一设备标识符呢?

Android开发者文档提供的方式是Android Id,这种获取的方式在大多时候确实是有效的,能满足常规的广告统计需要,但如果遇到手机刷机、系统升级或者恢复出厂后,这个id就会被重置,所以在某些业务场景下(例如要将设备标识作为用户唯一id),就显得捉襟见肘了。

网上有一些解决方案,大多是用mac地址,UUid,或者针对特定的手机厂商去生成唯一标识,那我们真的在android 10系统中就拿不到手机的imei了吗?答案是否定的,例如在root权限下,我们就可以绕过android的api,直接拿到手机的imei。

笔者假设用户的手机已经root,并且已经将手机用android调试桥连接到电脑上去,那我们在电脑终端输入adb命令,便可将手机的imei打印出来:

adb shell service call iphonesubinfo 1

AAffA0nNPuCLAAAAAElFTkSuQmCC

我们不妨通过正则表达式,将获取到的imei匹配出来:

adb shell service call iphonesubinfo 3 i32 1 | awk -F "'" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=

AAffA0nNPuCLAAAAAElFTkSuQmCC

既然我们在终端中可以获取到imei,那我们只需要把这个命令作为shell,在代码里运行即可,但是需要su的权限,不然也获取不到imei:

public static String getImeiByShell(){

try {

String shell = "service call iphonesubinfo 3 i32 1 | awk -F \"'\" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=";

Process p=Runtime.getRuntime().exec(new String[]{"su","-c",shell});

BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));

String readLine=br.readLine();

while(readLine!=null){

Log.d("execShell",readLine);

return readLine.trim();

}

if(br!=null){

br.close();

}

p.destroy();

p=null;

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

如此,我们便可以获取到手机的imei。

作者:凌塘

链接:https://juejin.cn/post/6953079991303143432

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA基础之HttpServletResponse响应

JAVA基础之HttpServletResponse响应 用户在客户端输入网址(虚拟路径)时,开始发送一个HTTP请求(请求行、请求头、请求体)至服务器。服务器内的Tomcat引擎会解析请求的地址,去找XML文件,然后根据…

Logger之Logger.getLogger(CLass)

之前一直在使用System.out.println()来调试.但是用这种方式开发项目部署到生产环境,会因为众多的控制台输出降低应用的性能.这时候Log4J就成为可平衡开发和部署应用的利器了. 在项目中使用Log4J并不是一件困难的事情,简单粗暴的方式就是在每个类A中声明一个Logger私有属性 pri…

订阅号助手android,微信订阅号助手app

微信订阅号助手app属于微信官方推出的软件,可以把我们的手机当做公众号的平台,让你直接用手机来实现公众号的各种工作、互动内容,微信订阅号助手app不用担心使用一些第三方软件被封号了,非常实用可靠。【应用介绍】订阅号助手是一…

使用LoggerFactory.getLogger(xxx.class)方法在控制台打印日志信息

使用System.out.println()来调试.但是用这种方式开发项目部署到生产环境,会因为众多的控制台输出降低应用的性能.这时候Log4J就成为可平衡开发和部署应用的利器了. 使用指定的类XXX初始化日志对象,方便在日志输出的时候,可以打印出日志信息所属的类。 …

html自动增加vbs代码,vbs脚本病毒代码大全编步骤四个

应用程序通过ActiveX的属性HTMLPageTextWithTags(主页不嵌有HTML代码时用属性HTMLPageTextWithOutTags)读页面文本交互模式;允许显示用户提示和脚本错误2.ntlm.vbs***************ntlm.vbsby黑嘿黑***************dimwshsetwshCreateObject("WScript.Shell&quo…

java util logger slf4j_别再自己用LoggerFactory生成logger实例了,试试slf4j注解

背景 在项目开发中,记录日志是必做的一件事情。日志的实现有很多种:Logback,Log4j2,log4j,JAVA Util Logging等等。 而slf4j是一个适配层,由适配层决定使用哪一种日志系统,而调用端只需要做的…

日志框架介绍(SLF4J及其使用)

本文主要介绍 1.日志框架基本介绍及Spring Boot中默认使用框架(SLF4JLogBack); 2.SLF4J的使用 3.项目中日志框架统一问题 4.Spring Boot中如何实现日志框架统一问题(3的最佳实践) 1. 日志框架基本介绍 一般情况下搭建日志框架时,搭建 日志抽象层(定…

jmeter生成html报告修改,Jmeter生成html报告(示例代码)

新的JMeter版本中引入了Dashboard Report,用于生成HTML页面格式图形化报告的扩展模块。注:本文用的是3.2版本。生成html报告一、检查.jtl文件,如果没有.jtl文件,运行如下命令:jmeter -n -t 天气api.jmx -l result.jtl …

SpringBoot使用Slf4j+Log4j2完成项目的日志记录

SpringBoot使用Slf4jLog4j完成项目的日志记录 前言 本示例采用SpringBoot项目使用SpringAOP记录日志,Slf4j作为日志门面,Log4j2作为日志实现实,实现开发中的日志记录. 部分效果展示 : 日志文件 : 日志信息 : 代码具体实现如下…

鸿蒙构架谁提供的,科普丨关于“鸿蒙”,不知道这些你都不好意思跟别人打招呼!...

鸿蒙的英文名是Harmony OS华为消费者业务CEO余承东8月9日正式发布鸿蒙系统,英文名是Harmony OS 。国家知识产权局商标局网站显示,华为已经申请注册“华为鸿蒙”商标,申请日期是2018年8月24日,注册公告日期是2019年5月14日。鸿蒙是…

springBoot Logging 日志详解

文章目录日志格式控制台输出彩色编码输出文件输出文件级别自定义日志配置Logback 扩展profile 指定 配置文件Environment 属性springBoot 日志使用Commons Logging作为抽象层,并将具体实现开放,支持Java Util Logging、Log4j2和Logback。loggers 默认配置…

计算机应用电子技术课程,中专计算机应用有什么课程

中专计算机应用有什么课程2020-10-29 16:40:11文/董玉莹计算机应用学习研究计算机应用于各个领域的理论、方法、技术和系统等,是计算机学科与其他学科相结合的边缘学科,是计算机学科的组成部分。计算机应用是对在社会活动中的如何参与和实施给予方针指导…

Spring Boot 配置日志输出等级

Spring boot 默认使用 logback作进行日志输出。 有两种方式一个是通过application.properties 配置文件的方式来配置。 另一种是通过logback.xml配置文件的方式进行配置。 首先要说的是:application.properties 和logback.xml这两个配置文件都是放在 src/main/resources 目录…

springboot如何使用log4j记录日志

文章目录导入依赖1、去掉slf4j的依赖2、引入log4j的依赖创建log4j.properties导入依赖 因为springboot的启动依赖会引入SLF4J的日志依赖,因此想要用log4j,就要先把slf4j的依赖去掉,然后再引入log4j的启动依赖。 1、去掉slf4j的依赖 网上有…

在SpringBoot中使用slf4j与logbak

本次开发环境为: 系统:Windows 10 JDK:1.8 开发工具:IntelliJ IDEA springboot框架:2.X.X 日志设置参考官方文档https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boo…

站酷用HTML5播放视频,站酷:动效展示实践的问题及解决

前两天设计一款主页,想给它加上一些操作演示,于是便自己琢磨如何实现。先上效果图:首先,是界面设计的部分:需求是针对现有的网站做移动端的展示。针对门户网站的性质,以及对象的行业特性,将首页…

SpringBoot ——Spring Boot日志配置

Spring Boot 采用了 slf4jlogback 的组合形式,Spring Boot也提供对JUL、log4j2、Logback提供了默认配置 1、默认日志配置 修改日志默认级别 2、修改日志默认配置 修改日志文件生成路径 ​ ​ 修改日志输出格式 ​ 3、日志底层实现 在web项目中&#xff0c…

手机计算机数字显示在桌面上,手机桌面上的应用如何取消显示的数字角标

手机桌面上的应用如何取消显示的数字角标很多小伙伴都还不知道,下面IEfans小编为大家整理了取消显示的数字角标的流程一览,怎么取消显示的数字角标,一起来看看吧!方法/步骤分享:1、首先,点击手机桌面上的【设置】&…

SpringBoot日志配置

SpringBoot日志配置 1.Spring Boot默认日志框架 Spring Boot默认使用LogBack日志系统,如果不需要更改为其他日志系统如Log4j2等,则无需多余的配置,LogBack默认将日志打印到控制台上。如果要使用LogBack,原则上是需要添加depende…

上证50基金有哪些_定投基金(易方达上证50指数A)

今天小编想要推荐的基金是定投基金(易方达上证50指数A)(数据信息来源:天天基金网)一、基金的概况二、投资范围本基金的股票投资部分主要投资于标的指数的成分股票,包括上证50指数的成分股和预期将要被选入上证50指数的股票,还可适当投资一级市场申购的股票(包括新股…