自己动手清除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