A flutter utility to easily create flavors in your flutter application

Overview

Flutter Flavorizr

A flutter utility to easily create flavors in your flutter application

Pub Dart CI Star on GitHub License: MIT

Getting Started

Let's start by setting up our environment in order to run Flutter Flavorizr

Prerequisites

Side note: this tool works better on a new and clean Flutter project. Since some processors reference some existing files and a specific base structure, it could be possible that running Flutter Flavorizr over an existing project could throw errors.

Before running Flutter Flavorizr, you must install the following software:

These prerequisites are needed to manipulate the iOS project and schemes. If you are interested in flavorizing Android only, you can skip this step. Keep in mind that you will have to use a custom instructions set with Android and Flutter processors only, otherwise an error will occur.

Installation

This package is intended to support development of Dart projects. In general, put it under dev_dependencies, in your pubspec.yaml:

dev_dependencies:
  flutter_flavorizr: ^1.0.11

You can install packages from the command line:

pub get

Create your flavors

Once all of the prerequisites have been installed and you have added flutter_flavorizr as a dev dependency, you have to edit your pubspec.yaml and define the flavors.

Example

Add a new key named flavorizr and define two sub-items: app and flavors. Under the flavors array you can define the name of the flavors, in our example apple and banana. For each flavor you have to specify the app name, the applicationId and the bundleId.

flavorizr:
  app:
    android:
      flavorDimensions: "flavor-type"
    ios:

  flavors:
    apple:
      app:
        name: "Apple App"

      android:
        applicationId: "com.example.apple"

      ios:
        bundleId: "com.example.apple"

    banana:
      app:
        name: "Banana App"

      android:
        applicationId: "com.example.banana"
      ios:
        bundleId: "com.example.banana"

Available fields

flavorizr

key type default required description
app Object true An object describing the general capabilities of an app
flavors Array true An array of items. Each of them describes a flavor configuration
instructions Array false An array of instructions to customize the flavorizr process
assetsUrl String https://github.com/AngeloAvv/flutter_flavorizr/releases/download/v1.0.11/assets.zip false A string containing the URL of the zip assets file. The default points to the current release
ide String false The IDE in which the app is being developed. Currently only vscode or idea
Available instructions
value category description
assets:download Miscellaneous Downloads the assets zip from the network
assets:extract Miscellaneous Extracts the downloaded zip in the project .tmp directory
assets:clean Miscellaneous Removes the assets from the project directory
android:buildGradle Android Adds the flavors to the Android build.gradle file
android:androidManifest Android Changes the reference of the app name in the AndroidManifest.xml
android:dummyAssets Android Generates some default icons for your custom flavors
flutter:flavors Flutter Creates the flutter flavor configuration file
flutter:app Flutter Creates the app.dart entry
flutter:pages Flutter Creates a set of default pages for the app
flutter:targets Flutter Creates a set of targets for each flavor instance
google:firebase Google Adds Google Firebase configurations for Android and iOS for each flavor
ide:config IDE Generates debugging configurations for each flavor of your IDE
ios:xcconfig iOS Creates a set of xcconfig files for each flavor and build configuration
ios:buildTargets iOS Creates a set of build targets for each flavor and build configuration
ios:schema iOS Creates a set of schemas for each flavor
ios:dummyAssets iOS Generates some default icons for your custom flavors
ios:plist iOS Updates the info.plist file
ios:launchScreen iOS Creates a set of launchscreens for each flavor

android (under app)

key type default required description
flavorDimensions String "flavor-type" false The value of the flavorDimensions in the android build.gradle file

ios (under app)

key type default required description
buildSettings Dictionary {} false An XCode build configuration dictionary XCode Build Settings

app (under flavorname)

key type default required description
name String true The name of the App

android (under flavorname)

key type default required description
applicationId String true The applicationId of the Android App
firebase Object false An object which contains a Firebase configuration
generateDummyAssets bool true false True if you want to generate dummy assets (icon set, strings, etc)

ios (under flavorname)

key type default required description
bundleId String true The bundleId of the iOS App
buildSettings Dictionary {} false A flavor-specific XCode build configuration dictionary XCode Build Settings
firebase Object false An object which contains a Firebase configuration
generateDummyAssets bool true false True if you want to generate dummy assets (xcassets, etc)

firebase

