自己动手清除Android系统中的不良程序
陈跃峰
2014/6/29
最近在使用我的Nexus7时,总是经常莫名其妙的弹出一些广告弹窗,还会自动下载一些应用程序,还会在桌面上生成一个叫做“精彩应用”的图标,这个快捷方式关联的程序显示的内容和广告内容是一致的,很是烦人,使用360手机卫士和乐安全都发现不了这个不良程序,所以就自己动手来清除这个程序。
由于Nexus 7平时用于测试程序,安装的应用很多,手动删除了一些可疑的应用以后还是不行,猜测是某些app可能被人篡改了,就不再去删除app了,而把目光转向了桌面快捷方式上。
既然生成了“精彩应用”这个图标,而且点击可以启动程序,但是安卓系统的快捷方式和app之间没有很直观的联系,这就需要写些代码来解决了:
1、获取快捷方式对应的包名
众所周期,每个安卓app依靠一个唯一的包名就行区分,只要能发现这个包名,剩下就简单了。
获取快捷方式需要读写系统设置的权限:
<uses-permissionandroid:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permissionandroid:name="com.android.launcher.permission.WRITE_SETTINGS" />
读取快捷方式的代码如下:
/**
* 显示快捷方式信息
* @param context 上下文对象
*/
publicstatic void printShortcutInfo(Context context){
try{
ContentResolverresolver = context.getContentResolver();
Cursor cursor = resolver.query(Uri.parse("content://com.android.launcher2.settings/favorites?notify=true"),null,null,null,null);
int index = 0;
while(cursor.moveToNext()){
intnum = 5;
try{
Stringinfo = "";
for(inti = 0;i < num;i++){
info+= cursor.getString(i) + ",";
}
System.out.println(index+++ " " + info);
}catch(Exceptione1){}
}
cursor.close();
}catch(Exceptione){
e.printStackTrace();
}
}
通过执行这些代码,发现“精彩应用”这个快捷方式对应的包名是“cn.com.hkgt.gasapp”,通过这个包名也不能直接找到对应的程序,那下面就自己编码卸载这个程序,看看到底是哪里出了问题。
2、根据包名卸载app
对于没有root的程序,卸载时只是调用卸载界面,但是这个对于我来说足够了。
卸载程序需要的权限:
<uses-permissionandroid:name="android.permission.DELETE_PACKAGES" />
卸载程序的方法代码:
/**
* 卸载软件
*@param context 上下文对象
*@param pkgName 包名
*/
public static void deletePackage(Contextcontext,String pkgName){
try{
Uri packageURI =Uri.parse("package:" + pkgName);
Intent uninstallIntent = newIntent(Intent.ACTION_DELETE, packageURI);
context.startActivity(uninstallIntent);
}catch(Exception e){
e.printStackTrace();
}
}
执行这个方法卸载上面包名的程序时,终于发现是中石化营业厅程序被人篡改了,卸载该app,去他们的官网再次下载安装app,世界终于一片清静了。
最后发现百度应用中心和应用宝里面提供的中石化营业厅程序都是被篡改的程序,看来以后下载和安装app还是小心一点的好。
把自己的这一小段经历和大家一起分享,如果大家有更好的方法也请告诉我,谢谢。联系方式:cqucyf@JavaMeStudio.com