So, my understanding of SyncAdapters is completely different (and I could be completely wrong). From Create a sync adapter | Connectivity | Android Developers
The sync adapter component in your app encapsulates the code for the tasks that transfer data between the device and a server. Based on the scheduling and triggers you provide in your app, the sync adapter framework runs the code in the sync adapter component.
From what I gather, SyncAdapters are like cron jobs + some sort of data transfer protocol (I have yet to see an example of that format). They provide asynchronous data transfer and updates between an app and a cloud service, not a means for apps to communicate with the Android system. It is what Nextcloud is currently using to sync and update files between the device and the Nextcloud instance.
The API call that DAVx5 and other apps use to interact with the address book is ContactsContract. That is what allows contacts to be created, read, updated, and deleted by third-party apps.
My suggestion is to eliminate the need to use CardDAV protocol on Android since it is non-native. Instead, use the native SyncAdapter API call (protocol?) to send the data to the server. Then, since Nextcloud uses CardDAV (and since it is FAR easier to implement the CardDAV protocol in PHP), create a ābridgeā between what is received by the server-side SyncAdapter listener and Nextcloud. That way, when data is received, it will be converted it to vCard format and sent to Nextcloud over CardDAV (via a localhost connection).
This keeps everything native to the respective platforms, would likely integrate much more seamlessly, and wouldnāt break any existing functionality. Let me know if Iāve misunderstood how these APIs and protocols work - since I only just learned about the ones on Android last week, itās entirely possible.