key type default required description
config String false The path to the Firebase configuration file (google-services.json for Android and GoogleService-Info.plist for iOS)

Usage

When you finished defining the flavorizr configuration, you can proceed by running the script with:

flutter pub run flutter_flavorizr

You can also run flutter_flavorizr with a custom set of processors by appending the -p (or --processors) param followed by the processor names separated by comma:

flutter pub run flutter_flavorizr -p <processor_1>,<processor_2>

Example

flutter pub run flutter_flavorizr -p assets:download
flutter pub run flutter_flavorizr -p assets:download,assets:extract

Run your flavors

Once the process has generated the flavors, you can run them by typing

flutter run --flavor <flavorName> -t lib/main-<flavorName>.dart

Example

flutter run --flavor apple -t lib/main-apple.dart
flutter run --flavor banana -t lib/main-banana.dart

Default processors set

By default, when you do not specify a custom set of processors by appending the -p (or --processors) param, a default processors set will be used:

  • assets:download
  • assets:extract
  • android:androidManifest
  • android:buildGradle
  • android:dummyAssets
  • flutter:flavors
  • flutter:app
  • flutter:pages
  • flutter:targets
  • ios:xcconfig
  • ios:buildTargets
  • ios:schema
  • ios:dummyAssets
  • ios:plist
  • ios:launchScreen
  • google:firebase
  • assets:clean
  • ide:config

Customize your app

Flutter_flavorizr creates different dart files in the lib folder. In the flavors.dart file we have the F class which contains all of our customizations.

class F {
  static Flavor appFlavor;

  static String get title {
    switch (appFlavor) {
      case Flavor.APPLE:
        return 'Apple App';
      case Flavor.BANANA:
        return 'Banana App';
      default:
        return 'title';
    }
  }

}

The process creates a simple title customization: a switch which checks the current appFlavor (defined in our app starting point) and returns the correct value. Here you can write whatever you want, you can create your custom app color palette, differentiate the URL action of a button, and so on.

If you are wondering how to use these getters, you can find an example under the pages folder: in the my_home_page.dart file, the page shown after the launch of the app, we can see a clear reference on the title getter defined in the F class.

Side notes

I haven't found yet a good groovy parser to guarantee the idempotency of the AndroidBuildGradleProcessor.
The only way to keep track of the autogenerated flavorDimensions is to mark up the beginning and the end of the section with magic comments.
Please do not erase these comments otherwise you will break down the AndroidBuildGradleProcessor.

Third party services

Google Firebase

In order to flavorize your project and enable Firebase in your flavor
you have to define a firebase object below each OS flavor. Under the
firebase object you must define the config path of the google-services.json
(if you are under Android configuration) or GoogleService-Info.plist
(if you are under iOS configuration).

As you can see in the example below, we added the path accordingly

flavorizr:
  app:
    android:
      flavorDimensions: "flavor-type"
    ios:

  flavors:
    apple:
      app:
        name: "Apple App"

      android:
        applicationId: "com.example.apple"
        firebase:
          config: ".firebase/apple/google-services.json"

      ios:
        bundleId: "com.example.apple"
        firebase:
          config: ".firebase/apple/GoogleService-Info.plist"

    banana:
      app:
        name: "Banana App"
        
      android:
        applicationId: "com.example.banana"
        firebase:
          config: ".firebase/banana/google-services.json"
      ios:
        bundleId: "com.example.banana"
        firebase:
          config: ".firebase/banana/GoogleService-Info.plist"

Further developments

  • Let the user define its custom set of available instructions.

Please feel free to submit new issues if you encounter some problems with it.

License

Flutter Flavorizr is available under the MIT license. See the LICENSE file for more info.

