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
}
与其他应用程序“共享”授予“我的应用程序”的任何权限会很棒,但据我所知这是不可能的
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
}
与其他应用程序“共享”授予“我的应用程序”的任何权限会很棒,但据我所知这是不可能的