利用 Amarok 对文件和应用进行隐藏操作实践
By 辞峡烟斜
前序
首先,这是我使用 Obsidian 进行记录的第一篇笔记。
一直以来,我都想找一款称心如意的文件和应用隐藏app, Amarok 是用过的其中一款,使用体验较佳,准备长期使用。
Amarok 是轻量级隐私保护小工具,可一键隐藏隐私文件和应用。它不对文件与应用进行加密,而是进行“隐藏”。它不加密文件内容,只混淆文件名以及文件签名,使文件“损坏”无法打开并且隐藏起来;Amarok 使用停用应用的方式“隐藏”应用,使它们在启动器中不可见。其详细介绍请详见官网(https://deltazefiro.github.io/Amarok-doc/ )。
Amarok 目前提供4种应用隐藏模式:Root
模式、Shizuku/Sui
模式、Dhizuku
模式、DSM
模式。目录建议使用Shizuku/Sui
、Dhizuku
两种模式之一,Shizuku/Sui
模式手机有无 root 都可以,无 root 手机重启后需再次激活。Dhizuku
模式工作在无 root 手机,只需一次激活即可使用,重启设备不需要重新激活。
我的手机不想 root ,又不想频繁重启后重新激活,于是选择了Dhizuku
模式。激活 Dhizuku 大概率(为什么这么说,以下会有说明)需要首先运行 Shizuku 。我的实践操作步骤详述如下。
有关准备工作
- 下载相关 app 和工具:
- Shizuku :官网、下载归纳页
- Dhizuku:Github项目页、Github下载页
- Amarok:官网 、下载归纳页
- Accounts:Github项目页、Github下载页,查询 Android 手机登录了哪些账户
- Hail 雹:Github项目页、Github下载页,用于冻结 Android 应用的自由软件
- Android SDK Platform-Tools:Android SDK 的一个组件,包含与 Android 平台进行交互的工具,主要是
adb
和fastboot
。从此处下载相应系统对应的版本。 tips : 旧版本也可从此处下载,虽没显示下载地址,只需把最新版本的下载地址里的版本号相应改为需下载的版本号即可。
- 手机 USB 数据线,用于连接电脑。
- 电脑终端,建议选择 Linux 系统终端。Windows 系统会产生莫名的错误,较难排查。我测试的这台 Windows10 电脑就始终不能连接手机进行 adb 操作,在 Linux 就一点问题都没,省折腾。
几点说明
- 激活 Dhizuku 有两种方式:通过 Shizuku 激活、通过电脑激活。
- 对于没有 root 的设备,运行 Shizuku 可以通过无线调试启动和通过连接电脑(使用 adb )启动。两种方式启动运行 Shizuku 均基本不会出现错误。
- 即便通过无线调试启动运行 Shizuku 后,也不能肯定可以直接通过 Shizuku 成功激活 Dhizuku ,除非是未使用新机,否则很可能会出现激活错误,得需要安装上述的 Accounts、Hail 两个 app 进行辅助,而 Accounts 的运行需要首先运行 Shizuku 。
- 通过电脑激活方式激活 Dhizuku 也可能需要 Accounts、Hail 两个 app
- 并不是所有手机都能开启无线调试功能,我的华为 P40pro+ 就没有,小米13pro就有:

综上,最理想的状态是手机可以开启无线调试,利用无线调试运行 Shizuku,再通过 Shizuku 激活 Dhizuku 。这是未出错的极端情况,以下是在最复杂的情况下的具体步骤,具体可视情况跳过。
具体操作步骤
手机连接电脑
手机开启 USB 调试,连接电脑,在电脑终端运行 adb 开启调试。命令如下最后的结果才表示已经成功连接并可以运行 adb 相关的命令。
[liy@Arch-inLe platform-tools]$ ./adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
GMUY889898223888 unauthorized
[liy@Arch-inLe platform-tools]$ ./adb devices
List of devices attached
GMUY889898223888 device
手机启动运行 Shizuku
手机安装并运行 Shizuku ,通过无线调试启动可详参官网通过无线调试启动。通过连接电脑启动,需在电脑终端下运行如下命令:

[liy@liArch-inLe platform-tools]$ ./adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh
info: start.sh begin
info: attempt to copy starter from /storage/emulated/0/Android/data/moe.shizuku.privileged.api/starter to /data/local/tmp/shizuku_starter
info: exec /data/local/tmp/shizuku_starter
info: starter begin
info: killing old process...
info: apk path is /data/app/~~PIIJFfJDXgUM5XlLnrHToQ==/moe.shizuku.privileged.api-YHr4Rf4TkSVNWmNzxHCiiw==/base.apk
info: starting server...
info: shizuku_starter exit with 0
手机启动运行 Dhizuku
手机运行 Dhizuku ,通过电脑激活,在电脑终端运行激活命令: ./adb shell dpm set-device-owner com.rosan.dhizuku/.server.DhizukuDAReceiver
,可能有三种情况发生:
激活成功
[liy@liArch-inLe platform-tools]$ ./adb shell dpm set-device-owner com.rosan.dhizuku/.server.DhizukuDAReceiver
Success: Device owner set to package com.rosan.dhizuku/.server.DhizukuDAReceiver
Active admin set to component com.rosan.dhizuku/.server.DhizukuDAReceiver
表示成功激活。
Existing user 错误
[liy@liArch-inLe platform-tools]$ ./adb shell dpm set-device-owner com.rosan.dhizuku/.server.DhizukuDAReceiver
Exception occurred while executing 'set-device-owner':
java.lang.IllegalStateException: Not allowed to set the device owner because there are already several users on the device.
at com.android.server.devicepolicy.DevicePolicyManagerService.enforceCanSetDeviceOwnerLocked(DevicePolicyManagerService.java:9645)
at com.android.server.devicepolicy.DevicePolicyManagerService.setDeviceOwner(DevicePolicyManagerService.java:8568)
at com.android.server.devicepolicy.DevicePolicyManagerServiceShellCommand.runSetDeviceOwner(DevicePolicyManagerServiceShellCommand.java:256)
at com.android.server.devicepolicy.DevicePolicyManagerServiceShellCommand.onCommand(DevicePolicyManagerServiceShellCommand.java:89)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.devicepolicy.DevicePolicyManagerService.onShellCommand(DevicePolicyManagerService.java:9967)
at android.os.Binder.shellCommand(Binder.java:962)
at android.os.Binder.onTransact(Binder.java:846)
at android.app.admin.IDevicePolicyManager$Stub.onTransact(IDevicePolicyManager.java:6966)
at com.android.server.devicepolicy.DevicePolicyManagerService.onTransact(DevicePolicyManagerService.java:17958)
at android.os.Binder.execTransactInternal(Binder.java:1197)
at android.os.Binder.execTransact(Binder.java:1156)
表示手机系统存在多个 user ,激活 Dhizuku 过程中不允许其他 user 存在。其他 user 的产生可能是因为 app clone、double app、guest 和 multi-user functions ,详见官网说明。解决方法:官方说明里建议是从手机设置里直接删除有关双开应用,我采用的是相关明了的“暴力”手段:
[liy@liArch-inLe platform-tools]$ ./adb shell pm list users
Users:
UserInfo{0:机主:c13} running
UserInfo{10:隐私空间:2020410}
[liy@liArch-inLe platform-tools]$ ./adb shell pm remove-user 10
Success: removed user
再次运行 Dhizuku 激活命令即可。
Existing account 错误
[liy@liArch-inLe platform-tools]$ ./adb shell dpm set-device-owner com.rosan.dhizuku/.server.DhizukuDAReceiver
Exception occurred while executing 'set-device-owner':
java.lang.IllegalStateException: Not allowed to set the device owner because there are already some accounts on the device.
at com.android.server.devicepolicy.DevicePolicyManagerService.enforceCanSetDeviceOwnerLocked(DevicePolicyManagerService.java:9645)
at com.android.server.devicepolicy.DevicePolicyManagerService.setDeviceOwner(DevicePolicyManagerService.java:8568)
at com.android.server.devicepolicy.DevicePolicyManagerServiceShellCommand.runSetDeviceOwner(DevicePolicyManagerServiceShellCommand.java:256)
at com.android.server.devicepolicy.DevicePolicyManagerServiceShellCommand.onCommand(DevicePolicyManagerServiceShellCommand.java:89)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.devicepolicy.DevicePolicyManagerService.onShellCommand(DevicePolicyManagerService.java:9967)
at android.os.Binder.shellCommand(Binder.java:962)
at android.os.Binder.onTransact(Binder.java:846)
at android.app.admin.IDevicePolicyManager$Stub.onTransact(IDevicePolicyManager.java:6966)
at com.android.server.devicepolicy.DevicePolicyManagerService.onTransact(DevicePolicyManagerService.java:17958)
at android.os.Binder.execTransactInternal(Binder.java:1197)
at android.os.Binder.execTransact(Binder.java:1156)
表示手机系统存在多个 account ,激活 Dhizuku 过程中需要删除所有的accounts。详见官网说明。这就需要用到之前准备的工具 Accounts 和 Hail 了,步骤如下:
- 打开 Accounts ,点击右上角按钮,导出到剪贴板。

- 打开 Hail 应用,先设置工作模式,选择
Shizuku - 停用
。

- 从剪贴板导入

- 点击冻结按钮即可冻结相关 accounts 。

此时再运行再次运行 Dhizuku 激活命令即可激活。
上述两种错误结果可能会相继发生,次序不定,照上述方法解决即可。
启动运行 Amarok
进入设置界面,应用隐藏模式,选择Dhizuku 模式
,确认即可应用 Amarok 隐藏文件和应用。

最后有关说明
- 照上激活 Dhizuku 后,如不是人为手动取消激活,重启后,Dhizuku 还是处于激活状态。
- 激活 Dhizuku 后,记得在 Hail 里解决刚已经冻结的 accounts 并删除,否则手机有些程序不能正常使用。