#android
#contacts
#bug
how to fix contact sync not working on android
or contact sync says it need contacts permission
you will need USB debugging enabled and ADB on a laptop

enable usb debugging, connect to linux laptop, run:
adb logcat

(this will display the live logs)

on the phone try to sync (disable and enable contact sync) and follow the logs,
I got an error: com.google.android.gms did not have contact permission
gms is a hidden system app so it does not show up on the phone at all

ctrl-c on the laptop to stop the log, and now on the laptop run:
adb shell

in the shell, run: (with what ever package threw the error for you)
dumpsys package com.google.android.gms | grep -i false

I saw this at the bottom:
android.permission.WRITE_CONTACTS: granted=false, flags=[ USER_SET|GRANTED_BY_DEFAULT]
android.permission.GET_ACCOUNTS: granted=false, flags=[ USER_SET|GRANTED_BY_DEFAULT]

that's the problem, in adb shell I ran:

pm grant com.google.android.gms android.permission.WRITE_CONTACTS
pm grant com.google.android.gms android.permission.GET_ACCOUNTS

and sync was fixed.

(NOTE this deny permission did get copied to a new phone by account setup and it had the same problem!)

I hope this helps someone! this was a weird one!