I was refactoring my app using packaging by feature strategy and was going through this hackernoon article.

Since, my app uses all 4 android app components, third party libraries and several utility classes, I found few difficulties in placing packages like firebase, facebook, google analytics, broadcast receivers, ffmpeg, xmpp etc, therefore I created a reddit thread looking for what other android developers follow.

After searching best practices, and discussing with other developers. I came up with the following strategy for packaging my android application by features. This includes

data [remote(api) and local(database, preference)data] di [dependency injection(dagger)] common [facebook, google analytics, ffmpeg, xmpp] ui [feature, ui related stuff] service [firebase] receiver [boot] provider util constant

Note: Package naming follow singular, all lower case and no space convention.