Here's me.

2018年8月

小黑屋是一个简洁,快速的应用冻结工具。

简介..

小黑屋 – 无需 Root 权限冻结应用程序
小黑屋,不需要 Root,也不需要解 BL 锁,一键冻结不常用的应用程序,还您一个流畅的手机。

下载地址..

您可以通过 酷安 , Google Play 下载。

Android绿色应用公约

小黑屋遵守《绿色应用公约》,保证在运行期间,不会唤醒其他应用,保持后台纯净。

一些您可能需要注意到的事情..

隐私政策
软件许可
Telegram 交流群,Telegram更新 Channel

一些特性..

支持设置任何已安装的图标包(包括已被冻结的);
支持在免 Root 环境下冻结应用;
支持添加已冻结应用的次级快捷方式(如 支付宝扫一扫 等)
支持被 Tasker 调用;
以及其他..

还在开发中的功能..

应用列表分享功能;
应用分类功能;
图标蒙版功能;
自定义应用主题;
以及其他..

一些黑科技..

比大多数工具都要快的冻结速度;
不需要 Root 权限,也不需要开启无障碍功能,静默安装或是卸载应用。

更新日志..

1.8.5.1
我们针对 Android 9+ 静默安装进行了优化,同时也对出现的其他一些问题进行了修复.

1.8.5
在这个版本里,我们针对出现的某些问题进行了修复.

1.8.4.2
应 Google Play 要求,应用会在首次启动时显示权限申明以及隐私政策信息.此版本同时对某些 bug 进行了修复.

1.8.4.1
优化了图标包获取逻辑,并且对更改冻结模式时出现的问题进行了修复。

1.8.4
我们在新版本中添加了 Shizuku 工作模式(测试),并且为静默安装功能提供了一个简单的使用说明。

1.8.3.8
这个版本里,我们彻底规避了在 Android 9 上 Root 模式对非 SDK 接口的调用。同时也对其他一些问题进行了修复。

1.8.3.6
在这个版本里,我们修复了 Android 9 上某些应用无法正常调用静默安装的问题。同时我们也对其他的某些问题进行了修复。

1.8.3.5
小黑屋已上架 Google Play。
我们针对某些问题进行了修复。

1.8.3.3
在这个版本里,您可以在设置里自由更改小黑屋主页面每行的应用数量.我们也对部分文本进行了校对.

1.8.3.1&2
我们针对此版本优化了静默安装的成功率,并且对某些问题进行了修复.敬请体验.

1.8.3
在这个版本里,我们修复了新应用加入小黑屋列表时可能会导致的崩溃问题.我们也对一些其他的问题进行了修复.敬请体验.

1.8.2
– 支持在第三方工具中解冻应用
– 优化列表加载逻辑
– 其他的一些问题修复

1.8.1
– 支持在第三方工具中调用小黑屋对 App 进行设置(例如 绿色守护 AppOps 等应用)
– bug 修复

1.8.0
– bug 修复

1.7.9.2 & 1.7.9.3
– 支持添加已冻结应用的次级快捷方式到桌面,比如微信的扫一扫、支付宝的付款码等(需要应用支持).
– 现在点击无法打开应用图标仅仅会解冻应用,不再尝试打开。同时也不再支持添加无法打开应用的快捷方式到桌面。
– 以及对其他的一些 bug 的修复.

更久的版本暂无存档更新日志,抱歉。

2018年8月30日,1.8.1 版。小黑屋的发布已整整一年。感谢大家的关注与支持。

先说说一般情况下如何进行静默安装:
①具有框架签名的应用或具有特权权限(root/shell 或其他)的应用直接调用系统方法来安装。eg 内置应用市场、Google Play 和 小黑屋 等。
②root 或 shell 权限,使用指令 “pm install” eg 酷安 刷机精灵 等。本质上也是第一种,会慢一点。
③使用无障碍功能,模拟用户手指点击下一步来安装。

Flyme MIUI 等 ROM 已经开启对第二条静默安装方法的验证,如果是通过 root 或 shell 进程开启的安装任务,可能需要在手机上二次确认。而无障碍选项在一些ROM上,会被自动关闭,无法正常使用。

第一种安装方法被用在各机型的内置应用市场上。但是一般情况下,如果没有系统框架签名或是特权权限的应用无法调用的。那么,小黑屋的静默安装功能是怎么实现的呢?

让我们看一下这条 commit:https://android.googlesource.com/platform/frameworks/base/+/39fb7fd%5E!/

Allow silent package install for device owner.

Allow the device owner to silently install and remove packages using the
PackageInstaller APIs. Show notifications to the user after the
installation / deletion was successful.

具体看 代码 https://android.googlesource.com/platform/frameworks/base/+/39fb7fd730dc2113ced7e663d7a35e48a4c6b1ae/services/core/java/com/android/server/pm/PackageInstallerSession.java#213

        // Device owners are allowed to silently install packages, so the permission check is
        // waived if the installer is the device owner.
        DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(
                Context.DEVICE_POLICY_SERVICE);
        mIsInstallerDeviceOwner = (dpm != null) && dpm.isDeviceOwnerApp(installerPackageName);
        if ((mPm.checkUidPermission(android.Manifest.permission.INSTALL_PACKAGES, installerUid)
                == PackageManager.PERMISSION_GRANTED)
                || (installerUid == Process.ROOT_UID)
                || mIsInstallerDeviceOwner) {
            mPermissionsAccepted = true;
        } else {
            mPermissionsAccepted = false;
        }

这里 我们可以看到,PackageInstaller.Session 会判断应用是否具有 android.Manifest.permission.INSTALL_PACKAGE 权限 或是应用 UID 是否为 ROOT 或是设备管理员应用。如果是,就会将 mPermissionsAccepted 置于 true,就能通过验证来安装。我们现在知道了这一点就好办了,可以新建一个设备管理员应用,然后写一个 demo:

        int sessionId = getPackageManager().getPackageInstaller().createSession(new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL));
        PackageInstaller.Session session = getPackageManager().getPackageInstaller().openSession(sessionId);
        session.fsync(outputStream); //写apk数据
        session.commit(new IntentSender());

编译安装试验,发现应用成功安装,且状态栏成功出现一条应用已安装的通知。

当然了,通过阅读上面的 commit,我们也能得知设备管理员应用也可以静默卸载应用。有兴趣的话可以试试。