Pleasant Android application development

Related tags

Kotlin android kotlin
Overview

obsolete JetBrains project Download GitHub license

Anko logo

⚠️ Anko is deprecated. Please see this page for more information.


Anko is a Kotlin library which makes Android application development faster and easier. It makes your code clean and easy to read, and lets you forget about rough edges of the Android SDK for Java.

Anko consists of several parts:

  • Anko Commons: a lightweight library full of helpers for intents, dialogs, logging and so on;
  • Anko Layouts: a fast and type-safe way to write dynamic Android layouts;
  • Anko SQLite: a query DSL and parser collection for Android SQLite;
  • Anko Coroutines: utilities based on the kotlinx.coroutines library.

Anko Commons

Anko Commons is a "toolbox" for Kotlin Android developer. The library contains a lot of helpers for Android SDK, including, but not limited to:

  • Intents (wiki);
  • Dialogs and toasts (wiki);
  • Logging (wiki);
  • Resources and dimensions (wiki).

Anko Layouts (wiki)

Anko Layouts is a DSL for writing dynamic Android layouts. Here is a simple UI written with Anko DSL:

verticalLayout {
    val name = editText()
    button("Say Hello") {
        onClick { toast("Hello, ${name.text}!") }
    }
}

The code above creates a button inside a LinearLayout and attaches an OnClickListener to that button. Moreover, onClick accepts a suspend lambda, so you can write your asynchronous code right inside the listener!

Note that this is the complete layout code. No XML is required!

Anko has a DSL for ConstraintLayout since v0.10.4

Hello world

There is also a plugin for Android Studio that supports previewing Anko DSL layouts.

Anko SQLite (wiki)

Have you ever been tired of parsing SQLite query results using Android cursors? Anko SQLite provides lots of helpers to simplify working with SQLite databases.

For example, here is how you can fetch the list of users with a particular name:

fun getUsers(db: ManagedSQLiteOpenHelper): List<User> = db.use {
    db.select("Users")
            .whereSimple("family_name = ?", "John")
            .doExec()
            .parseList(UserParser)
}

Anko Coroutines (wiki)

Anko Coroutines is based on the kotlinx.coroutines library and provides:

  • bg() function that executes your code in a common pool.
  • asReference() function which creates a weak reference wrapper. By default, a coroutine holds references to captured objects until it is finished or canceled. If your asynchronous framework does not support cancellation, the values you use inside the asynchronous block can be leaked. asReference() protects you from this.

Using Anko

Gradle-based project

Anko has a meta-dependency which plugs in all available features (including Commons, Layouts, SQLite) into your project at once:

dependencies {
    implementation "org.jetbrains.anko:anko:$anko_version"
}

Make sure that you have the $anko_version settled in your gradle file at the project level:

ext.anko_version='0.10.8'

If you only need some of the features, you can reference any of Anko's parts:

dependencies {
    // Anko Commons
    implementation "org.jetbrains.anko:anko-commons:$anko_version"

    // Anko Layouts
    implementation "org.jetbrains.anko:anko-sdk25:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available
    implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"

    // Coroutine listeners for Anko Layouts
    implementation "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"
    implementation "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"

    // Anko SQLite
    implementation "org.jetbrains.anko:anko-sqlite:$anko_version"
}

There are also a number of artifacts for the Android support libraries:

dependencies {
    // Appcompat-v7 (only Anko Commons)
    implementation "org.jetbrains.anko:anko-appcompat-v7-commons:$anko_version"

    // Appcompat-v7 (Anko Layouts)
    implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
    implementation "org.jetbrains.anko:anko-coroutines:$anko_version"

    // CardView-v7
    implementation "org.jetbrains.anko:anko-cardview-v7:$anko_version"

    // Design
    implementation "org.jetbrains.anko:anko-design:$anko_version"
    implementation "org.jetbrains.anko:anko-design-coroutines:$anko_version"

    // GridLayout-v7
    implementation "org.jetbrains.anko:anko-gridlayout-v7:$anko_version"

    // Percent
    implementation "org.jetbrains.anko:anko-percent:$anko_version"

    // RecyclerView-v7
    implementation "org.jetbrains.anko:anko-recyclerview-v7:$anko_version"
    implementation "org.jetbrains.anko:anko-recyclerview-v7-coroutines:$anko_version"

    // Support-v4 (only Anko Commons)
    implementation "org.jetbrains.anko:anko-support-v4-commons:$anko_version"

    // Support-v4 (Anko Layouts)
    implementation "org.jetbrains.anko:anko-support-v4:$anko_version"

    // ConstraintLayout
    implementation "org.jetbrains.anko:anko-constraint-layout:$anko_version"
}

There is an example project showing how to include Anko library into your Android Gradle project.

IntelliJ IDEA project

If your project is not based on Gradle, just attach the required JARs from the jcenter repository as the library dependencies and that's it.

Contributing

The best way to submit a patch is to send us a pull request. Before submitting the pull request, make sure all existing tests are passing, and add the new test if it is required.

If you want to add new functionality, please file a new proposal issue first to make sure that it is not in progress already. If you have any questions, feel free to create a question issue.

Instructions for building Anko are available in the Wiki.

