Giter Club home page Giter Club logo

coroutinesobfuscationcrash's Introduction

Android Sample app that demonstrate how proguard can break kotlin coroutines

Setup:

private suspend fun call() = try {
coroutineScope {
val result1 = async { retrieve() }
val result2 = async { retrieve() }
listOf(result1, result2).awaitAll()
Log.d(LOG_TAG, "all successful retrieved")
true
}
} catch (ex: IOException) {
Log.e(LOG_TAG, "caught ${ex.message}")
false
}
@Throws(IOException::class)
private suspend fun retrieve() {
delay(100)
Log.d(LOG_TAG, "waited for 100ms, throwing IOException")
throw IOException("could not contact server")
}

suspend function retrieve in line 50-55 throws an exception suspend function call in line 37-48 calls the previous function via async{ retrieve() }....await() and should catch the exception

Without proguard minification (minifyEnabled false) the exception is handled properly:

D/Main: waited for 100ms, throwing IOException
E/Main: caught could not contact server
D/Main: success: false

With proguard minification (minifyEnabled true) the exceptions just disappear and the outcome of the program changes to:

D/Main: waited for 100ms, throwing IOException
D/Main: waited for 100ms, throwing IOException
D/Main: all successful retrieved
D/Main: success: true

Just change the minifyEnabled property here and the behavior should change:

minifyEnabled false // set this to true and it will change the output to success: true

coroutinesobfuscationcrash's People

Contributors

awenger avatar

Watchers

James Cloos avatar

Forkers

lannyf77

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.