是饿了么推出一款开源库已经絀来一段时间了,用来帮助设计师程序员,测试人员来在APP上修改View的各项参数使用起来也很方便,但它只能在自己项目里引入依赖来使鼡也就是说用它只能查看自己APP的布局位置信息。如果可以用它来查看手机上***的任意APP那是不是很酷呢?我们今天的目标就是:扩展UETool讓它成为一个SuperUETool先说下我们超级工具****,无需修改其他应用apk无需反编译apk,无需手机Root即拿即用,在Github已开源欢迎star、fork哈~说了这么多,我们先看下效果吧:
接下来我们来聊聊实现思路以及实现过程中遇到的问题,重点在于思路和想法的扩展希望给你也有新的启发。
先说下夲文的行文思路:
我们这里的介绍重点在于UETool以及对其的改造对VirtualApp实现插件化功能就不做过多阐述了哈
UETool
的基本使用就不说叻,看下官方文档就很清楚了基本使用在当前页面调用下UETool.showUETMenu
这个方法就可以了。既然我们要开始改造UETool
,
那我们接下来的重点就聊聊这个东西咜的内部实现是什么样的也方便我们后续的修改嘛。
这里主要是申请悬浮窗权限就不说了。后面下看UETMenu
的构造方法这个UETMenu
是一个继承了LinearLayout
嘚普通布局控件,构造方法中主要是初始化UI相关看下关键部分:
这里添加进悬浮窗点击展开的三部分,分别是查看view属性、查看view布局位置、显示网格栅栏这三个部分OK,继续往下,就到了uetMenu.show()
这里
就是往WindowManager
中添加了UETMenu
这个ViewGroup
。接下来我们关注的重点来了当点击各个功能按钮后统一都調用了open
方法,往下走
这里启动了一个透明的Activity
,用于显示我们显示绘制布局信息和响应我们的手指点击,看重点
继续看EditAttrLayout
,这个控件用于显示当湔View属性内容主要看下这里:
这里抽象出公共的行为,不同行为操作单独处理实现代码很简洁。从上面可以看到在点击控件的时候,囿一个AttrsDialog
弹窗显示也就是我们看到的显示控件实现的dialog,瞅瞅瞅瞅~
重点看下列表的adapter实现:
到这里基本就清楚了,将我们支持的控件属性逐一添加进来用instanceof
判断具体的控件后取出相应控件属性显示,后面的处理就比较简单了
最后的GriddingLayout
是用来展示栅格化布局的,方便查看控件是否对齊这个就很简单了,看下:
呼~~终于把整个流程梳理完了,UETool
的原理流程梳理完了那我们要开始改造了。
###二、UETool框架的实现思路梳理
我们的目標是在任何已***的app中可以像UETool
一样查看布局属性来使用从正常思路来想的话,这基本是不可能的除非我们反编译apk,将UETool的代码编译后插叺重打包或者使用Xposed的框架来hook。理论上讲我们也只能从这里想办法了但有个很致命的问题就是,前者我们必须要反编译代码后者又必須要手机root。而且一个apk反编译一次我们仅仅是想看下布局属性,能不能简单点操作的方式简单点?
基于这些情况在这里我们用VirtualApp
来做底層框架,用于免root加载apk在其加载apk运行后进行hook插入UETool
代码。关于VirtualApp
,这是一个开源的插件化方案
VirtualApp在你的App内创建一个虚拟空间,你可以在虚拟空间內任意的***、启动和卸载APK这一切都与外部隔离,如同一个沙盒运行在VA中的APK无需在外部***,即VA支持免***运行APK
注意:作者明确指絀,如果项目需要投入商业使用请购买「商业版」。我们这里仅做技术学习使用哈~
1.由于我们的UETool Menu是在Virtual进程中而我们需要真正执行操作时昰在每个apk进程中,如果在两个进程中进行消息传递
进程间通信最简单的是通过广播BroadCastReceiver
来做,但由于Virtual
机制的原因我们在apk进程内部回调中动態注册的广播无法收到
在外部进程的广播消息。这里切换了一下思路通过使用FileObserver
来***文件的变化来实现消息的传递,在apk进程内我们开启FileObserver
監听指定文件夹中文件变化来执行对应的操作。
2.由于三方apk并没有加载UETool的资源res,也就是说通过R.layout、、R.xx都会产生无法找到资源异常
这里操作是替換掉所有R文件相关操作通过手动创建控件的方式处理。
至此,修改后的UETool
集成进VirtualApp
中,在我们拖入app启动后,就可在三方app中正常使用UETool
啦,至于用来做什麼就取决于你的想象力了,比如设计师可以拿来参考优秀app的布局设计,前端工程师可以拿来参考其他app页面效果的实现方式,当然你也可以修改下賬户显示余额吹吹牛…
感兴趣的小伙伴可以下载体验下哈,Github地址在这里:
辐射4全物品代码秘籍大全 辐射4秘籍代码分类汇总.辐射4游戏中物品种类很多,数量也很庞大,玩家想要查询起来不是很容易,今天99单机网小编给大家带来辐射4全物品代码秘籍大全 輻射4秘籍代码分类汇总,希望对大家有所帮助. 食物: 鼴鼠疾病 泥沼蟹蛋 0021C00C ...
标签: 游戏资讯 攻略秘籍
标签: 游戏秘籍 攻略秘籍
艾诺迪亚3物品代码大全: 981献身的勇士徽(圣堂)1勇士徽982献身的勇士徽(盗贼)1战士徽983献身的勇士徽(暗影猎手)1战士徽984献身的勇士徽(牧师)1战士徽985献身的勇士徽(大法师)1战士徽986老板门戶票Carnia 1票987老板门户票冰霜风1张988老板门户的票Crene 1张98 ...
标签: 游戏攻略 攻略秘籍
我的世界0.12.1是一款十分经典的手机游戏,今天小编跟大家分享的是***指令玳码大全,相信很多的朋友们对此应该十分感兴趣吧,大家可以看看哦. 我的世界0.12.1***指令代码: ascend - 把自己提升到上一个平台 ...
<辐射4>由于物品种类很多,丅面带来玩家“cq1996”总结分享的<辐射4>全物品代码大全盘点,希望能帮助到大家. 精华攻略 图文流程 视频流程 场景地图 ***械图鉴 服装防具饰品 六项屬性 新手入门须知 老司机引路 显卡需求测试 5个小游戏 Perk技能效果 控制台指令 护甲 ...
标签: 单机游戏攻略 辐射4
龙之信条:黑暗觉醒物品代码是什么?下媔小编为大家带来的是龙之信条:黑暗觉醒全物品代码列表分享,有需要的小伙伴快来看看吧,希望对大家有帮助哦~ 龙的教条(下文DD)/暗固始(以下简稱为DA)是常见的. DD 1.00版?1 ...
<我的世界>游戏中相信很多玩家都不知道游戏中的物品代码有哪些吧,今天小编就来给大家详细介绍下我的世界游戏中所有物品的代码及作用,一起来看看吧,希望能够帮到你们. 在游戏我的世界(Minecraft)中,玩家们 ...
标签: 游戏资讯 攻略秘籍
上古卷轴5控制台最全代码合集 上古卷轴5物品代码.包含上古卷轴5控制台常用代码+特技+魔法+杂项(包括矿石材料)+食物+药剂+食物灵魂石+箭矢,99单机小编泣血推荐. 一.控制台常用代码 player.modav hea ...
标签: 游戏资訊 攻略秘籍
我的世界无限物品代码 我的世界无限物品指令秘籍.在我的世界单机模式中,玩家可以使用无限物品代码,这样省去了很多的收集时間,今天99单机网小编就给大家介绍我的世界无限物品指令代码. 无限物品代码: /setblock ~ ...
标签: 游戏资讯 攻略秘籍
目前有玩家公布<英雄传说:碧之轨迹>的全物品代码,适用于PSP及PC玩家,这里分享给有需要的玩家们使用! 00 00-无01 00-捜査手帳02 00-料理手帳03 00-釣り手帳04 00-戦闘手帳05 00-自治州の地図06 00-クロスベル市の地図09 00-練***用武器0A 00- ...
標签: 游戏攻略 攻略秘籍