Comments
  • Anko DSL Preview for Android Studio 2.2

    Anko DSL Preview for Android Studio 2.2

    The Layout Preview panel was completely changed in Android Studio 2.2, so the current DSL Preview plugin implementation became incompatible.

    The sad fact is that all contributed hooks are gone. Moreover, the source code of Android Studio 2.2 is not available until release.

    bug IDE 
    opened by yanex 42
  • Koan and MPAndroidChart together

    Koan and MPAndroidChart together

    Hello @yanex,

    I would like use koan and MPAndroidChart together because a dsl it's very good way for me. But I don't know how can I use a several code constructions. For example exists a code https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/LineChartActivity1.java#L62 but I cannot use this construction in my code. Also I would like use like ... { data = data }... instead of ... { setData(data) } ... and also the same in similar cases. This is my repository https://github.com/xgrommx/KoanMPAndroidChartExample/blob/master/app/src/main/kotlin/com/gromm/koanexample/MainActivity.kt#L39

    question fixed 
    opened by xgrommx 16
  • Please update repo to v0.8

    Please update repo to v0.8

    Hi all. I updated the koltin plugin and needed to update anko as well to reflect the changes. However, v0.8 is not yet uploaded. Please upload it thx allot. Cheers. And awesome library/language, amaesing.

    question fixed 
    opened by greenspand 15
  • Anko support plugin throw exception in Android Studio 3.1.

    Anko support plugin throw exception in Android Studio 3.1.

    When I started Android Layout Preview on the following code block, Anko support plugin throw exception:

    code

    package io.github.alishir.salamandroid
    
    import org.jetbrains.anko.*
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.view.View
    import org.jetbrains.anko.sdk25.coroutines.onClick
    
    class MainActivityUI : AnkoComponent<MainActivity> {
        override fun createView(ui: AnkoContext<MainActivity>): View = with(ui){
            verticalLayout {
                padding = dip(30)
                editText {
                    hint = "Name"
                    textSize = 24f
                }
                editText {
                    hint = "Password"
                    textSize = 24f
                }
                button("Login") {
                    onClick { text = "Gholi" }
                    textSize = 26f
                }
            }
        }
    }
    
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            MainActivityUI().setContentView(this)
        }
    }
    
    

    exception

    org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.<init>(Lorg/jetbrains/kotlin/resolve/BindingContext;Lorg/jetbrains/kotlin/codegen/ClassBuilderMode;Lorg/jetbrains/kotlin/codegen/state/IncompatibleClassTracker;Ljava/lang/String;ZZ)V
    java.lang.NoSuchMethodError: org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.<init>(Lorg/jetbrains/kotlin/resolve/BindingContext;Lorg/jetbrains/kotlin/codegen/ClassBuilderMode;Lorg/jetbrains/kotlin/codegen/state/IncompatibleClassTracker;Ljava/lang/String;ZZ)V
    	at org.jetbrains.kotlin.android.dslpreview.DslPreviewClassResolver$Companion.createTypeMapper(DslPreviewClassResolver.kt:125)
    	at org.jetbrains.kotlin.android.dslpreview.DslPreviewClassResolver$Companion.access$createTypeMapper(DslPreviewClassResolver.kt:121)
    	at org.jetbrains.kotlin.android.dslpreview.DslPreviewClassResolver.resolveClassDescription(DslPreviewClassResolver.kt:115)
    	at org.jetbrains.kotlin.android.dslpreview.DslPreviewClassResolver.getAncestors(DslPreviewClassResolver.kt:73)
    	at org.jetbrains.kotlin.android.dslpreview.AnkoNlPreviewManager.resolveAvailableClasses(AnkoNlPreviewManager.kt:167)
    	at org.jetbrains.kotlin.android.dslpreview.AnkoNlPreviewManager.initToolWindow(AnkoNlPreviewManager.kt:156)
    	at com.android.tools.idea.uibuilder.editor.NlPreviewManager$2.run(NlPreviewManager.java:268)
    	at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:337)
    	at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:327)
    	at com.intellij.util.ui.update.MergingUpdateQueue.lambda$flush$1(MergingUpdateQueue.java:277)
    	at com.intellij.util.ui.UIUtil.invokeAndWaitIfNeeded(UIUtil.java:2816)
    	at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:288)
    	at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:246)
    	at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:246)
    	at com.intellij.util.Alarm$Request.runSafely(Alarm.java:417)
    	at com.intellij.util.Alarm$Request.access$700(Alarm.java:344)
    	at com.intellij.util.Alarm$Request$1.run(Alarm.java:384)
    	at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:315)
    	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:424)
    	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:407)
    	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
    	at java.awt.EventQueue.access$500(EventQueue.java:98)
    	at java.awt.EventQueue$3.run(EventQueue.java:715)
    	at java.awt.EventQueue$3.run(EventQueue.java:709)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
    	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:822)
    	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:650)
    	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:366)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    
    
    java.lang.NoSuchMethodError: org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.<init>(Lorg/jetbrains/kotlin/resolve/BindingContext;Lorg/jetbrains/kotlin/codegen/ClassBuilderMode;Lorg/jetbrains/kotlin/codegen/state/IncompatibleClassTracker;Ljava/lang/String;ZZ)V
    	at org.jetbrains.kotlin.android.dslpreview.DslPreviewClassResolver$Companion.createTypeMapper(DslPreviewClassResolver.kt:125)
    	at org.jetbrains.kotlin.android.dslpreview.DslPreviewClassResolver$Companion.access$createTypeMapper(DslPreviewClassResolver.kt:121)
    	at org.jetbrains.kotlin.android.dslpreview.DslPreviewClassResolver.resolveClassDescription(DslPreviewClassResolver.kt:115)
    	at org.jetbrains.kotlin.android.dslpreview.UpdateActivityNameTask.processRequest(UpdateActivityNameTask.kt:42)
    	at org.jetbrains.kotlin.android.dslpreview.UpdateActivityNameTask.processRequest(UpdateActivityNameTask.kt:12)
    	at org.jetbrains.kotlin.idea.util.LongRunningReadTask$1$1.run(LongRunningReadTask.java:110)
    	at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:912)
    	at org.jetbrains.kotlin.idea.util.LongRunningReadTask$3.run(LongRunningReadTask.java:226)
    	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:157)
    	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:543)
    	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:488)
    	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94)
    	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:144)
    	at org.jetbrains.kotlin.idea.util.LongRunningReadTask.runWithWriteActionPriority(LongRunningReadTask.java:223)
    	at org.jetbrains.kotlin.idea.util.LongRunningReadTask$1.run(LongRunningReadTask.java:105)
    	at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:315)
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)
    
    opened by alishir 14
  • [discussion] set layout pattern

    [discussion] set layout pattern

    The problem: To me there was no apparent way to get references to the root view of DSL scripts. So I thought of this way to sort of mimic the framework setContent api and get us a reference to our DSL root. I'm new to kotlin and anko so feedback is much appreciated.

    The solution:

    abstract class BaseActivity : RxAppCompatActivity(), AnkoLogger{
    
        var layout : View by Delegates.notNull()
    
        fun setLayout(inflate : () -> View ){
            layout = with(this){
                inflate()
            }
        }
    }
    

    usage

    class Main : BaseActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setLayout{
                frameLayout {
                    backgroundColor = Color.RED
                }
            }
    
        }
    
        override fun onResume(){
            super.onResume()
            debug(layout)
        }
    }
    
    feature Anko Layouts to be considered 
    opened by nschwermann 13
  • Set style?

    Set style?

    I can't seem to find a good way of setting a style for a view. For example if I wanted a large ProgressBar in XML I would write:

    <ProgressBar
            style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    

    How do you do this in anko?

    duplicate feature Anko Layouts 
    opened by Leland-Takamine 13
  • Android Studio 3.1 Canary 3 can';t see ANko Preview

    Android Studio 3.1 Canary 3 can';t see ANko Preview

    I install latest Anko Support and

    declare as below

    class MyActivityUI : AnkoComponent { override fun createView(ui: AnkoContext) = ui.apply { verticalLayout { val name = editText() button("Say Hello") { onClick { ctx.toast("Hello, ${name.text}!") } } } }.view }

    class IEOverViewActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState) 
        MyActivityUI().setContentView(this)
    }
    

    Still , View > Tool Windows can't see Anko Preview / Anko Support Preview

    please tell me what to do, thanks.

    bug fixed 
    opened by burkaslarry 11
  • Proguard Warning: org.jetbrains.anko.internals.AnkoInternals: can't find referenced method 'int getThemeResId()' in library class android.view.ContextThemeWrapper

    Proguard Warning: org.jetbrains.anko.internals.AnkoInternals: can't find referenced method 'int getThemeResId()' in library class android.view.ContextThemeWrapper

    When building with Anko 0.9 and with ProGuard, I get the following warning which fails the build:

    Warning: org.jetbrains.anko.internals.AnkoInternals: can't find referenced method 'int getThemeResId()' in library class android.view.ContextThemeWrapper

    bug fixed Anko Layouts 
    opened by cypressious 11
  • [Question] Passing context with `doAsync`

    [Question] Passing context with `doAsync`

    A very common Android background task involves retrieving data then updating the UI. In almost all cases, this involves a context. Say we have an Activity (which extends Context) that does the following:

    doAsync {
        //run data
        uiThread {
            show(); //some function under activity
        }
    }
    

    Would this hold onto the activity reference, since it is needed to call show, which effectively renders the weak reference a strong reference?

    We may also note that we can get the context from the weakRef inside doAsync. Is that necessary to ensure proper cancellation?

    I just noticed that there was another method, activityUiThread. That may be the reason for some of my issues, but I'm curious if that's going to fix everything

    opened by AllanWang 10
  • Exception in an async lambda

    Exception in an async lambda

    First of all, thank you for this great library!

    When there's an exception thrown in an async lambda, the lambda ends its execution but nothing else happens. Application doesn't crash, nothing is logged.

    It's very hard to debug this kind of bugs. I personally would be much more happy if the app just crashed.

    Is there anything that could be done with that?

    bug fixed Anko Layouts 
    opened by xxdavid 10
  • custom views, view attrs, attrs

    custom views, view attrs, attrs

    1. It doesn't support custom view good enough - custom attrs.
    2. It also doesn't support all included attrs (like minHeight)
    3. How do I set background=?primaryColor?
    question fixed 
    opened by yoavst 10
  • Please archive this repository.

    Please archive this repository.

    @abelkov. You should archive this repository to hinder people to create new issues as this is clearly deprecated... This makes it easier for people to recognize that the repository is deprecated, by the way :)

    opened by SeppPenner 3
  • Style selector text?

    Style selector text?

    I'm creating a selector like so:

    activity?.selector("TITLE" , mList.map {
                "SOME TEXT"
            }) { _, i ->
                // DO SOMETHING
    }
    

    The docs don't mention styling at all. How can I style "SOME TEXT" so that it's a different color? I have tried Html.fromText("...") and that has not changed the color.

    opened by Ryanauger95 1
  • Is SDK28 Available In A Repo Somewhere?

    Is SDK28 Available In A Repo Somewhere?

    Gradle doesn't resolve these for 0.10.8:

            anko_sdk                   : "org.jetbrains.anko:anko-sdk28:${ver.anko}",
            anko_sdk_listeners   : "org.jetbrains.anko:anko-sdk28-listeners:${ver.anko}",
    

    Works fine if I use sdk27. I have jcenter, google, and jitpack.io as my current declared repos.

    Any suggestions? Thanks!

    opened by ibcoleman 1
  • Selector no cancel listener

    Selector no cancel listener

    I can just set (title,items,onClick) three params,I need to know the callback when the selector is canceled,what should I do without implement alertBuildFactory?

    opened by AcmenFan 1
  • [fix] Fix unavailable jetbrains repository

    [fix] Fix unavailable jetbrains repository

    Jetbrains repository server does not works and dependencies updating fails with error:

    BUILD FAILED
    P:\android\projects\anko\anko-jetbrains-alt\update_dependencies.xml:29: The following error occurred while executing this line:
    P:\android\projects\anko\anko-jetbrains-alt\update_dependencies_idea.xml:141: The following error occurred while executing this line:
    P:\android\projects\anko\anko-jetbrains-alt\update_dependencies_idea.xml:104: Can't get http://repository.jetbrains.com/remote-repos/net/sf/proguard/proguard-base/5.1/proguard-base-5.1.jar to P:\android\projects\anko\anko-jetbrains-alt\dependencies\download\proguard-base-5.1.jar
    

    So this way the repository server url was replaced by maven

    opened by Makentoshe 0
  • [fix] Listener signature parsing with generics cause IllegalStateException

    [fix] Listener signature parsing with generics cause IllegalStateException

    Avoids listeners with generics like AppBarLayout.BaseOnOffsetChangedListener in material desing library

    Current signature parser could not properly process generics and throws java.lang.IllegalStateException: Invalid classifier type: TypeVariable(name=T)

    After fix we will be skipping these listeners

    opened by Makentoshe 0
