Organizing your Source Files - kmolo/android_guides GitHub Wiki
Overview
Android applications should always be neatly organized with a clear folder structure that makes your code easy to read.
There are several best practices for organising your app's package structure.
Organize packages by category
The way to do this is to group things together by their category. Each component goes to the corresponding package:
com.example.myapp.activities
- Contains all activitiescom.example.myapp.adapters
- Contains all custom adapterscom.example.myapp.models
- Contains all our data modelscom.example.myapp.fragments
- Contains all fragmentscom.example.myapp.helpers
- Contains all helpers (custom code that supports the app).com.example.myapp.interfaces
- Contains all interfaces
Keeping these folders in each app means that code is logically organized and scanning the code is a pleasant experience.
Organize packages by application features
Package-by-feature uses packages to reflect the feature set. Consider the following package structure:
com.example.myapp.service.*
- Is a subpackage for all background related service packages/classescom.example.myapp.ui.*
- Is a subpackage for all UI-related packages/classescom.example.myapp.ui.mainscreen
- Contains classes related to some app's Main Screencom.example.myapp.ui.detailsscreen
- Contains classes related to some app's Item Details Screen
This feature allows you to place DetailsActivity
, DetailsFragment
, DetailsListAdapter
, DetailsItemModel
in one package, which provides comfortable navigation when you're working on "item details" feature.
DetailsListAdapter
and DetailsItemModel
classes and/or their properties can be made package-private, and thus not exposed outside of the package. Within the package you may access their properties directly without generating tons of boilerplate "setter" methods.
This can make object creation really simple and intuitive, while objects remain immutable outside the package.
##Conclusion
It is up to you to decide which of the aforementioned approaches suits your project best.
However, in general Java programming, packaging apps by feature is considered preferable and makes a lot of sense.