Skip to content
A simple CLI program to convert your android project's structure.
Kotlin Shell
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea
META-INF
assets
lib
src
.gitignore
README.md
install.sh
jaba.iml
jaba.jar
jabroid
samplefile.txt
youtube_banner.jpg

README.md

IMAGE

Jaba

A simple cli tool to convert your stock android project structure to MVVM architectural pattern. It also includes templates for splash and login screen. Basically, jaba is a time saver. :)

Download

Clone or download this repo and set an alias to the jaba.jar file

alias jaba='java -jar /path/to/jaba/jaba.jar'

Usage

Simply run jaba in an android studio project, and you'll be prompted with an interactive shell.


Project : MyAwesomeProject
Package : com.theapache64.myawesomeproject

Choose architecture
1) MVVM
2) MVP
Response :1
Do you need google fonts? (y/N): y
Response : yes
Do you need network module ? (y/N): y
Response : yes
Enter base url : (empty to use default jaba api): http://myapi.com/api/v1/
Do you need splash screen? (y/N): y
Response : yes
Do you need login screen? (y/N): y
Response : yes
⏳ Creating dirs...
✔️ Done
⏳ Modifying app.gradle
✔️ Done
⏳ Fixing XML style issue...
✔️ Done
⏳ Creating App.kt ...
✔️ Done
Modifying manifest file...
✔️ Done
⏳ Creating MainViewModel.kt ...
✔️ Done
⏳ Modifying MainActivity.kt ...
✔️ Done
⏳ Adding data binding to main layout file...
✔️ Done
⏳ Updating content_main.xml to support data binding
✔️ Done
⏳ Creating dagger activity builder...
✔️ Done
⏳ Creating dagger AppComponent.kt ...
✔️ Done
⏳ Creating network module...
✔️ Done
⏳ Creating ApiInterface.kt ...
✔️ Done
⏳ Creating LogInRequest.kt ...
✔️ Done
⏳ Creating LogInResponse.kt ...
✔️ Done
⏳ Creating UserPrefRepository.kt ...
✔️ Done
⏳ Creating LogInActivity.kt ...
✔️ Done
⏳ Creating LogInViewModel.kt ...
✔️ Done
⏳ Creating LogInHandler.kt ...
✔️ Done
⏳ Creating AuthRepository.kt ...
✔️ Done
⏳ Creating login layout...
✔️ Done
⏳ Creating login related icons
✔️ Done
⏳ Adding login strings to strings.xml
✔️ Done
⏳ Modifying menu_main.xml file
✔️ Done
⏳ Creating dagger AppModule.kt ...
✔️ Done
⏳ Creating dagger ViewModelModule.kt ...
✔️ Done
⏳ Creating SplashViewModel.kt
✔️ Done
⏳ Creating SplashActivity.kt ...
✔️ Done
⏳ Modifying styles.xml to support splash theme
✔️ Done
⏳ Creating splash_bg.xml ...
✔️ Done
⏳ Creating ids.xml ...
✔️ Done
⏳ Creating logo icon...
✔️ Done
⏳ Adding color constants to colors.xml
✔️ Done
⏳ Finishing project setup...
✔️ Done

Activity Support

Once you created a new activity, you'll want to create ViewModel, Handler and integrate them with the DataBinding, Activity and with Dagger. To solve this mundane task, you may use the pas flag to Provide Activity Support

Syntax

jaba -pas COMPONENT_NAME

For example,If you want activity support for SomeActivity, you may use below code

jaba -pas SomeActivity

Then it'll do the following

Creation

  • Create ViewModel named SomeViewModel with dagger injection
  • Create Handler named SomeHandler

Integration

  • Integrate SomeViewModel with SomeActivity with dagger-viewmodel-factory
  • Implement SomeHandler in SomeActivity
  • Integrate SomeViewModel and SomeHandler with activity_some.xml (using data binding)

Finalization

  • Add SomeActivity builder in ActivityBuilderModule

  • Add SomeViewModel in ViewModelModule

Known Issues

Code Alignment

Once the code generation has been done, some files will have some alignment issues. To fix this, you may do Code Refactor

  • Click on the Project panel
  • Click on app
  • Press Control + Alt + L (linux)
  • Check Optimize Imports, Rearrange entries and Cleanup code
  • Click 'Run'

This will solve all alignment issues as well as optimization of imports.

Project Structure

Before

.
├── MainActivity.kt

After

.
├── App.kt
├── data
│   ├── local
│   ├── remote
│   │   ├── ApiInterface.kt
│   │   └── login
│   │       ├── LogInRequest.kt
│   │       └── LogInResponse.kt
│   └── repositories
│       ├── AuthRepository.kt
│       └── UserPrefRepository.kt
├── di
│   ├── components
│   │   └── AppComponent.kt
│   └── modules
│       ├── ActivitiesBuilderModule.kt
│       ├── AppModule.kt
│       ├── NetworkModule.kt
│       └── ViewModelModule.kt
├── models
├── ui
│   └── activities
│       ├── login
│       │   ├── LogInActivity.kt
│       │   ├── LogInHandler.kt
│       │   └── LogInViewModel.kt
│       ├── main
│       │   ├── MainActivity.kt
│       │   └── MainViewModel.kt
│       └── splash
│           ├── SplashActivity.kt
│           └── SplashViewModel.kt
└── utils

You can’t perform that action at this time.