Releases(v0.10.8)
Owner
Kotlin
Kotlin Tools and Libraries
Kotlin
📒 NotyKT is a complete 💎Kotlin-stack (Backend + Android) 📱 application built to demonstrate the use of Modern development tools with best practices implementation🦸.

NotyKT ??️ NotyKT is the complete Kotlin-stack note taking ??️ application ?? built to demonstrate a use of Kotlin programming language in server-side

Shreyas Patil 1.4k Jan 4, 2023
Stateful is a Kotlin library which makes Android application development faster and easier.

Stateful Stateful is a Kotlin library which makes Android application development faster and easier. It helps you delete all the boilerplate code for

PicsArt 67 Oct 3, 2022
CleanArchitecture is a sample project that presents a modern, 2021 approach to Android application development.

CleanArchitecture is a sample project that presents a modern, 2021 approach to Android application development. The goal of the pro

Shushant tiwari 0 Nov 13, 2021
AndroidappTemplate - A GitHub template repository intended to kickstart development on an Android application

Android App Template This is a GitHub template repository intended to kickstart

null 0 Jan 7, 2022
Rick-and-morty-app - Android mobile application development with clean architecture

Android - Rick And Morty App MVVM architecture Dependency Injection (Dagger) Ret

Hakan Yılmaz 2 Jan 27, 2022
This is a demo android app representing implementation of SE principles in android app development

