Ответ
Для безопасной передачи данных между приложениями с разной подписью используйте ContentProvider с проверкой разрешений или BroadcastReceiver с явным указанием пакета получателя.
ContentProvider с проверкой подписи:
<provider
android:name=".MyProvider"
android:authorities="com.example.provider"
android:exported="true"
android:permission="com.example.permission.READ_DATA" />
Проверя подпись перед доступом:
fun checkCallerSignature(context: Context): Boolean {
val callingUid = Binder.getCallingUid()
val packageManager = context.packageManager
val callerPackage = packageManager.getNameForUid(callingUid)
val callerSignature = packageManager.getPackageInfo(callerPackage, PackageManager.GET_SIGNATURES).signatures[0]
val trustedSignature = // захардкоженная подпись доверенного приложения
return callerSignature == trustedSignature
}
Broadcast с явным указанием пакета:
val intent = Intent("com.example.ACTION_DATA").apply {
setPackage("trusted.app.package")
putExtra("key", "secure_data")
}
sendBroadcast(intent)
Также можно использовать Binder с кастомным интерфейсом AIDL, но это сложнее в реализации.