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

Android AIDL在连接时检查客户端身份,android,aidl,Android,Aidl,我有一个作为服务的应用程序,第二个应用程序需要连接到它,所以我使用Android界面防御语言(AIDL)。 限制服务只接受特定应用程序的最佳方法是什么?客户端应用程序的身份应该以哪种方式发生 我知道客户端应该有一个.aidl文件的副本,但我需要更多的方法来检查谁正在连接到服务。有很多方法可以检查连接到aidl服务的应用程序的身份 通过检查应用程序的签名: 如果您只希望使用与您的应用相同的密钥签名的应用或可以连接到您的服务,请参阅下面的kotlin代码: 相同的钥匙标志和IsYeTM应用程序:

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


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

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

  • 通过检查应用程序的签名: 如果您只希望使用与您的应用相同的密钥签名的应用或可以连接到您的服务,请参阅下面的kotlin代码:
  • 相同的钥匙标志和IsYeTM应用程序:

     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
        }
    
  • 通过检查调用者应用程序:您可以在其他应用程序调用的方法中使用getCalledId检索调用者的包名:

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

    我应该在哪个方法中调用上述方法?@ramtin2C您可以创建一个类并放置这些方法。如果您对答案感到满意,请接受。问题是我们如何限制只从aidl服务器端的某些应用程序提供请求。我想你误解了这个问题。