前言
APK默认情况下是安装在ROM里面的,但由于ROM优先,当第三方APK安装过多、没有清理机器内的log缓存时,安装程序时会报如下异常:
[2014-04-11 20:27:04 - xxxx] Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
[2014-04-11 20:27:04 - xxx] Please check logcat output for more details.
[2014-04-11 20:27:04 - xxx] Launch canceled!
通常有如下几种方式来解决这个问题:
-
在AndroidManifest.xml文件中增加如下属性,让APK优先安装在外置存储中:
android:installLocation="preferExternal"
-
卸载掉无关的第三方应用;
-
清除logcat的缓存;
-
重启机器。
上面的四种方法只能暂时解决问题,所以我们需要将上述的操作自动化,这样在遇到这个问题时通过程序搞定,可以节省很多时间,面对这种需求我写的python脚本就应运而生了。
基本要求和测试环境
基本要求:
由于该脚本是通过操作DOS命令来完成的,所以在使用该脚本之前需要配置好ADB的环境变量,切确保你的设备ADB开着,并和电脑正常连接。
测试环境:
操作系统:Winows 7 64位
Python版本:Python 2.7
具体实现:
代码很简单,主要是通过DOS命令来操作,如果你想某些第三方应用不被卸载掉,可以通过字符串匹配相应的包名前缀,这个自己添加一下就OK:
# -*- coding: utf-8 -*-
import os;
def uninstall( ):
print 'start uninstall...'
os.popen('adb wait-for-device');
packages = os.popen('adb shell pm list packages -3');
for package in packages.readlines():
packageName = package.split(':')[-1].splitlines()[0];
os.popen('adb uninstall ' + packageName );
print packageName,'uninstall successed';
print 'uninstall all successed...'
def clearlog( ):
print 'start clear logcat buffer...'
os.popen('adb wait-for-device');
os.popen('adb logcat -c');
print 'clear logcat buffer success...'
clearlog();
uninstall();
网友评论
for package in packages.readlines():
packageName = package.split(':')[-1].splitlines()[0];
能不能稍微解释一下这三条,-3 就找的是第三方应用吗
作者:张明云
链接:http://www.jianshu.com/p/3011c60b19cb
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。