Is it 5.4 MB of pure code? i.e. 5 million characters, ~ 100,000 lines of code? Or is there a dataset or images included?
In the first case (that's a huge app) I would suggest putting some of the code in a separate package: one package for the low-level operations, one for the Shiny app which imports the first.
In the second, well depends how critical they are. Increasing compression levels can save a few %, but at the price of longer decompression times, decreasing image quality can sometimes save a lot with minimal visual difference. For datasets, it can make sense to store it in a separate package (CRAN should accept if you're not going to update it frequently), or to download it as needed...