I've used Titanium Backup in the past, but it's sometimes wonky. The last time I tried to use it, migrating from stock-ish Android 4.2 to CyanogenMod's decidedly non-stock Android 4.3 build, it totally failed and I had to wipe and reinstall everything from scratch.