Let me add some technical detail that might help people pick the right approach here 
##Understanding the Protocol Barrier##
The reason cross platform message sync is not straightforward comes down to protocols. Android (particularly newer versions) uses RCS (Rich Communication Services) which is the modern standard backed by the GSMA. Apple uses iMessage which is a proprietary protocol. These two do not talk to each other at the server level. Apple began supporting RCS in iOS 18, but this only affects new messages going forward, not existing iMessage history.
##The iTunes Backup Method in Detail##
When you back up your iPhone to a Mac using Finder or to a Windows PC using iTunes, a file called 3d0d7e5fb2ce288813306e4d4636395e047a3d28 (yes that ugly name) inside the backup folder is actually your sms.db SQLite file.
To access it you need to: make an unencrypted local backup of your iPhone (in Finder, uncheck Encrypt local backup), locate the backup folder (on Mac it is ~/Library/Application Support/MobileSync/Backup/), use a backup explorer tool to find and extract sms.db, open it in DB Browser for SQLite and query the message, chat, and handle tables.
The message table has columns: rowid, guid, text, date, is_from_me, handle_id. The date column uses Apple Epoch (seconds since Jan 1 2001, not Unix epoch) so you need to add 978307200 to convert to Unix timestamp.
##Converting to Android##
Once you have the data, map handle_id to phone numbers via the handle table, then serialize to the XML schema that SMS Backup and Restore expects. The root element is smses, each message is an sms element with to, from, date, body, and type attributes.
This gives you a clean, complete transfer with accurate timestamps 