Comments
  • [iOS] unable to load contents of xcfilelist

    [iOS] unable to load contents of xcfilelist

    Hello !

    I tried to flavorize a small flutter project with two flavors, everything seems to work for Android, but I am unable to launch the app in the iOS Emulator.

    I am getting these errors : error: Unable to load contents of file list: '/Target Support Files/Pods-Runner/Pods-Runner-frameworks-Debug *TARGET*-input-files.xcfilelist' (in target 'Runner' from project 'Runner')

    error: Unable to load contents of file list: '/Target Support Files/Pods-Runner/Pods-Runner-frameworks-Debug *TARGET*-output-files.xcfilelist' (in target 'Runner' from project 'Runner')

    I tried to clean the project, the pods and to rebuild everything without success. The file /ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks-Debug *TARGET*-input-files.xcfilelist seems to exists as I can see its content.

    I didn't find any issue related to this kind of problem, could you help me understand what is going on ?

    I am using Flutter 1.20.1, on macOS. Ruby, Gem and Xcodeproj are all up to date.

    help wanted 
    opened by mduruisseau 24
  • Custom Icon and splash screen

    Custom Icon and splash screen

    It would be awesome to add dynamic icon and splash screen support as well 🎉

    https://pub.dev/packages/flutter_native_splash https://pub.dev/packages/flutter_launcher_icons

    flavorizr:
      flavors:
        apple:
          app:
            name: "Apple App"
    
          android:
            applicationId: "com.example.apple"
            icon: "assets/images/apple_icon.png"
            firebase:
              config: ".firebase/apple/google-services.json"
    
          ios:
            bundleId: "com.example.apple"
            icon: "assets/images/apple_icon.png"
            firebase:
              config: ".firebase/apple/GoogleService-Info.plist"
    
    
    enhancement 
    opened by sooxt98 10
  • Archiving not working correctly

    Archiving not working correctly

    Hello @AngeloAvv, awesome package! it is very useful!

    I configured correctly in android and i am able to create two different apk with different identifiers. But the same thing is not happening on ios. if i try to archive with apple scheme, it will arhive successfuly but he is taking the identifiers of banana. how can i create 2 different archive for banana and apple?

    opened by Toq97 8
  • Build flavors with different Firebase projects

    Build flavors with different Firebase projects

    Awesome package! @AngeloAvv , here's my suggestion for multiple firebase integration.

    flavorizr:
      flavors:
        prod:
          firebase_config: creds/GoogleService-Info_Production.plist
          app_id: "com.example.prod"
        dev:
          firebase_config: creds/GoogleService-Info_Development.plist
          app_id: "com.example.dev"
    

    with this config, the preprocessor can directly copy the creds plist to both ios and android path during build. and also i wish that there's a global app_id that can configure for both of the platform, thanks.

    opened by sooxt98 8
  • Build configuration on iOS uses space instead of -

    Build configuration on iOS uses space instead of -

    The build script adds a space to the build configuration name, instead of a -

    Flutter expects a build configuration named Debug-#SCHEME_NAME

    Manually changing the name in Xcode fixes this. I have opened a PR to fix this.

    https://github.com/AngeloAvv/flutter_flavorizr/pull/21

    bug 
    opened by vixez 8
  • Flavors file doesn't get updated with environment variables

    Flavors file doesn't get updated with environment variables

    Hello, I am trying to run the flutter pub run flutter_flavorizr command, when having this in the pubspec.yaml

    flavorizr:
      app:
        android:
          flavorDimensions: "flavor-type"
        ios:
    
      flavors:
        dev:
          app:
            name: "App Name"
    
          android:
            applicationId: "com.app.name"
            resValues:
              places_api_key:
                type: "string"
                value: "some string"
    

    It seems as though the flavors.dart doesn't get updated, but I might be setting up something wrong

    Can anyone assist?

    opened by dorsamet 7
  • Issue with Flutter 1.20 channel beta and xml plugin.

    Issue with Flutter 1.20 channel beta and xml plugin.

    I have upgraded my flutter version to 1.20 channel beta, and I had to upgrade flutter_svg plugin to 0.18.0 to resolve the error.

    Then that plugin flutter_svg comes with another plugin xml whose version is 4.3.0. But yours has xml version with version ^3.6.1 which cause pub get to fail with the following conflict.

    Because no versions of flutter_flavorizr match >1.0.3 <2.0.0 and flutter_flavorizr 1.0.3 depends on xml ^3.6.1, flutter_flavorizr ^1.0.3 requires xml ^3.6.1. And because flutter_svg >=0.18.0 depends on xml ^4.1.0, flutter_flavorizr ^1.0.3 is incompatible with flutter_svg >=0.18.0. So, because MyApp depends on both flutter_svg ^0.18.0 and flutter_flavorizr ^1.0.3, version solving failed. pub get failed (1; So, because MyApp depends on both flutter_svg ^0.18.0 and flutter_flavorizr ^1.0.3, version solving failed.)

    Can you please urgently update xml plugin to 4.3.0 and make a hot-fix release?

    opened by bismarabia 7
  • Firebase Crashlytics just doesnt trigger errors

    Firebase Crashlytics just doesnt trigger errors

    Hey @AngeloAvv ,

    I've researched a lot and didn't see anything about it so Im opening the issue.

    I've deleted android and ios folder, then run flutter create -i swift -a kotlin ., then; run flutter pub run flutter_flavorizr

    using this pubspec config:

    flavorizr:
      ide: "vscode"
      flavors:
        dev:
          app:
            name: "App Name"
          android:
            applicationId: "com.example.appname"
            icon: "assets/icons/onemob-icon.png"
            firebase:
              config: ".firebase/development/google-services.json"
          ios:
            bundleId: "com.onemob.mobiledevelopment"
            icon: "assets/icons/onemob-icon.png"
            firebase:
              config: ".firebase/development/GoogleService-Info.plist"
        production:
          app:
            name: "App Name"
          android:
            applicationId: "com.example.appname"
            icon: "assets/icons/onemob-icon.png"
            firebase:
              config: ".firebase/production/google-services.json"
          ios:
            bundleId: "com.onemob.mobile"
            icon: "assets/icons/onemob-icon.png"
            firebase:
              config: ".firebase/production/GoogleService-Info.plist"
    

    Then I run an exception but nothing is registered to crashlytics. I've checked (with breakpoints) and it seems that all is correctly set in the flutter part... correct firebase settings. But for some reason, no crashs are reported on firebase.

    Do you have any idea of what might be happening?

    Also, should I run flutterfire?? I did before but I think it got pretty messy and I've decided to start over, as I said, by cleaning everything.

    opened by Hamdan85 6
  • Permissions issue when running flutter_flavorizr -p command.

    Permissions issue when running flutter_flavorizr -p command.

    Hello,

    This package is great, thanks for creating & maintaining it.

    I wanted to post this issue here because I'm trying to debug some weird behaviour in my project. Whenever I run the flavorizr command flutter pub run flutter_flavorizr -p assets:download,assets:extract,google:firebase,android:buildGradle,android:androidManifest,ios:xcconfig,ios:buildTargets,ios:schema,ios:plist,assets:clean I must manually create some of the required directories. For instance, I must run

    • mkdir .tmp
    • mkdir .tmp/ios
    • mkdir .tmp/scripts
    • mkdir .tmp/scripts/ios/
    • mkdir android/app/src/[flavor]/res/mipmap-mdpi/
    • mkdir android/app/src/[flavor]/res
    • mkdir android/app/src/[flavor]/res/mipmap-mdpi/
    • mkdir android/app/src/[flavor]/res/mipmap-hdpi
    • mkdir android/app/src/[flavor]/res/mipmap-xhdpi
    • mkdir android/app/src/[flavor]/res/mipmap-xxhdpi
    • mkdir android/app/src/[flavor]/res/mipmap-xxxhdpi
    • mkdir ios/Runner/Assets.xcassets/[flavor]AppIcon.appiconset/

    before I can run the flutter_flavorizr -p because it will give me a file not found error. E.g. FileSystemException: Cannot open file, path = 'ios/Runner/Assets.xcassets/[flavor]AppIcon.appiconset/[email protected]' (OS Error: No such file or directory, errno = 2)

    Is this an issue with my system? Or with the package? I can't run flutter pub run flutter_flavorizr -p with sudo as it says it's unsafe, so I'm not sure how to fix is.

    System info: Device: Mac Mini OS: macOS Monterey 12.5.1 21G83 Flutter: Channel stable, 3.0.5, on macOS 12.5.1 21G83 darwin-x64, locale en-AU Flavorizr: ^2.1.4

    Thanks.

    opened by Scott-J-McMullan 6
  • Multiple commands produce GoogleService-Info.plist

    Multiple commands produce GoogleService-Info.plist

    Hi, I have 2 different flavors with different firebase configs. It works flawlessly in Android.

    But I can't able to build the app in Xcode as it throws Multiple commands produce GoogleService-Info.plist error. Heres the error

    Multiple commands produce '/Users/rameshvel/Library/Developer/Xcode/DerivedData/Runner-gqmldwjuahwuwkgijmfokisjscam/Build/Products/Debug-AppleApp-iphonesimulator/Runner.app/GoogleService-Info.plist':
    1) Target 'Runner' (project 'Runner') has copy command from '/Users/rameshvel/work/storeJam/modernkirana/apps/customer/ios/Runner/OrangeApp/GoogleService-Info.plist' to '/Users/rameshvel/Library/Developer/Xcode/DerivedData/Runner-gqmldwjuahwuwkgijmfokisjscam/Build/Products/Debug-AppleApp-iphonesimulator/Runner.app/GoogleService-Info.plist'
    2) Target 'Runner' (project 'Runner') has copy command from '/Users/rameshvel/work/storeJam/modernkirana/apps/customer/ios/Runner/AppleApp/GoogleService-Info.plist' to '/Users/rameshvel/Library/Developer/Xcode/DerivedData/Runner-gqmldwjuahwuwkgijmfokisjscam/Build/Products/Debug-AppleApp-iphonesimulator/Runner.app/GoogleService-Info.plist'
    
    

    A quick look at the copy bundle resource in the build phase revealed that flutter_flavorizr added a copy phase for GoogleService-Info.plist for both the flavors.

    I know I can remove just a unused flavor and add it back when I am building that one. Is there a simple way?

    opened by Rameshv 6
  • Project does not build in ios

    Project does not build in ios

    Hello,

    I create 2 flavors, and added just this dependency:

      firebase_core: "^0.5.0"
      cloud_firestore: ^0.14.0+2
    

    When i try to run, i get this error.

    flutter run --flavor dev -t lib/main-dev.dart

        diff: /Podfile.lock: No such file or directory
        diff: /Manifest.lock: No such file or directory
        error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
        note: Using new build system
        note: Planning build
        note: Constructing build description
    

    When i run just flutter run works normally.

    opened by lucasdidur 6
  • [Feature Request] Different Associated Domains for different flavors

    [Feature Request] Different Associated Domains for different flavors

    My app supports universal app links on iOS and app links on Android. I'm using flavors to create two separate apps and each one is using a separate domain for deeplinking.

    Build settings support pointing to different files for Code Signing Entitlements.

    I can specify it in ios:variables, but then I have to create a new file for each flavor. It would be great to have support for just specifying the list of associated domains in the flavorizr config.

    [UPDATE] For those reading, another option is to use config settings. Still need to manually create the file.

    ios:
      bundleId: "com.example.mobile.dev"
      generateDummyAssets: false
      buildSettings:
        CODE_SIGN_ENTITLEMENTS: PATH_TO_FILE
    

    And use string resources for Android

    opened by kvenn 0
  • Build failed after adding widget extension to project targets

    Build failed after adding widget extension to project targets

    Hello!

    I've the following error after adding widget extension to project targets in Xcode:

    image

    Could not build the precompiled application for the device.
    Error (Xcode): 'Flutter/Flutter.h' file not found
    /Users/Documents/project/ios/Runner/GeneratedPluginRegistrant.h:9:8
    
    Error (Xcode): failed to emit precompiled header '/Users/silantyevnikolay/Library/Developer/Xcode/DerivedData/Runner-anzfeujngjowppasdsounxstfsnn/Build/Intermediates.noindex/PrecompiledHeaders/Runner-Bridging-Header-swift_340HJIQUP00U2-clang_2H0A2ME3M3335.pch'
     for bridging header 
     '/Users/Documents/project/ios/Runner/Runner-Bridging-Header.h'
    

    It's work well if I choosing Runner scheme, but build failed when using schemes created by plugin.

    The launch logs are attached below.

    logs.txt

    Finds the same issue https://github.com/flutter/flutter/issues/103977

    opened by umbrellait-nikolay-silantyev 10
  • use lowerCamelCase for flavor names

    use lowerCamelCase for flavor names

    Currently, flavorizr generates flavors in screaming caps:

    enum Flavor {
      DEV,
      PROD,
    }
    

    While recommended names for constants are in lowerCamelCase:

    enum Flavor {
      dev,
      prod,
    }
    

    Lint rule: https://dart-lang.github.io/linter/lints/constant_identifier_names.html

    enhancement 
    opened by subzero911 0
  • Flavor doesn't work when running native Android app.

    Flavor doesn't work when running native Android app.

    When I select devDebug build variant for native Android app from Android Studio, I realize that main.dart file is launched instead of main_dev.dart file.

    opened by lngyeen 0
