大家今天跟大家聊聊我最近搞的“黑魔法安卓”!听起来是不是很唬人?没那么神秘,就是我在安卓开发里玩的一些比较“野”的操作,或者说是绕过一些限制,实现一些原本不太容易实现的功能。
我琢磨着怎么能让我的app在用户没授权的情况下,也能获取一些设备信息。绝对不是为了干坏事!主要是为了做一些用户体验优化,比如根据设备型号做一些适配啥的。你们也知道,安卓碎片化太严重了,不做适配简直没法活。
然后我就开始各种查资料,各种Google,发现网上有很多关于绕过权限获取设备信息的方案。有些是用反射,有些是直接读系统文件。我先试了反射,结果发现安卓版本升级之后,很多类和方法都变了,之前能用的代码,现在直接就崩了。简直是日了狗了!
小编温馨提醒:本站只提供游戏介绍,下载游戏推荐89游戏,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
后来我就琢磨着直接读系统文件。毕竟系统文件总不会经常变?我就开始研究/proc目录下的文件,这里面有很多关于系统的信息。我尝试读取/proc/cpuinfo、/proc/meminfo这些文件,发现果然可以获取到一些有用的信息,比如CPU型号、内存大小等等。

但是,问题又来了!有些手机厂商为了安全,把这些文件的权限给限制了,普通应用根本没法读取。这可咋办?难道真的要放弃吗?
不!我可是搞技术的!怎么能轻易放弃?我就开始研究怎么提升应用的权限。我发现,如果应用是系统应用,就可以读取这些文件。但是,要把应用变成系统应用,需要刷机,而且还需要root权限。这太麻烦了,我可不想让用户冒这么大的风险。
后来我终于找到了一个比较靠谱的方案:利用su命令。su命令可以提升用户的权限,如果手机已经root,就可以通过su命令来获取root权限,然后就可以读取系统文件了。但是,su命令需要root权限,如果手机没有root,就没法使用。这还是没解决问题!
不死心,继续查资料。功夫不负有心人,终于让我找到了一个方法:利用PackageManager的installExistingPackage方法。这个方法可以在不卸载应用的情况下,重新安装应用,并且可以设置应用的权限。我就利用这个方法,把应用的权限提升到*_PRIVILEGED_PHONE_STATE,这个权限可以读取一些受保护的设备信息。
但是,这个方法需要签名,而且需要系统签名。普通应用是没法签系统签名的。这可咋办?
我就开始研究怎么获取系统签名。我发现,如果手机是厂商的测试机,就可以获取到系统签名。我就找了一个厂商的朋友,借了一台测试机,然后把应用签上系统签名,再用installExistingPackage方法重新安装应用,终于成功获取到了设备信息!
搞定之后,我把代码封装成了一个库,以后就可以直接用了。虽然过程很曲折,但是结果还是令人满意的。这就是我的“黑魔法安卓”实践记录,希望对大家有所帮助!
注意事项:这些方法都比较“野”,可能会有一些兼容性问题,而且有些厂商可能会对这些方法进行限制。在使用这些方法的时候,一定要谨慎!



