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文件,然后根据…

android imageview 设置网络图片,ImageView加载网络图片

android网络加载图片框架Android-Universal-Image-Loader功能非常强大,其开源地址https://github.com/nostra13/Android-Universal-Image-Loader,讲解非常地详细,今天我要贴下工作中用到的利用这个框架加载网络图片并在ImageView控件中显示出…

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初始化日志对象,方便在日志输出的时候,可以打印出日志信息所属的类。 …

signature=f0dd2033ed5bb3cdb94f9136381f7750,Lesson 8: Signature Assignment

摘要:This unit will focus on the Civil Rights Era in the 1960s. Students will learn what the Civil Rights Movement was and how it changed the United States. By learning about the pivotal leaders of the movement, students will build their underst…

LoggerFactory.getLogger的用法

Logger类下有多个不同的error方法,根据传入参数的个数及类型的不同,自动选择不同的重载方法。 使用,只打印异常,不打印堆栈信息 private static final Logger logger LoggerFactory.getLogger(LoggerTest.class);Testpublic voi…

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是一个适配层,由适配层决定使用哪一种日志系统,而调用端只需要做的…

正则匹配承兑的html,正则匹配闭合HTML标签(支持嵌套)

原标题:正则匹配闭合HTML标签(支持嵌套)任何复杂的正则表达式都是由简单的子表达式组成的,要想写出复杂的正则来,一方面需要有化繁为简的功底,另外一方面,我们需要从正则引擎的角度去思考问题。关于正则引擎的原理&…

private static Logger logger =Logger.getLogger(AssembleMsgService.class)什么意思?

作为一个新人中的菜鸡,最近在看一个项目的代码其中有这么一段看得我很是费解 public class AssembleMsgService {private static Logger logger Logger.getLogger(AssembleMsgService.class);1、Logger logger logger.getlogger(); 看到这个会想到这是log4j下的…

日志框架介绍(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——slf4j+logback日志处理及配置详解

SpringBoot——sl4jlogback日志处理及配置详解 日志的级别 打印级别&#xff1a;ALL > TRACE > FATAL > DEBUG > INFO > WARN > ERROR > OFF 输出级别&#xff1a;TRACE > DEBUG > INFO > WARN > ERROR logback-spring.xml配置文件 <…

html页面如何引入elementui,element-ui中按需引入的实现

element-ui中按需引入为什么选择 element-ui 而不是 iview因为在多次使用两个组件的过程中慢慢发现&#xff0c;iview 的一些组件还是需要再完善&#xff0c;而 element-ui 现在更加的成熟所以&#xff0c; 这里我们一起来学习一下在 vue 中按需引入 element-ui 一些组件中的坑…

springBoot Logging 日志详解

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

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

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

vb.net html标签,VB.Net - 获取元素html的字符串/值?

我有一个轻微的问题&#xff0c;试图从网站上的元素获取字符串。VB.Net - 获取元素html的字符串/值&#xff1f;是我的目标为&#xff1a; 基本上我试图从一个网站的字符串/值&#xff0c;使之进入一个TextBox.text或标注甚至。 没有太多的exmaples&#xff0c;但我没有经验在这…