Owner
Angelo Cassano
A perfectionist. Software engineer and IT passionate.
Angelo Cassano
A simple Flutter / Dart Utility class for converting complex objects to uri and query string

A simple Flutter / Dart Utility class for converting complex or nested objects to uri and query strings you can follow the the article on how this cla

Opata Joshua 5 Sep 7, 2022
A Dart testing utility for asserting that some code emits a compilation error.

A Dart testing utility for asserting that some code emits a compilation error.

Remi Rousselet 32 Dec 11, 2022
CLI utility to manage MC Server installations

CLI utility to manage MC server installations. Features Install required JDKs Download server files Generate start scripts (with optimized JVM flags)

Michael Rittmeister 14 Nov 18, 2022
Utility to process H264 profile-level-id values

h264_profile_level_id Dart utility to process H264 profile-level-id values based on Google's libwebrtc C++ code. API import 'package:h264_profile_leve

Ibragim Abbasov 2 Apr 22, 2022
Uproot(uprt) is a multi-platform (Windows, MacOs, and Linux) command line utility written in Dart to convert a router's DHCP IP Reservations between routers

UPROOT Uproot(uprt) is a multi-platform (Windows, MacOs, and Linux) command line utility written in Dart to convert a router's DHCP IP Reservations be

GeekVisit 73 Jan 1, 2023
A utility library to automate mobile emulators.

