当前位置: 首页 > 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.jsqmd.com/news/194583/

相关文章:

  • 精益生产的两大支柱到底是什么?一文帮你搞清楚
  • 基于10部权威医疗电子书的医疗知识图谱构建数据集:包含18,297个结构化标记、37,381个医学实体、5,770个交叉引用关系和974个表格结构,支持疾病-药物关系抽取、临床决策系统开发
  • 360度VR全景设备技术测评与行业应用分析
  • 上汽大众2025年销量突破百万大关,终端销售106万辆
  • 实战解析:京东关键词搜索 item_search_pro —— 按关键字搜索商品
  • 偷懒也高效:帮你准备好的提示词复制范本(附场景)
  • 2026最新延吉韩式炸鸡本土品牌top5推荐!延吉本地特色,延边大学等地优质餐饮店及加盟连锁品牌深度解析/选择指南,脆皮多汁引爆味蕾狂欢 韩式炸鸡品牌推荐 - 全局中转站
  • vue3 实时通讯 SSE
  • A-68 语音处理模组 —— 波束成型 + 双麦降噪,全场景音频交互升级方案
  • LangGraph 是什么?一文秒懂且通俗易懂!
  • HISTCMD 介绍
  • typora快速下载(简单易学)
  • Redis入门篇001_Redis简介与特性
  • mineru离线环境解析文档报“Connection to paddleocr.bj.bcebos.com timed out.”
  • C++ 入门第一课:命名空间、IO 流、缺省参数与函数重载全解析 - 实践
  • telnet远程登陆与管理
  • d3d9.dll文件损坏丢失找不到 打不开软件问题 免费下载方法
  • 25年总结 | 26年规划
  • Java 大视界 -- Java 大数据在智能医疗远程康复监测与个性化康复方案制定中的应用
  • 震惊!这家酶制剂工厂竟让同行都慌了
  • 千万别错过!这5家酶制剂厂让生产效益翻倍
  • BOM到底是什么?ERP里为什么没有它就不行
  • 2026专科生必看!10个降AI率工具测评榜单
  • 千万注意!这家酶制剂厂商竟如此权威
  • laravel的session_start(); 是在哪里调用的?
  • 你能成为AI数据训练师吗?工作内容与薪酬分析
  • 2026最新延吉炸鸡/韩式炸鸡本土品牌首选傲叔炸鸡——延边大学网红墙推荐,延吉本地特色加盟连锁餐饮店,延吉人气王,正宗延边风味的品质之选 - 全局中转站
  • GO 教程
  • 大数据领域数据目录与人工智能的融合应用
  • 【QuantumTuan:Qt】