https://github.com/theapache64/jaba
A simple CLI program to convert your android project's structure.
https://github.com/theapache64/jaba
Last synced: 25 days ago
JSON representation
A simple CLI program to convert your android project's structure.
- Host: GitHub
- URL: https://github.com/theapache64/jaba
- Owner: theapache64
- Created: 2019-04-08T04:33:10.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2020-04-19T18:50:14.000Z (about 6 years ago)
- Last Synced: 2026-03-28T01:33:10.906Z (about 1 month ago)
- Language: Kotlin
- Size: 40.8 MB
- Stars: 15
- Watchers: 1
- Forks: 4
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://www.youtube.com/watch?v=VZ8KAkvw9ck)
# 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. :)
## Install
```shell script
wget "https://raw.githubusercontent.com/theapache64/jaba/master/install.sh" -q --show-progress -O install.sh && sh install.sh && source ~/.bash_aliases
```
## 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 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
```