emulators A utility library to automate mobile emulators. Can be used to automate screenshots on multiple devices. Example project https://github.com/

Tim 21 Nov 13, 2022
A Pure Dart Utility library that checks for an Active Internet connection

This Code comes from https://github.com/komapeb/data_connection_checker * ?? Internet Connection Checker A Pure Dart Utility library that checks for a

Rounak Tadvi 61 Nov 25, 2022
Contains utility functions and classes in the style of dart:collection to make working with collections easier

The collection package for Dart contains a number of separate libraries with utility functions and classes that makes working with collections easier.

Dart 273 Dec 27, 2022
Quiver is a set of utility libraries for Dart that makes using many Dart libraries easier and more convenient, or adds additional functionality.

Quiver is a set of utility libraries for Dart that makes using many Dart libraries easier and more convenient, or adds additional functionality.

Google 905 Jan 2, 2023
Integrate easily the Paygate Global Platform into your Flutter app

Integrate easily the Paygate Global Platform into your Flutter app Features Implement payment with the Paygate Global Platform. Support for two paymen

Kokou AGBAVON 7 Dec 15, 2022
A package that lets you include a cool, nice looking and validated Password TextFormField in your app to enhance user experience. The package is fully & easily modifiable.

A package that lets you include a cool, nice looking and validated Password TextFormField in your app to enhance user experience. The package is fully

