前言
关于什么是Hierarchy Viewer,请查看官方文档:http://developer.android.com/tools/debugging/debugging-ui.html。
个人理解:Hierarchy Viewer能获得当前手机实时的UI信息,给界面设计人员和自动化测试人员带来极大的便利。
Hierarchy Viewer 工具提供了一个可视化界面显示布局的层次结构,让我们可以进行调试,从而优化界面布局结构,它需要手机开启 ViewServer 配合使用
但是在真机上并不能使用,Android的官方文档中提到:出于安全考虑,Hierarchy Viewer只能连接Android开发版手机或者模拟器
在代码中是在 WindowManagerService.java 类中做的限制,如下
private static final String SYSTEM_SECURE = "ro.secure"; private static final String SYSTEM_DEBUGGABLE = "ro.debuggable"; public boolean startViewServer(int port) { if (isSystemSecure()) { // 判断系统是否是安全的 return false; } // ... try { mViewServer = new ViewServer(this, port); return mViewServer.start(); } catch (IOException e) { Slog.w(TAG_WM, "View server did not start"); } return false; } private boolean isSystemSecure() { return "1".equals(SystemProperties.get(SYSTEM_SECURE, "1")) && "0".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0")); }
可以看到,在 isSystemSecure() 函数中,判断了 ro.secure 和 ro.debuggable 的值
所以我们的思路就是
使 SystemProperties.get(SYSTEM_SECURE, "1") 返回 0
或者 SystemProperties.get(SYSTEM_DEBUGGABLE, "0") 返回 1
即可达到目的
这两个属性被定义在 /default.prop 文件中,每次系统启动会被加载到内存中,之前看过一些修改 system 的方法,不过需要刷机,风险比较大,今天偶然返现一个工具 mprop
这个工具可以修改内存中一些属性的值,但是在手机重启后需要重新修改,不过这都是小事
依照工具内给定的步骤修改了 ro.debuggable 的值为 1 ,然后使用下面的命令
# 判断手机是否开启了view server,如果没开启则开启 adb shell service call window 3 # 返回 Result: Parcel(00000000 00000001 '........') 开启 # 返回 Result: Parcel(00000000 00000000 '........') 关闭 # 开启 ViewServer adb shell service call window 1 i32 4939 # 关闭 ViewServer adb shell service call window 2 i32 4939
机型:一加2 氧OS 6.0.1 ,其他不同型号不同系统需自行测试,不保证成功
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
Android设备是索尼xperia Z,4.3版本。 我想自动化本机计算器应用程序。 代码: 步骤: 1.将设备与系统连接,并使用adb devices命令检查-它显示我的设备已连接。 2.使用命令启动appium:
我是Android App开发和BLE的新手,我正在使用示例代码BluetoothLeGatt[我从Android Studio导入的那个]学习这些。该代码在我的平板电脑(Android 5.0)上运行良好,但扫描活动不会在Android 6.0上返回任何BLE设备。我收到的错误消息如下所示。 我查看了Android 6.0上发布的Bluetooth Low Energy startScan,没有
我在Google Play上发布了一个应用程序,但我的一些用户无法使用他们的设备找到它。 该应用程序的最小apk为11(Android 3.0)。 例如,当有人使用Android4.0的三星银河SII时,该应用程序无法找到,因为SII的初始版本是Android2.3。有了SIII就没问题了。 在开发者控制台中,控制台在上传apk时自动检查哪些设备兼容。作为开发人员,我可以禁用设备进行下载,但不能启
我试图建立一个VPN客户端移动基于Android的应用程序,连接到虚拟架构体系的VPN隧道。我有一个类似的Linux /Windows的应用程序,我知道如何打开一个屯/水龙头设备(打开 /dev/net/tun)。我们如何使用C为Android做同样的事情? 还有,android中的VPN类服务是什么。net API到底做什么?
我收到代码为200的响应,但图像没有上传到服务器
我需要启动android前台服务,并在设备启动时从服务启动活动。我广泛地搜索了web和stackoverflow并尝试了不同的建议,但非常奇怪的是,我不能使这个功能工作。 我不明白我做错了什么。 下面是来自我的项目的代码和清单文件的内容。 我做错了什么,如何解决它,在大多数android设备上工作的功能? 这是我的AndroidManifest.xml: 这是我的austostart.java:
当我尝试通过Android Studio或cmd线(sudo./Monitor)启动Android设备监视器时,它会给我错误: 日志文件如下-https://gist.github.com/varadmondkar/fcaf9b726d56428108684c41aab2f1b3#file-1508905740386-log !entry org.eclipse.osgi 4 0 201 7-10
问题内容: 我对Android和SCORM没什么疑问。在这两个领域中,我都还很新,我只花了一个晚上在网上挖了一些答案。 我发现的主题是关于将SCORM软件包与LMS同步,但是我不需要。我只是想知道如何在android设备(带Android 4+ OS的联想平板电脑)上播放(而且只需播放,无需任何同步或跟踪)SCORM程序包。如果我尝试制作自己的允许浏览本地SCORM软件包的应用程序,是否可以使用W