Android 连接时 AIDL 检查客户端身份

Android AIDL Check Client Identity upon connecting

我有一个充当服务的应用程序,第二个应用程序需要连接到它,所以我正在使用 Android 界面定义语言 (AIDL)。 限制服务仅接受该特定应用程序的最佳方法是什么?客户端应用程序的身份应该在哪种方法中发生?

我知道客户端应该有 .aidl 文件的副本,但我需要更多方法来检查谁在连接到服务。

有多种方法可以检查连接到您的 aidl 服务的应用程序的身份。

  1. 通过检查应用程序的签名: 如果您只希望与您的应用或 SystemApps 使用相同密钥签名的应用可以连接到您的服务,请参考下面的 kotlin 代码:

相同的按键符号和 IsSyetm 应用程序:

 private fun isSameKeySinged(packageManager: PackageManager, packageNameOfTheOtherApp: String): Boolean {
        return packageManager.checkSignatures(
            BuildConfig.APPLICATION_ID, packageNameOfTheOtherApp
        ) == PackageManager.SIGNATURE_MATCH
    }

    private fun isSystemApp(packageManager: PackageManager, packageNameOfTheOtherApp: String): Boolean {
        try {
            val applicationInfo = packageManager.getApplicationInfo(
                packageNameOfTheOtherApp, 0
            )
            if (applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM != 0 || applicationInfo.flags and ApplicationInfo.FLAG_UPDATED_SYSTEM_APP != 0) {
                return true
            }
        } catch (e: PackageManager.NameNotFoundException) {
            e.printStackTrace()
        }

        return false
    }
  1. 通过查看调用方应用程序:您可以在其他应用程序调用的方法中使用getCalledId 获取调用方的包名:

val callingApp = packageManager.getNameForUid(Binder.getCallingUid())