Muhammad Hamza 20 Jun 7, 2022
Easily swap Flutter web renderers at runtime

renderer_switcher Swap Web Renderers in a Flutter Web app at runtime. Installation To use this plugin, add renderer_switcher as a dependency in your p

Wilson Wilson 12 Oct 21, 2022
A Flutter library to make Rest API clients more easily. Inspired by Java Feing.

A Flutter library to make Rest API clients more easily. Inspired by Java Feing. Features Facilitated JSON encode and decode using common interfaces. F

null 2 Mar 15, 2022
A flutter application , that create dynamic forms from json data

checktyper A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if th

DotCoder 1 Aug 23, 2022
A Dart package to web scraping data from websites easily and faster using less code lines.

Chaleno A flutter package to webscraping data from websites This package contains a set of high-level functions that make it easy to webscrap websites

António Nicolau 30 Dec 29, 2022
Volt is a wrapper over the Revolt API for easily writing bots using the Dart language.

Volt is a wrapper over the Revolt API for easily writing bots using the Dart language. It is currently in active development so not all of the functionality has yet been implemented.

null 8 Dec 13, 2022
A tool to easily install the Android SDK command-line and platform tools.

gibadb A tool to easily install the Android SDK command-line and platform tools. For developers: This README describes the CLI tool that ships with th

null 3 Sep 22, 2022
The diozz package helps you to deal with APIs easily and speed up the process of writing code.

Diozz The diozz package helps you to deal with APIs easily and speed up the process of writing code. Installation Diozz Use that command in the termin

Mohamed Abu.elezz 4 Nov 13, 2022