Articles Demo This repository contains a sample Android App that shows most popular articles data from NY Times API. This is a sample app that shows h

Waesem Abbas 2 Jan 20, 2022
Android-Boilerplate - Base project for android development with new technology

Android-Boilerplate Base project for android development with new technology, in

Muhammad Rizky Arifin 1 Aug 15, 2022
Gits-android-extensions - A collection of Kotlin extensions to simplify Android development

gits-android-extensions A collection of Kotlin extensions to simplify Android de

GITS Indonesia 3 Feb 3, 2022
Kaffeine is a Kotlin-flavored Android library for accelerating development.

Kaffeine Kaffeine is a Kotlin-flavored Android library for accelerating development. Several Words of Caution Besides the obvious productivity advanta

Ragunath Jawahar 156 Nov 18, 2022
Koi, a lightweight kotlin library for Android Development.

Koi - A lightweight Kotlin library for Android Koi include many useful extensions and functions, they can help reducing the boilerplate code in Androi

Hello World 514 Nov 29, 2022
Ethereum Web3 implementation for mobile (android & ios) Kotlin Multiplatform development

Mobile Kotlin web3 This is a Kotlin MultiPlatform library that ... Table of Contents Features Requirements Installation Usage Samples Set Up Locally C

IceRock Development 32 Aug 26, 2022
👋 A common toolkit (utils) ⚒️ built to help you further reduce Kotlin boilerplate code and improve development efficiency. Do you think 'kotlin-stdlib' or 'android-ktx' is not sweet enough? You need this! 🍭

