当前位置: 首页 > news >正文

Android 16安兔兔分辨率作假显示(非修改TextView方案)

在我们做客制化android系统中经常会碰到这样的需求,屏的实际尺寸是12.2英寸,但在安兔兔或者其他设备信息检测类app中显示的却不是这个数,而是比他小的数,如5.66英寸,或者6.56英寸,就像下面这样

那么我们有没有什么方法实现不修改TextView来实现这个需求呢,答案是有的。

本篇文章也是借鉴两位大佬的思路来的,在这里要先感谢两位大佬:
Android 14 修改安兔兔等三方工具显示的屏幕尺寸
RK3588S Android12修改安兔兔等读到的屏幕尺寸大小

framework修改patch:

diff--git a/sys/frameworks/base/core/java/android/view/DisplayInfo.java b/sys/frameworks/base/core/java/android/view/DisplayInfo.java index bf000d5fa39..f25b00f5aad100644---a/sys/frameworks/base/core/java/android/view/DisplayInfo.java+++b/sys/frameworks/base/core/java/android/view/DisplayInfo.java @@-923,6+923,18@@publicfinalclassDisplayInfoimplementsParcelable{outMetrics.xdpi=outMetrics.noncompatXdpi=physicalXDpi;outMetrics.ydpi=outMetrics.noncompatYdpi=physicalYDpi;+//三方检测app屏幕尺寸数据修正 add by lyw+if(width<height){//竖屏 width == 1600 && height == 2400+outMetrics.xdpi=597.65f;+outMetrics.ydpi=201.63f;+}elseif(width>height){//横屏 width == 2400 && height == 1600+outMetrics.xdpi=597.65f;+outMetrics.ydpi=138.89f;+}else{+outMetrics.xdpi=outMetrics.noncompatXdpi=physicalXDpi;+outMetrics.ydpi=outMetrics.noncompatYdpi=physicalYDpi;+}+finalRectappBounds=configuration!=null?configuration.windowConfiguration.getAppBounds():null;width=appBounds!=null?appBounds.width():width;

xdpi来源:
安兔兔(整数,不精确),或者通过在上述类DisplayInfo中用日志的方式打印出来(带5位小数,更精确,推荐)

ydpi来源:
使用如下java代码生成。将如下代码复制到 IntelliJ IDEA 2024.3.5 (Community Edition) 中并修改main方法中的尺寸、分辨率、xdpi,然后Run就能生成ydpi了

packagecn.incartech;importjava.math.BigDecimal;importjava.math.RoundingMode;publicclassMain{publicstaticclassPoint{publicintx;publicinty;publicPoint(intx,inty){this.x=x;this.y=y;}}privatestaticdoublecalculateSize(PointscreenSize,doublexdpi,doubleydpi){doublesqrt=Math.sqrt(Math.pow(screenSize.x/xdpi,2)+Math.pow(screenSize.y/ydpi,2));returnnewBigDecimal(Double.toString(sqrt)).setScale(3,RoundingMode.HALF_UP).doubleValue();}publicstaticfloatgetYdpi(PointscreenSize,doubletargetSize,floatxdpi){doubley=0.01;doublecalculatedSize;do{y+=0.01;calculatedSize=calculateSize(screenSize,xdpi,y);}while(Math.abs(calculatedSize-targetSize)>=0.001);return(float)y;}privatestaticvoidcalculateYdpi(doubletargetSize,intwidth,intheight,floatxdpi){System.out.println("----------------- start calculate -----------------");System.out.println("要在安兔兔中显示的尺寸为:"+targetSize);System.out.println("屏实际分辨率为:"+width+" x "+height);try{intscreenWidth;intscreenHeight;screenWidth=width;screenHeight=height;if(screenWidth<screenHeight){System.out.println("开始计算竖屏参数...");}else{System.out.println("开始计算横屏参数...");}PointscreenSize=newPoint(screenWidth,screenHeight);floatydpi=getYdpi(screenSize,targetSize,xdpi);Stringresult=String.format("xdpi: %.2f, ydpi: %.2f",xdpi,ydpi);System.out.println((screenWidth<screenHeight?"竖屏参数":"横屏参数")+" result = "+result);}catch(NumberFormatExceptione){System.out.println(e);}}/** * xdpi参数来源(打印出来就行了,或者直接用安兔兔的): * 类-->frameworks\base\core\java\android\view\DisplayInfo.java * 方法-->private void getMetricsWithSize(DisplayMetrics outMetrics, CompatibilityInfo compatInfo, Configuration configuration, int width, int height) * * @param args */publicstaticvoidmain(String[]args){/** * 结果示例: * ----------------- start calculate ----------------- * 要在安兔兔中显示的尺寸为:12.2 * 屏实际分辨率为:1600 x 2400 * 开始计算竖屏参数... * 竖屏参数 result = xdpi: 597.65, ydpi: 201.63 */calculateYdpi(12.2,1600,2400,597.64703f);/** * 结果示例: * ----------------- start calculate ----------------- * 要在安兔兔中显示的尺寸为:12.2 * 屏实际分辨率为:2400 x 1600 * 开始计算横屏参数... * 横屏参数 result = xdpi: 597.65, ydpi: 138.89 */calculateYdpi(12.2,2400,1600,597.64703f);}}

将xdpi、ydpi填入到前述patch中就能实现三方检测apk检测的屏幕尺寸与预期一致

----------------- 验证结果 修改前 -----------------
竖屏:

横屏

----------------- 验证结果 修改后 -----------------
竖屏:

横屏:

http://www.cnnetsun.cn/news/422778.html

相关文章:

  • typora快速下载(简单易学)
  • laravel的session_start(); 是在哪里调用的?
  • OpenAI重组团队开发语音AI硬件产品,2026年推出新模型
  • AI重塑工作格局:Mercor如何连接人才与智能体训练
  • Windows系统文件找不到的问题 如何下载文件修复?
  • 使用电脑Win系统时经常会出现丢失找不到某些文件的情况
  • 2024年五大颠覆性技术趋势
  • 托盘目标检测数据集VOC+YOLO格式4517张1类别
  • 大模型开发必备!一张图看懂AI Agent!五层架构深度剖析,从Prompt到Action的完整闭环
  • 未来已来!Android Studio的AI Agent让编程变得如此简单,开发者:这比antigravity还牛!小白也能秒变大神,不会你就真的out了!
  • springboot+vue电影推荐系统springboot协同过滤
  • 基于非对称纳什谈判的多微网电能共享运行优化:MATLAB 实现探秘
  • 笔记本外接屏突然黑屏?我踩了 3 个坑,最后靠回退 N 卡驱动救了急
  • 2025年APP开发公司口碑排行榜单权威发布
  • 开关电流降压型DC-DC转换器D7015解析
  • 网站没有安装SSL证书会有影响吗?
  • 学长亲荐9个AI论文网站,助你轻松搞定本科论文!
  • AI 把内容做成了 “泔水”,但你的 “人味儿” 正在变贵
  • PID控制算法十年演进(2015–2025)
  • 大数据管理基础薄弱怕校招?AI技能学习补短板,校招轻松突围
  • ssm vue企业退休人员管理系统
  • 前后端校验,如何分工
  • ssm社区宠物信息管理系统vue
  • 常见4K HDR信号的视频格式HLG或PQ映射
  • 云原生核心概念和行业解决方案(未完待续)
  • ShaderGraph:流光镭射+圆角 卡片
  • 基于springboot框架的保险业务管理系统vue
  • 后端开发者快速上手AI Agent:基于Astron的极简概念、架构与部署教程
  • WRF模拟:搭建天气实验室、处理GFS/ERA5驱动场、运行台风暴雨案例、修改土地利用与地形、设计敏感性试验与Python专业分析等
  • 强烈安利9个AI论文写作软件,继续教育学生轻松搞定论文!