Android 12 次中断 AIDL/IPC IPC APK 的运行时权限

Android 12 breaks AIDL/IPC with runtime permissions on IPC APK

Pre-Android12 我可以创建专有的蓝牙健康设备驱动程序服务 APK,并通过 AIDL 从主应用程序与它们交换信息。驱动程序 APK 没有 UI,安装后不会启动任何内容。尽管这些 APK 使用蓝牙和 BLE,但所有运行时权限都可以从主应用程序中授予。无需更改主应用程序中的任何代码即可安装和卸载这些 APK(用户也无需执行任何操作)。

有了 Android 12,这就不再正确了。如果没有主应用程序,这些服务 APK 将毫无用处,但 Android12 需要来自这些 UI-less 和 launch-less 服务的运行时权限。

有谁知道如何解决这个问题,或者 Android 为什么要这么做?破坏了创建插件驱动程序的全部目的!有没有办法将主应用程序的权限授予已安装的驱动程序?由于没有运行时蓝牙权限,驱动程序不会崩溃,直到应用程序尝试使用它。

我在 12 岁之前也遇到过类似的问题。我的 apk-lib-plugin-aidl 应用程序需要一些其他的 perms,我已经结束了一个并且只有一个 Activity(未设置为启动器!)具有透明或只是黑色背景,这只是 运行 onResume 中的运行时烫发对话框。除了 finish()ing Activity 之外,甚至不关心结果。我还添加了两种用于 AIDL 检查 perms 和 运行 this Activity

的方法
    override fun openGrantPermissionsActivity() {
        Log.i(LOG_TAG, "openGrantPermissionsActivity")
        val intent = Intent(this@AidlService, PermissionActivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or
                Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP
        startActivity(intent)
    }

    override fun checkPermissions(): Boolean {
        val permissionsOk = Utils.checkPermission(
            this@AidlService, PermissionActivity.RECORD_AUDIO_PERM
        )
        Log.i(LOG_TAG, "checkPermissions are ok:$permissionsOk")
        return permissionsOk
    }

与其他应用程序“共享”授予“我的应用程序”的任何权限会很棒,但据我所知这是不可能的