An internal architecture that facilitates instant reuse of combinations of Android libraries
Presents selections of modular, organized and curated Android best coding practices
Offers a Vehicle to quickly kick off your journey with all that's needed to start writing your business logic
Android Getting Started page can feel like foreign lands to Java developers. AoW can be a cultural bridge that makes sound decisions for you and ease you into this new world.
Standard Android? MVC? MVVP? MVP? MVVM? VIPER? Flux? Clean? SOLID? Hybrid of all or some? Bring it with you! Have your own set of preferred libraries? Bring almost* all of them too.
*There might be some rare cases of allergic reactions when using AoW
There's a widening wedge between cross-platform frameworks lovers and those who tolerate nothing but the best of both worlds. If you're of the latter, then you admirably put stupendous time and resources to resolve idiosyncrasies on each platform. Though we can't promise a resolution at this point, a superior solution might be what you need.
Afraid you'll dislike some of our architectural decisions? Learning curve for you and your team makes you hesitant? Whatever it is, tinker! Step away from or closer to our approach. Easy customizing is great for AoW as it helps it slowly invade your existing large apps.
Frameworks such as Grails and Spring switched to Gradle and for good reasons. Important for our purposes is its dependency management and the simple plugin mechanism that eases modularization and organization.
On Android, the Gradle plugin's recent addition of Transform API is a sign of more and better support of deeper architectural changes on the platform for troublesome devs like us.
Hundreds of libraries were and are still being created and many became a quasi-standard in the industry. The passage of time has also cemented many best-practices to be found in libraries, bootstrap projects, templates, blogs, etc. Those gems can make apps (and life) much better.
Though not new, ProGuard's shrinking is worth mentioning as it "produces the best results for programs that use only small parts of their libraries." Regardless, to counter this and the 65K Dex nightmare we're considering a couple of alternatives. Drop us a line if you have an amazing idea.
Whether it's Buck, its Gradle cousin OkBuck, JRebel or Android's own Instant Run efforts, all of these are mitigating the horror of this problem. Almost all of these solutions use some type of incremental building that makes working with Android libraries specifically a non-issue.
The core plumbing module responsible for mechanisms that simplifies:
- Connecting all parts
- Inversion of control
- Extensibility
The Axle actively avoids decisions or code not essential to its mission. AoW defers mostly to Wheels for such functionalities.
An Android Library module that
- All AoW main parts depend on directly
- Runs in its own process
- Provides a tight feedback loop by hosting multiple components together
The natural repercussion of working with multitudes of simpler and interchangeable dependencies, each with a distinct API and varying functionalities, is more boilerplate and glue code. Wheels are just that; a community-approach to mitigate this legwork so AoW can maintain the modular structure we all like.
Nothing radical here. Chef Supermarket and Docker Hub are but a few examples of efforts with the same underlying concept.
An Android Library module which contains:
- At least 1 dependency on a community library or AoW Wheel (all combinations are acceptable)
- All glue code needed to make all contained libraries work instantly when this Wheel is added to an android app using AoW
Wheels creators are encouraged to submit them to AoW Store. A Wheel will be published as long it fulfill the definition above and it contains only public libraries. Wheels should also note if they are mutually exclusive with any other Wheels or libraries.
Gears are similar to Wheels except they contain no dependencies. Utilities, helper classes, config methods and classes adding or overriding AoW defaults, etc. all belong here.
It's encouraged to factor an application into a set of modular gears away from business logic. This enables reusing, sharing and improving gears. A project could instantiate an application object, initialize several Wheels, and register a collection of gears.
Conceptually, Gears are a bit similar to Flask's Blueprints.
A Gradle module
- No dependencies
- Cohesive: though this is best inferred from community usage, some overarching theme should explain the Gear to be useful. Think showcases, not garages.
Wheels are encouraged to be single purposed modules
For themers! Stay tuned.
The combination of an Axle and any number of Wheels and Gears results in a sleek AoW Vehicle.
AoW Vehicle is the most opinionated part of AoW as it aims to include all is needed to for production use. Though it does so by making many decisions, it does it through Wheels and Gears which can be easily replaced and removed. The aim is to provide a gentle guidance.
AoW Vehicle gently enforces encapsulation, an intuitive code structure, offers you abstraction layers for many aspects of Android, it does not missionize you. Wherever you want, you may fall back to the Android Way.
An single, empty Android Library module that acts as a container of dependencies of an Axle along with Wheels and Gears.
AoW Vehicle has many configuration values, with sensible defaults, and a few conventions when getting started.
Hardware constraints and unprecedented scenarios that Android developers deal with created a culture espousing nimbleness and heterogeneity. A framework, to succeed in this environment, must grow respectful of differences, actively seeking to relegate choices to their rightful makers.
Standalone libraries are fairly interchangeable. When a library is no longer suitable, for internal or external reasons, it's less of a headache to replace than rebuilding an entire module. True for an app, true for a framework.
For libraries to survive, they must ensure appealability to the widest audience possible and narrow or widen their scopes accordingly. More beautifully, they have to do so within the context of other competing, overlapping and complementary libraries.
A rapid development framework with an evolutionary bent that simplifies Android programming for its current developers and others interested but don't have the resources required for a steep learning curve. This new approach offers solutions for recurring issues in the regular development process