My thoughts on this:
If there is no more air in the database, you can't squeeze any air out...
Maybe you can have a look at the encrypted database with a viewer, you have the key (a challenge with this amount of data though). To be honest, I've never looked at a database encrypted with SQLCipher with a viewer.
I do have a few Android apps using SQL, but all without encryption.
However, I do have such an application under B4J. However, I don't use SQLCipher there (a paid library, unlike Android). I encrypt the data beforehand with AES and pack the encrypted string into the database.
I noticed the following, it may not apply to SQLCipher, but you could check it once:
If I encrypt a "SPACE" with AES, it becomes a longer string. As a result, there are no empty database entries in the database that could be eliminated using the VACUUM function. It is quite possible that this is different with SQLCipher. However, it should be easy to check.
I also have no explanation for the different file sizes. This may have something to do with different file systems, but such a large difference is very unlikely even with this explanation.
Another explanation would be if the database is decrypted on the PC and then re-encrypted on Android. This may cause the overhead you have noticed.
Edit:
VACUUM is not a complex function. You can do that with a programmed function too. Simply copy every dataset with data into a new database, while skipping empty records. VACUUM is doing nothing else. Then compare the filesize of the original and newly created database.
Additionally look here