Toolkit [ ?? Work in progress ⛏ ?? ??️ ?? ] Snapshot version: repositories { maven("https://s01.oss.sonatype.org/content/repositories/snapshots") }

凛 35 Jul 23, 2022
REST countries sample app that loads information from REST countries API V3 to show an approach to using some of the best practices in Android Development.

MAJORITY assignment solution in Kotlin via MVVM Repository Pattern. REST countries sample app that loads information from REST countries API V3 to sho

Rehan Sarwar 1 Nov 8, 2022
A simple project that describes the relationship between the view and it's viewmodel in android development

View-ViewModel-Communication A simple project that describes the relationship between the view and it's viewmodel in android development In MVVM archi

Segun Francis 1 Nov 6, 2021
Kotlin Multiplatform is an SDK for cross-platform mobile development, which enables teams to use the same business logic in both Android and iOS client applications.

Kotlin Multiplatform is an SDK for cross-platform mobile development, which enables teams to use the same business logic in both Android and iOS client applications.

Chris Russell 1 Feb 11, 2022
This is a sample app to use [Molecule library] and solve some scoping problems in Android development.

Android sample app Problem It's started when P.Y. in Twitter shared this tweet and his post, which is a correct complain about introducing a new set o

Hadi 37 Oct 28, 2022
🪐 Modern Android development with Hilt, Coroutines, Flow, JetPack(ViewModel) based on MVVM architecture.

Ceres ?? Modern Android development with Hilt, Coroutines, Flow, JetPack(ViewModel) based on MVVM architecture. Download Gradle Add the dependency bel

Teodor G. 21 Jan 11, 2023
An under development minecraft plugin (1.8.8) to learning Kotlin language

CorePlus CorePlus is a minecraft plugin coded with Kotlin language. Still under development CorePlus will be an essential for each minecraft servers !

Gonz 3 Jun 16, 2021
The most essential libraries for Kotlin Multiplatform development

Essenty The most essential libraries for Kotlin Multiplatform development. Supported targets: android jvm js (IR and LEGACY) iosArm64, iosX64 watchosA

Arkadii Ivanov 218 Jan 3, 2023