实验室去年采购了一台小米手机,用来做移动端应用开发使用。
但是实际上并没有怎么用到它,原因在于开发者选项中的USB安装打不开,没法在Android Studio中安装和调试应用。登录了小米账号也不行,提示需要插入SIM卡。实验机谁愿意拿自己的电话卡给它供着
也就是说,
adb install xxx.apk
这种指令没法进行apk的安装,需要安装app的话,得将apk文件通过MTP协议传到手机里,再在手机上安装应用。
不过这仍然存在问题
安装未知来源应用
手机上安装应用,一众国产系统几乎默认只允许系统自带的应用商店安装。其它应用(比如浏览器,文件管理器等)安装apk的话,需要"安装未知应用"权限。
在部分系统上,就连授予应用这个权限都要求插入SIM卡,拼了命地阻止你安装。
可谓无耻至极
当你成功授予了文件管理器安装未知应用的权限后,问题又来了。
安装debug的apk
如果你的安装包是release版本,那自然可以安装,没有任何阻碍。但是,如果是为了调试应用而安装,那想必都是debug版的安装包。
但是很遗憾,在系统里是安装不了debug版的安装包的。下图中,上面是debug安装包的安装结果,下面是release安装包。
安装release的话,会失去很多调试用的日志输出,不利于调试应用。
你可能会想着,通过adb的shell,使用pm去安装debug的安装包。
首先执行adb shell
,然后进入用户主目录/storage/emulated/0/
,找到通过MTP放进手机中的安装包,再通过pm install -t xxx.apk
来安装
原因可能就如输出所示,没有打开这个apk的权限。它无法安装在用户目录下的安装包,不管安装包是debug还是release。
貌似是除了老老实实插电话卡,打开USB安装,就没有别的办法了。
临时目录
后来我在捣鼓shizuku的时候,在其启动脚本中发现一个目录/data/local/tmp
。不用刻意去搜,多多少少就能猜到这应该是个临时目录。既然是临时目录,那想必就有自由读写的权限。
但且细看,这个目录其实出现在刚才pm安装指令的错误信息里。
这就是答案了。
将debug的安装包先通过adb push xxx xxx
从电脑传至手机中,然后adb shell
,进入安卓终端,进入临时目录,再通过pm install -t xxx.apk
进行安装。事成之后记得删除临时目录里的apk。
安装指令中的-t是安装debug安装包专用的,具体可以点击查看官方文档的adb pm部分,如果是安装release安装包,则不需要这个参数。
如此,虽然麻烦了点,但也算是不需要插卡,不需要打开"USB"安装,便能够安装调试应用了。