精华内容
下载资源
问答
  • 电脑上有腾讯管家,作为安卓开发,用真机测试的比较多,鄙人算一个,不喜欢用应用宝,当你卸载了应用宝之后,插上USB,有时候就回静默安装应用宝,然后弹出应用宝获取什么什么权限,特别烦 手机在没有安装应用宝之前...

    获取程序安装卸载广播

    电脑上有腾讯管家,作为安卓开发,用真机测试的比较多,鄙人算一个,不喜欢用应用宝,当你卸载了应用宝之后,插上USB,有时候就回静默安装应用宝,然后弹出应用宝获取什么什么权限,特别烦

    手机在没有安装应用宝之前,开发一点问题也没有,手机也没有问题,静默安装后,好多天的周期手机会自动重启,死机等情况

    今天又死机了一次,决定做一个当应用宝安装后弹出卸载框的程序  来提示我们卸载这个可恶的应用宝,我用的是华为3x

     

    接收安装&卸载广播

    package com.yqy.app;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.widget.Toast;
    
    public class SetupLisenerReceiver extends BroadcastReceiver {
    
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		// 接收安装广播
    		if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {
    			String packageName = intent.getDataString();
    //			Toast.makeText(context, "安装了:" + packageName + "包名的程序",
    //					Toast.LENGTH_SHORT).show();
    			// 安装了:package:com.tencent.android.qqdownloader包名的程序
    			if (packageName.equals("package:com.tencent.android.qqdownloader")) {
    				Uri packageURI = Uri.parse(packageName);
    				Intent uninstallIntent = new Intent(Intent.ACTION_DELETE,
    						packageURI);
    				// Receiver中使用startActivity 必须加上FLAG_ACTIVITY_NEW_TASK
    				uninstallIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    				// 在Receiver中尽量少使用startActivity 但是此功能必须这样
    				context.startActivity(uninstallIntent);
    			}
    		}
    		// 接收卸载广播
    		if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
    //			String packageName = intent.getDataString();
    //			Toast.makeText(context, "卸载了:" + packageName + "包名的程序",
    //					Toast.LENGTH_SHORT).show();
    
    		}
    
    	}
    
    }
    

     

    mainfest注册广播

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.yqy.app"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="18" />
    
        <uses-permission android:name="android.permission.INTERNET" />  
        <uses-permission android:name="android.permission.RESTART_PACKAGES"/>  
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
        
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.yqy.app.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            
            <receiver android:name=".SetupLisenerReceiver"  
                      android:label="@string/app_name">   
                <intent-filter>  
                 <action android:name="android.intent.action.PACKAGE_ADDED" />  
                 <action android:name="android.intent.action.PACKAGE_REMOVED" />  
                  <data android:scheme="package" />  
                </intent-filter>  
            </receiver>  
            
        </application>
    
    </manifest>
    


    广播接收器的注释写的很清楚,不仅试用于应用宝,同样适用于任何我们安卓开发者讨厌那些静默安装程序

    资源下载地址android 应用程序安装卸载(卸载应用宝)

    展开全文
  • android 代码卸载安装应用

    千次阅读 2018-04-26 12:03:45
    1.安装应用//下载应用到自己的手机上,本例将安装包放在asset上,直接读取写入手机的存储卡路径中清单文件声明权限//android8.0需要install_packages权限,清单文件注册即可,无需动态申请权限 &lt;uses-...

    1.安装应用

    //下载应用到自己的手机上,本例将安装包放在asset上,直接读取写入手机的存储卡路径中

    清单文件声明权限

    //android8.0需要install_packages权限,清单文件注册即可,无需动态申请权限

     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
        <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"></uses-permission>

    android 7.0以上使用FileProvider

    清单文件中声明

     <provider
                android:name="cn.demo.android8demo.traction.FileProviderUtil"
                android:authorities="${applicationId}.provider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provide_paths"></meta-data>
            </provider>

    provide_paths.xml文件 (写出所需的目录即可)

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <!--内部存储空间应用私有目录下cache/目录,等同于Context.getCacheDir()-->
        <cache-path
            name="cache_path"
            path="."></cache-path>
        <!--外部存储空间根目录,等同于Environment.getExternalStorageDirectory()-->
        <external-path
            name="external_path"
            path="."></external-path>
        <!--外面存储空间应用私有目录下files/目录,等同于Context.getExternalFilesDir(null)-->
        <external-files-path
            name="exteranl_files_path"
            path="."></external-files-path>
        <!--外部存储空间应用私有目录下cache/目录,等同于Context.getExternalCacheDir()-->
        <external-cache-path
            name="external_cache_path"
            path="."></external-cache-path>
        <!--内部存储空间私有目录files目录等同于Context.getFilesDir()-->
        <files-path
            name="files_path"
            path="."></files-path>
    
    </paths>

    1) . 适配android6.0以上

    //android8.0以后,权限申请的话,一个权限组的,只要同意一个权限就会默认整个权限组同意,即android8.0以下两个权限只有同意一个即可。

     //该执行需要两个权限
                    String[] permissions = new String[]{
                            Manifest.permission.READ_EXTERNAL_STORAGE,
                            Manifest.permission.WRITE_EXTERNAL_STORAGE
                    };
                    //判断当前权限 低版本直接通过,高版本判断权限
                    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
                        if (ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED &&
                                ActivityCompat.checkSelfPermission(this, permissions[1]) == PackageManager.PERMISSION_GRANTED) {
                            installApk();
                        } else {
                            ActivityCompat.requestPermissions(this, permissions, 11);
                        }
                    } else {
                        installApk();
                    }

    处理权限申请

        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            switch (requestCode) {
                case 11:
                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
                        installApk();
                    }
                    break;
            }
        }

    2)、准备安装的apk文件

    private void installApk(){ 
    File cacheDir = getExternalCacheDir();
            String CACHE_PATH;
            if (cacheDir != null) {
                CACHE_PATH = cacheDir.getAbsolutePath();
            } else {
                CACHE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath();
            }
            String path = CACHE_PATH + System.getProperty("file.separator") + "test.apk";
            final File apkFile = new File(path);//创建存储路径
            if (!apkFile.exists()) {
                Executor executor = Executors.newSingleThreadExecutor();
                executor.execute(new Runnable() {
                    @Override
                    public void run() {
                        try {//将asset目录下的文件读取出来
                            InputStream inputStream = getAssets().open("test.apk");
                            OutputStream os = null;
                            os = new BufferedOutputStream(new FileOutputStream(apkFile, false));
                            byte data[] = new byte[8192];
                            int len;
                            while ((len = inputStream.read(data, 0, 8192)) != -1) {
                                os.write(data, 0, len);
                            }
                            if (inputStream != null)
                                inputStream.close();
                            if (os != null)
                                os.close();
    
                        } catch (IOException e) {
                            e.printStackTrace();
                        }//读取文件之后执行安装
                        install(apkFile);
                    }
                });
            } else {//有文件的时候直接执行安装
                install(apkFile);
            }
    }

    3)、开始安装文件 android8.0添加一个允许安装第三方应用,需要用户手动授权处理

    可以用canRequestPackageInstalls来判断用户是否授权,未授权,跳转到相应的页面进行操作。

       /**
         * 跳转到安装页面
         *
         * @param apkFile
         */
        private void install(File apkFile) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                boolean b = getPackageManager().canRequestPackageInstalls();
                if (b) {
                    startInstall(apkFile);
                } else {//跳转到应用授权安装第三方应用权限
                    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
                    startActivity(intent);
                }
            } else {
                startInstall(apkFile);
            }
        }

    4)、跳转到应用的安装页面,将文件带到安装页面进行安装

    android8.0需要添加授权fileprovider授权权限,不能使用newtask标志位

      private void startInstall(File apkFile) {
            Intent intent1 = new Intent(Intent.ACTION_VIEW);
            Uri data;
            String type = "application/vnd.android.package-archive";
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                data = Uri.fromFile(apkFile);
                intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            } else {
                intent1.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                String authority = getPackageName() + ".provider";
                data = FileProvider.getUriForFile(this, authority, apkFile);
                intent1.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            }
            intent1.setDataAndType(data, type);
            startActivity(intent1);
        }

    2.静默安装应用

    获取文件跟上面的一样

    判断当前设备是否有root权限

       private boolean isRoot(){
            String su = "su";
            //手机本来已经有root权限(/system/bin/su已经存在,adb shell里面执行su就可以切换root权限下)
            String[] locations = {"/system/bin/", "/system/xbin/", "/sbin/", "/system/sd/xbin/",
                    "/system/bin/failsafe/", "/data/local/xbin/", "/data/local/bin/", "/data/local/"};
            for (String location : locations) {
                if (new File(location + su).exists()) {
                    return true;
                }
            }
            return false;
        }
      private boolean installSilent(File apkFile) {
            boolean isDeviceRoot = isRoot();
            String filePath = '"' + apkFile.getAbsolutePath() + '"';
            String command = "LD_LIBRARY_PATH=/vendor/lib*:/system/lib* pm install " + filePath;
            CommandResult commandResult = execCmd(new String[]{command}, isDeviceRoot, true);
            if (commandResult.successMsg != null && commandResult.successMsg.toLowerCase().contains("success")) {
                return true;//安装成功
            } else {
                return false;//安装失败
            }
        }

    命令行执行

      private static final String LINE_SEP = System.getProperty("line.separator");
    
        private CommandResult execCmd(String[] commands, boolean isRoot, boolean isNeedResultMsg) {
            int result = -1;
            if (commands == null || commands.length == 0) {
                return new CommandResult(result, null, null);
            }
            Process process = null;
            BufferedReader successResult = null;
            BufferedReader errorResult = null;
            StringBuffer successMsg = null;
            StringBuffer errorMsg = null;
    
            DataOutputStream os = null;
            try {
                //root过的手机上面获得root权限
                process = Runtime.getRuntime().exec(isRoot ? "su" : "sh");
                os = new DataOutputStream(process.getOutputStream());
                for (String command : commands) {
                    if (command == null)
                        continue;
                    os.write(command.getBytes());
                    os.writeBytes(LINE_SEP);
                    os.flush();
                }
                os.writeBytes("exit" + LINE_SEP);
                os.flush();
                result = process.waitFor();
                if (isNeedResultMsg) {
                    successMsg = new StringBuffer();
                    errorMsg = new StringBuffer();
                    successResult = new BufferedReader(new InputStreamReader(process.getInputStream(),
                            "UTF-8"));
                    errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream(),
                            "UTF-8"));
                    String line;
                    if ((line = successResult.readLine()) != null) {
                        successMsg.append(line);
                        while ((line = successResult.readLine()) != null) {
                            successMsg.append(LINE_SEP).append(line);
                        }
                    }
                    if ((line = errorResult.readLine()) != null) {
                        errorMsg.append(line);
                        while ((line = errorResult.readLine()) != null) {
                            errorMsg.append(LINE_SEP).append(line);
                        }
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (os != null)
                        os.close();
                    if (successResult != null)
                        successResult.close();
                    if (errorResult != null)
                        errorResult.close();
                    if (process != null)
                        process.destroy();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            return new CommandResult(result, successMsg == null ? null : successMsg.toString(),
                    errorMsg == null ? null : errorMsg.toString());
        }

    模型

    public class CommandResult {
    
        public int result;
        public String successMsg;
        public String errorMsg;
    
        public CommandResult(int result, String successMsg, String errorMsg) {
            this.result = result;
            this.successMsg = successMsg;
            this.errorMsg = errorMsg;
        }
    }

    3.卸载应用

    Intent intent=new Intent(Intent.ACTION_DELETE);
    intent.setData(Uri.parse("package:包名"));
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);

    4.静默卸载应用

      /**
         * 卸载应用成功&失败
         * @param packageName
         * @param isKeepData
         * @return
         */
        private boolean uninstallSilent(String packageName,boolean isKeepData){
            boolean isRoot=isRoot();
            String command="LD_LIBRARY_PATH=/vendor/lib*:/system/lib* pm uninstall "+(isKeepData?"-k":"")+packageName;
            CommandResult commandResult=execCmd(new String[]{command},isRoot,true);
            if (commandResult.successMsg!=null
                    && commandResult.successMsg.toLowerCase().contains("success")){
                return true;
            }else {
                return false;
            }
        }
    展开全文
  • adb卸载安装系统应用

    万次阅读 2018-10-18 14:40:36
    卸载系统应用 1.先把原来已经存在的相同包名的APK删除 adb root adb disable-verity adb reboot 重启设备  adb root adb remount 提示remount succeeded 表示成功 adb shell  su cd /system/app rm -r test...

    卸载系统应用

    1.先把原来已经存在的相同包名的APK删除

    adb root

    adb disable-verity

    adb reboot 重启设备 

    adb root
    adb remount    提示remount succeeded 表示成功
    adb shell 
    su
    cd  /system/app
    rm -r test    注释:(test 对应相应的apk文件夹  或者是test.apk对应的apk)

    2.将data/data/目录下该应用的包名的目录删除掉

    adb shell rm -rf data/data/com.example.test/    注释:如果已经进入adb shell  前面不再需要输入adb shell

    3.重启

    reboot   或者 adb reboot

     

    注释:需要有root权限才可以删除系统应用,如果不开始输入adb root 和adb disable-verity和adb remount  在删除应用包或者文件时会提示Read-only file system  无法删除app下的apk对应的文件和文件夹

     

    安装系统应用

    adb root
    adb remount    提示remount succeeded 表示成功

    adb push **.apk /system/app  

    adb reboot   重启后会自动安装你上次的应用 (系统应用需要系统签名 https://blog.csdn.net/xiaoyi_tdcq/article/details/79272047

    安装成系统应用后在运行时不会需要再去弹出申请权限,桌面无法卸载  ,系统应用有静默安装权限 

    展开全文
  • ADB安装卸载应用

    2020-06-28 11:45:12
    使用adb卸载app(卸载手机自带应用,root下) 二、操作 2.1 adb安装apk 手机USB连接电脑(连接成功进入adb) 执行 adb install -r <apk绝对路径> 只需要将文件拉近cmd窗口中便会自动解析路径(最好将apk放...

    一、目的

    1. 使用adb快速安装apk手机app
    2. 使用adb卸载app
    3. 使用adb卸载手机原带app(健康、指南针、用户反馈类的应用)

    二、操作

    2.1 adb安装应用

    手机USB连接电脑(连接成功进入adb)
    在这里插入图片描述
    执行

    adb install -r <apk绝对路径>
    

    只需要将文件拉近cmd窗口中便会自动解析路径(最好将apk放到c盘)
    在这里插入图片描述
    手机中确认安装即可
    在这里插入图片描述

    2.2 adb卸载应用(非自带)

    卸载小米手机自带的应用,一些不能卸载的也可以用这种方法卸载(指南针)
    在这里插入图片描述
    查看想要卸载的包名,操作可参考:快速查看当前APP包名

    拿到包名开始卸载,执行后应用立刻被删掉
    在这里插入图片描述
    手机中的游戏中心app已被删掉
    在这里插入图片描述

    2.3 adb卸载应用(内置)

    卸载指南针、健康这种不能在手机上卸载的app方法:
    KingRoot APP中的预装卸载(针对root手机)
    在这里插入图片描述

    展开全文
  • docker卸载安装应用镜像(详细步骤)一次docker卸载应用镜像的操作 一次docker卸载应用镜像的操作 1. 执行docker ps -a 查看运行的镜像进程 2. 执行docker stop 6091f41cff0b 停止镜像进程 (6091f41cff0b 为...
  • Appium自身有安装卸载,判断应用是否安装的方法: 如下: install_app(self,app_path)通过给予的路径,安装app is_app_installed(self, bundle_id) 检查指定的包,是否安装。返回True/False remove_app(self, ...
  • 1.查看已连接的设备 adb devices ...2.查看已安装应用 ...3.卸载安装应用  adb uninstall com.skype.raider //最后为应用名 4.从pc端安装apk到安卓设备 adb install [apk在pc中的路径]
  • ubuntu 用wine卸载wine安装应用

    千次阅读 2012-07-27 10:49:15
    用wine的卸载命令去卸载 执行 wine uninstaller.exe 命令会弹出一个对话框 如图: 点击你要卸载应用,右下角的移除按钮就有效,点击移除即可。 或者到相应的目录下删除制定文件 第一步:进入 ~/.wine/...
  • Win10下并不能使用Windows应用管理器直接图形化地卸载这些应用,而要使用Win10自带的WindowsPowershell工具来进行应用的管理,使用下面相应的命令即可进行应用卸载或者安装。(注:本文所列方法在Win10专业版测试...
  •  其实我们都知道,Android程序是可以监听到系统卸载程序这个广播的,不过可惜的是,它不能监听到自身被卸载,那么我们要怎么做才能在自身程序被卸载之后做一些事情呢?Java没有说怎么做,那C呢?C是可以的。C的思路...
  • 如何卸载Windows预安装内置应用

    千次阅读 2020-10-01 03:51:46
    使用PowerShell安装卸载Windows内置应用 一、卸载简介 什么是PowerShell? 如何安装升级PowerShel? PowerShell历史版本生命周期? 可以卸载应用(邮箱、地图、钱包、新闻、Xbox 等) 不可卸载应用应用商店、消息...
  • Android adb 查看已经安装的应用、安装应用卸载应用 一、adb shell pm list packages -[option] 命令查看已经安装的应用,列出包名,后面加不同的后缀输出不同信息。 adb shell pm list packages ####查看...
  • android卸载测试应用后再次安装应用失败方法一在连接电脑只有一部设备的情况下(包括模拟器) 调出windows命令行窗口输入如下命令: adb uninstall xx.xx.xx xx.xx.xx 代表包名,例: adb uninstall ...
  • office无法卸载无法安装的解决方法 office故障大致分为三种: 1.系统里安装多个版本导致的冲突 2.卸载之前的的版本没卸载干净导致的新版本安装不上 3.使用了试用版的office过期后没有及时激活 首先用到的工具是...
  • AppInfo类 ...import android.app.Application;... List<ResolveInfo> resolveInfos=manager.queryIntentActivities(intent,PackageManager.MATCH_ALL);...删除应用需要添加权限: 
  • Android~adb卸载系统预装应用(亲测有效)

    万次阅读 热门讨论 2019-09-24 13:44:12
    本文介绍一种安卓卸载系统应用的方法,如果你和我一样喜欢瞎折腾,有那么一点强迫症,希望对你有用。作为一名安卓开发者,大学以前总喜欢刷不同刷机包(ROM)、爱装不同的Launcher桌面体验,不过工作了没以前爱折腾...
  • 第一、 新建监听类:BootReceiver继承BroadcastReceiver  public class AppReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, ... // 接收安装广播 if (intent.getAction
  • 请问如何获取手机用户安装应用时记录下,通知服务器这个用户安装了这个应用并记录,卸载应用时也做同样的操作,谢谢
  • 实现静默安装卸载应用 前段时间做了一个批量安装卸载应用程序的小应用,由于安装卸载应用程序的部分API是隐藏的,所以必须在ubuntu下下载Android系统源码,并编译之后使用MM命令编译生成APK文件,其实也难。...
  • 铁威马TOS应用中心提供多种应用程序,你可以根据需要安装使用与卸载。 1.前往TOS桌面-应用中心; 2.选择你需要的应用,点击安装; 3.安装完成后,桌面将生成相应的应用图标; 4.若没有生成图标或在使用过程中误...
  • 记录解决Android Studio安装应用需先卸载再重新安装的问题
  • Android技术点笔记--(安装应用卸载应用广播)前言:总结Android中安装应用卸载应用的广播使用。 android系统中,安装和卸载都会发送出相应的广播,当应用安装完成后系统会发android.intent.action.PACKAGE_...
  • LoadRunner卸载安装

    千次阅读 2018-07-26 20:28:36
    介绍LoadRunner11和12的区别: 版本11:界面很丑,像上个世纪的软件;...有免费社区版本,不需要破解,安装方便;免费版本只支持50个虚拟用户,收费版目前没有破解方法;支持Chrome浏览器; 综合...
  • 本例要求学会使用yum命令安装卸载应用软件,完成下列任务: 安装/卸载软件 安装 httpd、wireshark-gnome 软件包,观察执行过程 检查这两个软件包的安装结果 卸载 httpd 软件包,检查卸载结果 通过重装软件修复...
  • 一、应用安装卸载、覆盖安装的广播 最近想优化一下项目,因为应用是有自动更新的功能的,想在覆盖安装的时候做一些自己的逻辑。于是使用了广播来完成这个需求。 讲到广播接收者,大家都知道,Android中四大组件...
  • 卸载win10应用

    千次阅读 2015-07-30 00:10:00
    Get-AppxPackage 列出本机已经安装应用 Remove-AppxPackage 移除包 ,注意需要使用包全名 PackageFullName 卸载视频: Remove-AppxPackage Microsoft.ZuneVideo_3.6.11821.0_x64__8wekyb3d8bbwe ...
  • 环境:魅族MX5,5.1版本 ...分析:已经先卸载安装,按道理应该不会提示替换xxx,估计卸载不干净,在某些地方留了信息,估计是魅族内置的软件应用管理卸载问题。 解决: 1.在系统设置-指纹和安全-Root权限设定r
  • 【PKMS】Settings中应用详情页卸载还原系统应用但数据未清除一、问题描述最近工作中出现一个问题,系统应用卸载后重装还原发现应用数据还在; 复现操作: 1.系统预置该应用在system/priv-app下,手机里预置的是旧...
  • 树莓派在用久了之后,内存卡的容量可能不够用了,或者刚刷系统时可以卸载一些不常用的应用软件,可以增大硬盘空间。 首先,清除之前看一下存储情况: df -s 可以看到已经使用的情况,这是可以卸载不常用系统自带...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 172,267
精华内容 68,906
关键字:

如何卸载正在安装应用