设备信息: 雷电模拟器4.0版本 Android7.1.2(Nougat, API 25) x86
一. 问题介绍
在Android模拟器上安装xposed框架时,安装好后打开出现如下问题:
下载http://dl.xposed/info/repo/full.xml.gz失败:unexpected end of stream on Connection{dl.xposed.info:80, proxy=DIRECT@ hostAddress=45.55.233.97 cipherSuite=none protocol=http/1.1}(recycle count=0) 这个报错后面一长串的信息在本人经历中每次会有不同,但似乎并不影响解决方法的选择。本文总结的几种方法并不全面,仅供参考。
二. 问题解决
根据网上资料,分析出现该问题的原因应该是xposed官方下载该资源的服务从http变更为https,但安装包内并未同步更新,因此用http试图获得https下的资源自然会报错。 我在试图解决该问题的时候发现了很多有意思并值得一试的博客,由于本人水平限制等其他原因,最终只有一个方法尝试成功了。其他没尝试成功的方法会在相关思路里贴出来。 参考链接:https://www.52pojie.cn/thread-1454243-1-1.html
stepOne
安装雷电模拟器4.0版本。注意,低版本并不适用。 【本例为x86,x86_64链接在后面附上】 【夸赞一下雷电模拟区里面的终端模拟器,提高效率很nice】
stepTwo
本方法需要两个文件:system文件夹和script.sh脚本。x86和x86_64不同点也就是在于这两个文件不同。
1. system文件
下载链接:system文件夹 API后面的数字为所需要的版本,按需下载即可。 下载后解压,里面的system文件夹即目标文件。
2. script.sh
这个脚本是来自参考链接里大佬写的,下载链接:script脚本 下载后将后缀改成sh即可。 由于个人原因当时并未仔细看脚本里的内容,有兴趣的可以自己学习了解一下,应该很有意思。
stepThree
创建文件夹xposed, 把system文件夹和script.sh放入xposed文件夹,通过雷电共享文件夹放到/system。 cd到/system后依次执行命令:
su
cd /xposed
mount -o remount -w /system
sh script.sh
reboot
【注意】 可能会出现以下错误: 需要将apk文件重命名为XposedInstaller.apk,放入路径/system/priv-app/XposedInstaller/XposedInstaller.apk
执行重启模拟器后即可。重启模拟器后可能还是会显示黄色的已安装未激活,建议多重启几次,让它好好自我反省几次即可。 最终结果如下: 安装需要的模块或自己DIY的模块就可以开始enjoy了!
x86_64
参考链接:https://www.52pojie.cn/thread-1255866-1-1.html
三. 相关思路
思路①:sqlite
出现这个错误的原因在于apk中数据库里下载source写的是http,因此只要把这个http改成https就可以正常下载了。可以用SQlite Editor进行编辑,或者用命令行修改,原理都是一样的。 这个也是xposed社区里比较推荐的方法。但是我用SQlite Editor修改重启后数据库会自动恢复为http,在网上也没查到和我同样问题的情况,故放弃。 命令行方法没有尝试。 参考链接:SQlite Editor & 命令行修改
思路②:自行下载
这个也是最初自己先想到的方法,根据报错信息其实可以找到资源所在位置,再顺藤摸瓜把需要的资源找到下载即可。下载后需要进行重新映射URL,用charles进行抓包。 我没有这方面经验,遇到问题也很难自行解决,因此只是当做补充资料看了看,下载好资源后并未进行尝试。 参考链接:自行下载再重新映射URL
思路③:逆向重打包
个人觉得思路①和③有些许类似,不过思路③的切入点是apk里的class.dex。对apk逆向反编译,将class.dex里面的http改成https,再重打包。 这个方法个人认为比较适合有一定操作经验的人,涉及到逆向、重打包和加密签名等,对于我这种只有理论知识毫无实操经验的菜鸟来说可能得折腾个好几天,单针对解决该问题而言时间效益不高。 参考链接:逆向重打包
这个问题困扰了很久,先后安装三次xposed框架都遇到了这个问题,每次解决后下次安装还是会遇到同样情况,故在自己的笔记中总结一下,以便下次参考。
参考资料均源网络,侵删
|