Android6.0关于预置三方app卸载 扫描system/third_app目录

时间:2025-01-27 10:48:25
  • /* 
  •  * Copyright (C) 2008 The Android Open Source Project 
  •  * 
  •  * Licensed under the Apache License, Version 2.0 (the "License"); 
  •  * you may not use this file except in compliance with the License. 
  •  * You may obtain a copy of the License at 
  •  * 
  •  *      /licenses/LICENSE-2.0 
  •  * 
  •  * Unless required by applicable law or agreed to in writing, software 
  •  * distributed under the License is distributed on an "AS IS" BASIS, 
  •  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  •  * See the License for the specific language governing permissions and 
  •  * limitations under the License. 
  •  */  
  •   
  • package ;  
  •   
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  •   
  • import ;  
  • import ;  
  • import ;  
  •   
  •   
  • import org.;  
  • import org.;  
  • import org.;  
  • import org.;  
  • import org.;  
  • import ;  
  • import .;  
  • import .;  
  • import .;  
  •   
  • import ;  
  •   
  •   
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  • import ;  
  •   
  • final class VendorSettings {  
  •   
  •     private static final String TAG_ROOT = "packages";  
  •     private static final String TAG_PACKAGE = "package";  
  •     static final String ATTR_PACKAGE_NAME = "name";  
  •     static final String ATTR_INSTALL_STATUS = "installStatus";  
  •     static final String VAL_INSTALLED = "installed";  
  •     static final String VAL_UNINSTALLED = "uninstalled";  
  •   
  •     private final File mSystemDir;  
  •     private final File mVendorSettingsFilename;  
  •     private final File mVendorBackupSettingsFilename;  
  •   
  •     final HashMap<String, VendorPackageSettings> mVendorPackages =  
  •             new HashMap<String, VendorPackageSettings>();  
  •     VendorSettings() {  
  •         this(());  
  •     }  
  •     VendorSettings(File dataDir) {  
  •         mSystemDir = new File(dataDir, "system");;  
  •         ();  
  •         ((),  
  •                 FileUtils.S_IRWXU|FileUtils.S_IRWXG  
  •                 |FileUtils.S_IROTH|FileUtils.S_IXOTH,  
  •                 -1, -1);  
  •         mVendorSettingsFilename = new File(mSystemDir, "");//xml文件  
  •         mVendorBackupSettingsFilename = new File(mSystemDir, "");//xml备份文件  
  •     }  
  •   
  •     void insertPackage(String packageName, boolean installStatus) {  
  •         VendorPackageSettings vps = (packageName);  
  •         if (vps != null) {  
  •             (installStatus);  
  •         } else {  
  •             vps = new VendorPackageSettings(packageName, installStatus);  
  •             (packageName, vps);  
  •         }  
  •     }  
  •   
  •     void setPackageStatus(String packageName, boolean installStatus) {  
  •         VendorPackageSettings vps = (packageName);  
  •         if (vps == null) {  
  •             //Shall we return a much meaningful result?  
  •             return;  
  •         } else {  
  •             (installStatus);  
  •         }  
  •     }  
  •   
  •     void removePackage(String packageName) {  
  •         if ((packageName) != null) {  
  •             (packageName);  
  •         }  
  •     }  
  •   
  •     void readLPw() {  
  •         FileInputStream str = null;  
  •         DocumentBuilderFactory docBuilderFactory = null;  
  •         DocumentBuilder docBuilder = null;  
  •         Document doc = null;  
  •         if (()) {//先看备份是否有备份文件,有代表之前写的时候失败了,就要使用备份文件  
  •             try {  
  •                 str = new FileInputStream(mVendorBackupSettingsFilename);  
  •                 if (()) {  
  •                     //If both the backup and vendor settings file exist, we  
  •                     //ignore the settings since it might have been corrupted.  
  •                     (, "Cleaning up settings file");  
  •                     mVendorSettingsFilename.delete();  
  •                 }  
  •             } catch ( e) {  
  •   
  •             }  
  •         }  
  •   
  •         try {  
  •             if (str == null) {  
  •                 if (!()) {  
  •                     return;  
  •                 }  
  •                 str = new FileInputStream(mVendorSettingsFilename);  
  •             }  
  •             docBuilderFactory = ();  
  •             docBuilder = ();  
  •             doc = (str);  
  •             Element root = ();  
  •             NodeList nodeList = (TAG_PACKAGE);  
  •             Node node = null;  
  •             NamedNodeMap nodeMap = null;  
  •             String packageName = null;  
  •             String installStatus = null;  
  •             for (int i = 0; i < (); i++) {//读取xml文件内容到mVendorPackages中  
  •                 node = (i);  
  •                 if (().equals(TAG_PACKAGE)) {  
  •                     nodeMap = ();  
  •                     packageName = (ATTR_PACKAGE_NAME).getTextContent();  
  •                     installStatus = (ATTR_INSTALL_STATUS).getTextContent();  
  •                     (packageName,  
  •                             new VendorPackageSettings(packageName, (VAL_INSTALLED)));  
  •                 }  
  •             }  
  •         } catch ( e) {  
  •             ();  
  •         } catch (ParserConfigurationException e) {  
  •             ();  
  •         } catch (SAXException e) {  
  •             ();  
  •         }  
  •     }  
  •   
  •     void writeLPr() {  
  •         if (()) {  
  •             if (!()) {//创建备份文件类似mSettings的处理方法  
  •                 if (!(mVendorBackupSettingsFilename)) {  
  •                     (, "Unable to backup package manager vendor settings, "  
  •                             + " current changes will be lost at reboot");  
  •                     return;  
  •                 }  
  •             } else {  
  •                 mVendorSettingsFilename.delete();  
  •                 (, "Preserving older vendor settings backup");  
  •             }  
  •         }  
  •         try {  
  •             FileOutputStream fstr = new FileOutputStream(mVendorSettingsFilename);  
  •             XmlSerializer serializer = new FastXmlSerializer();  
  •             //XmlSerializer serializer = ()  
  •             BufferedOutputStream str = new BufferedOutputStream(fstr);  
  •             (str, "utf-8");  
  •             (null, true);  
  •             (null, TAG_ROOT);  
  •   
  •             for (VendorPackageSettings ps : ()) {//将mVendorPackages中的状态写入xml文件  
  •                 (null, TAG_PACKAGE);  
  •                 (null, ATTR_PACKAGE_NAME, ());  
  •                 (null, ATTR_INSTALL_STATUS,  
  •                         () ? VAL_INSTALLED : VAL_UNINSTALLED);  
  •                 (null, TAG_PACKAGE);  
  •             }  
  •             (null, TAG_ROOT);  
  •             ();  
  •             ();  
  •             (fstr);  
  •             ();  
  •   
  •             mVendorBackupSettingsFilename.delete();  
  •             ((),  
  •                     FileUtils.S_IRUSR|FileUtils.S_IWUSR  
  •                     |FileUtils.S_IRGRP|FileUtils.S_IWGRP,  
  •                     -1, -1);  
  •         } catch (IllegalArgumentException e) {  
  •             ();  
  •         } catch (IllegalStateException e) {  
  •             ();  
  •         } catch (IOException e) {  
  •             ();  
  •         }  
  •     }  
  • }