Android静默安装与静默卸载(系统应用)

一.轰隆一声雳响,小编闪亮登场。

本篇基于已有系统证书(从Android设备厂家获得)的情况下实现静默安装与静默卸载,可分为三部分讲解:将apk内置为系统应用,apk静默安装与apk静默卸载。

1.将apk内置为系统应用。内置的方法有共性,也有区别。基础操作是共性,区别就在于Android4.4以上版本与Android4.4以下版本。

  A.内置为系统应用要做的第一步,就是在清单文件的根节点manifest上添加声明:android:sharedUserId="android.uid.system" 如下图
image.png
    B.内置为系统应用要做的第二步,就是给没有签名过的apk文件签名。

      a.若设备厂家有提供.keystore(系统证书)文件,则利用Android Studio的Build选项下Grnerate Signed Bundle/apk方式直接指定
      签名文件给apk签名即可。默认密码一般都为 android 

      b.若没有设备厂家提供的系统证书,那么也可以从对应的Android版本中提取签名文件,只是适配性会有很大的局限。
      可参考https://blog.csdn.net/starhosea/article/details/78696460

    C.内置为系统应用要做的第三步,就是将声明好,签名过的apk,内置到Android系统中(划重点:内置操作所需的adb命令需要先将手机/设备
    ROOT):

      a. Android 4.4以下:4.4以下可利用adb命令将apk内置到 system/app 目录下,再重启系统即可生效。
      详情可参考 https://blog.csdn.net/m0_37135879/article/details/81134472

      b. Android 4.4以上:4.4以上版本将主要的系统应用更改到了system/priv-app目录下,导致很多小伙伴用4.4以下的方式尝试内置系统
      应用时产生了内置无效的情况。4.4以上版本与4.4以下版本内置apk为系统应用的方式是大同小异的,利用adb命令将apk内置到
      system/priv-app 目录下,再重启系统即可生效。
      详情可参考 https://blog.csdn.net/starhosea/article/details/78697007

    D.此步为知识补充,基础adb命令:

      安装:adb install apk路径

      重装:adb install -r 已安装过带签名的apk重装

      卸载:adb uninstall apk包名

      启动:adb shell am start -n 包名/包名.activity

      关闭:adb shell am force-stop 包名

2.apk静默安装。

 /**
 * 21      * APK静默安装
 * 22      *
 * 23      * @param apkPath
 * 24      *            APK安装包路径
 * 25      * @return true 静默安装成功 false 静默安装失败
 * 26
 */
public static boolean install(String apkPath) {
    String[] args = {"pm", INSTALL_CMD, "-r", apkPath};
    String result = apkProcess(args);
    Log.e(TAG, "install log:" + result);
    if (result != null
            && (result.endsWith("Success") || result.endsWith("Success\n"))) {
        return true;
    }
    return false;
}

 /**
 * 57      * 应用安装、卸载处理
 * 58      *
 * 59      * @param args
 * 60      *            安装、卸载参数
 * 61      * @return Apk安装、卸载结果
 * 62
 */
public static String apkProcess(String[] args) {
    String result = null;
    ProcessBuilder processBuilder = new ProcessBuilder(args);
    Process process = null;
    InputStream errIs = null;
    InputStream inIs = null;
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int read = -1;
        process = processBuilder.start();
        errIs = process.getErrorStream();
        while ((read = errIs.read()) != -1) {
            baos.write(read);
        }
        baos.write('\n');
        inIs = process.getInputStream();
        while ((read = inIs.read()) != -1) {
            baos.write(read);
        }
        byte[] data = baos.toByteArray();
        result = new String(data);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (errIs != null) {
                errIs.close();
            }
            if (inIs != null) {
                inIs.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (process != null) {
            process.destroy();
        }
    }
    return result;
}

3.apk静默卸载。

 /**
 * 39      * APK静默卸载
 * 40      *
 * 41      * @param packageName
 * 42      *            需要卸载应用的包名
 * 43      * @return true 静默卸载成功 false 静默卸载失败
 * 44
 */
public static boolean uninstall(String packageName) {
    String[] args = {"pm", UNINSTALL_CMD, packageName};
    String result = apkProcess(args);
    Log.e(TAG, "uninstall log:" + result);
    if (result != null
            && (result.endsWith("Success") || result.endsWith("Success\n"))) {
        return true;
    }
    return false;
}

二.若您觉得本文对您有帮助,记得点个关注哟~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,478评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,825评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,482评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,726评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,633评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,018评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,168评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,320评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,264评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,288评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,995评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,587评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,909评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,284评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,862评论 2 339

推荐阅读更多精彩内容