首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Canta - Shizuku 驱动的 Android 免Root卸载工具

Canta - Shizuku 驱动的 Android 免Root卸载工具

原创
作者头像
qife122
发布2026-02-28 06:13:02
发布2026-02-28 06:13:02
870
举报

Canta:安全高效的 Android 免Root卸载工具

License

Shizuku

Canta 是一款基于 Shizuku 的开源 Android 应用卸载工具。它让您无需 Root 权限,也能轻松卸载包括系统应用在内的任何应用程序。秉承隐私至上的原则,Canta 的所有操作都在本地设备完成,绝不收集任何用户数据。

功能特性

  • 🚀 免Root卸载:借助 Shizuku 的强大能力,实现无需 Root 即可卸载应用的高级权限操作。
  • 🗑️ 卸载任何应用:从用户安装的应用到系统预装应用,Canta 都能轻松处理。
  • 🔒 隐私安全:应用完全不收集任何个人信息,无任何跟踪或数据传输行为。所有数据仅存储在本地设备。
  • 📦 基于权威数据:集成了 Universal Android Debloater 的应用信息数据库,提供清晰的应用描述和标识,帮助您做出明智的卸载决策。
  • 🎨 简洁易用:用户界面直观友好,让卸载操作变得简单直接。
  • 🔧 无缝集成Shizuku:仅需通过 Shizuku API 获取必要权限,即可开始使用全部功能。

安装指南

系统要求

  • Android 设备(具体版本要求请参考 Shizuku)
  • 已安装并激活 Shizuku(推荐使用最新版本)

步骤一:安装并激活 Shizuku

  1. 根据 Shizuku 官方指南,通过 ADB 或 Root 方式激活 Shizuku。
  2. 确保 Shizuku 服务正在运行。

步骤二:安装 Canta

  1. 从项目的 Releases 页面下载最新的 APK 文件。
  2. 在您的 Android 设备上安装下载的 APK。
  3. 打开 Canta,它将自动通过 Shizuku API 建立连接。

权限说明

Canta 仅请求其核心功能所必需的权限:

  • Shizuku API 访问:这是执行卸载等高级操作的基础。
  • 软件包可见性:用于正常查看和管理设备上已安装的应用程序列表。

使用说明

基础使用

  1. 确保 Shizuku 已激活且运行正常。
  2. 打开 Canta 应用。
  3. 应用会自动加载您设备上所有已安装应用的列表。
  4. 浏览列表,找到您想要卸载的应用。
  5. 点击应用旁边的卸载按钮。
  6. 确认操作,Canta 将通过 Shizuku 执行卸载命令。

典型使用场景

  • 清理系统臃肿:移除厂商预装的不常用或无法通过常规方式卸载的应用。
  • 管理用户应用:快速批量卸载不再需要的第三方应用。
  • 探索系统:结合 Universal Android Debloater 的数据,了解系统各组件的用途,谨慎选择卸载目标。

API概览(开发者)

Canta 的核心功能依赖于与 Shizuku 的交互,其关键接口是 Android 隐藏 API 的封装,用于获取包管理服务。

代码语言:java
复制
// IPackageManager 接口示例,用于获取系统包管理器服务
package android.content.pm;

import android.os.IBinder;
import android.os.IInterface;
import android.os.RemoteException;

/**
 * IPackageManager 的 Stub 类封装,用于通过 Shizuku 调用系统服务。
 * 参考自 Shizuku API Demo。
 */
public interface IPackageManager extends IInterface {
    // 获取包安装器服务,用于执行安装/卸载操作
    IPackageInstaller getPackageInstaller() throws RemoteException;

    abstract class Stub extends android.os.Binder implements IPackageManager {
        public static IPackageManager asInterface(IBinder obj) {
            // 实际实现由 Shizuku 框架提供
            throw new UnsupportedOperationException("Stub!");
        }
    }
}
代码语言:java
复制
// IPackageInstaller 接口示例,用于执行具体的卸载会话
package android.content.pm;

import android.os.IBinder;
import android.os.IInterface;

/**
 * IPackageInstaller 的 Stub 类封装。
 * 参考自 Shizuku API Demo。
 */
public interface IPackageInstaller extends IInterface {
    abstract class Stub extends android.os.Binder implements IPackageInstaller {
        public static IPackageInstaller asInterface(IBinder binder) {
            // 实际实现由 Shizuku 框架提供
            throw new UnsupportedOperationException("Stub!");
        }
    }
}

核心代码

以下是 Canta 中与 Shizuku 交互的核心模块,展示了如何获取系统服务并执行卸载操作。

代码语言:kotlin
复制
// 示例代码:通过 Shizuku 获取 PackageManager 并卸载应用
// 此代码片段展示了核心逻辑,具体实现请参考项目源码。

import android.content.pm.IPackageManager
import android.content.pm.IPackageInstaller
import rikka.shizuku.ShizukuBinderWrapper
import rikka.shizuku.SystemServiceHelper

class Uninstaller {

    private fun getPackageInstaller(): IPackageInstaller? {
        return try {
            // 1. 通过 Shizuku 获取绑定的 Binder 对象,代表系统服务 "package"
            val binder = ShizukuBinderWrapper(SystemServiceHelper.getSystemService("package"))
            // 2. 将 Binder 对象转换为 IPackageManager.Stub 接口
            val packageManager = IPackageManager.Stub.asInterface(binder)
            // 3. 通过 IPackageManager 获取 IPackageInstaller
            packageManager?.packageInstaller
        } catch (e: Exception) {
            e.printStackTrace()
            null
        }
    }

    fun uninstallPackage(packageName: String) {
        val installer = getPackageInstaller() ?: return

        // 此处为简化逻辑,实际卸载需要创建卸载会话并提交
        // val sessionParams = ... (创建卸载会话参数)
        // val sessionId = installer.createSession(sessionParams)
        // val session = installer.openSession(sessionId)
        // session.uninstall(packageName, ...)
        println("准备通过 Shizuku 卸载应用: $packageName")
    }
}

核心逻辑说明:

  1. 获取服务 Binder:通过 ShizukuBinderWrapperSystemServiceHelper 获取到系统包管理器服务的 Binder 对象。这是 Shizuku 赋予应用执行特权操作的关键。
  2. 转换 AIDL 接口:将 Binder 对象转换为项目定义的 AIDL 接口 IPackageManager.Stub,从而可以调用其内部方法。
  3. 获取安装器:通过 IPackageManagergetPackageInstaller() 方法获得 IPackageInstaller 对象,该对象是执行安装和卸载操作的核心。
  4. 执行卸载:利用 IPackageInstaller 创建卸载会话,最终完成应用的移除。整个流程权限由 Shizuku 在底层保障。FINISHED hj11kcZ8BgI9VJuBlttWY/0qkeLFf8eoWn1Mn0Sm4IA=

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Canta:安全高效的 Android 免Root卸载工具
    • 功能特性
    • 安装指南
      • 系统要求
      • 步骤一:安装并激活 Shizuku
      • 步骤二:安装 Canta
      • 权限说明
    • 使用说明
      • 基础使用
      • 典型使用场景
      • API概览(开发者)
    • 核心代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档