🔎 An HTTP inspector for Android & OkHTTP (like Charles but on device) - More Chucker than Chuck

Overview

Chucker

Maven Central Pre Merge Checks License PRs Welcome Join the chat at https://kotlinlang.slack.com Android Weekly

A fork of Chuck

chucker icon

Chucker simplifies the inspection of HTTP(S) requests/responses fired by your Android App. Chucker works as an OkHttp Interceptor persisting all those events inside your application, and providing a UI for inspecting and sharing their content.

Apps using Chucker will display a push notification showing a summary of ongoing HTTP activity. Tapping on the notification launches the full Chucker UI. Apps can optionally suppress the notification, and launch the Chucker UI directly from within their own interface.

chucker http sample

Getting Started 👣

Chucker is distributed through Maven Central. To use it you need to add the following Gradle dependency to your build.gradle file of you android app module (NOT the root file).

Please note that you should add both the library and the the library-no-op variant to isolate Chucker from release builds as follows:

dependencies {
  debugImplementation "com.github.chuckerteam.chucker:library:3.4.0"
  releaseImplementation "com.github.chuckerteam.chucker:library-no-op:3.4.0"
}

To start using Chucker, just plug it a new ChuckerInterceptor to your OkHttp Client Builder:

val client = OkHttpClient.Builder()
                .addInterceptor(ChuckerInterceptor(context))
                .build()

Enable Java 8 support.

android {
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

  // For Kotlin projects add also this line
  kotlinOptions.jvmTarget = "1.8"
}

That's it! 🎉 Chucker will now record all HTTP interactions made by your OkHttp client.

Historically, Chucker was distributed through JitPack. You can find older version of Chucker here: JitPack.

Features 🧰

Don't forget to check the changelog to have a look at all the changes in the latest version of Chucker.

  • Compatible with OkHTTP 4
  • API >= 21 compatible
  • Easy to integrate (just 2 gradle implementation lines).
  • Works out of the box, no customization needed.
  • Empty release artifact 🧼 (no traces of Chucker in your final APK).
  • Support for body text search with highlighting 🕵️‍♂️
  • Support for showing images in HTTP Responses 🖼
  • Support for custom decoding of HTTP bodies

Multi-Window 🚪

The main Chucker activity is launched in its own task, allowing it to be displayed alongside the host app UI using Android 7.x multi-window support.

Multi-Window

Configure 🎨

You can customize chucker providing an instance of a ChuckerCollector:

// Create the Collector
val chuckerCollector = ChuckerCollector(
        context = this,
        // Toggles visibility of the push notification
        showNotification = true,
        // Allows to customize the retention period of collected data
        retentionPeriod = RetentionManager.Period.ONE_HOUR
)

// Create the Interceptor
val chuckerInterceptor = ChuckerInterceptor.Builder(context)
        // The previously created Collector
        .collector(chuckerCollector)
        // The max body content length in bytes, after this responses will be truncated.
        .maxContentLength(250_000L)
        // List of headers to replace with ** in the Chucker UI
        .redactHeaders("Auth-Token", "Bearer")
        // Read the whole response body even when the client does not consume the response completely.
        // This is useful in case of parsing errors or when the response body
        // is closed before being read like in Retrofit with Void and Unit types.
        .alwaysReadResponseBody(true)
        // Use decoder when processing request and response bodies. When multiple decoders are installed they
        // are applied in an order they were added.
        .addBodyDecoder(decoder)
        // Controls Android shortcut creation.
        .createShortcut(true)
        .build()

// Don't forget to plug the ChuckerInterceptor inside the OkHttpClient
val client = OkHttpClient.Builder()
        .addInterceptor(chuckerInterceptor)
        .build()

Redact-Header 👮‍♂️

Warning The data generated and stored when using Chucker may contain sensitive information such as Authorization or Cookie headers, and the contents of request and response bodies.

It is intended for use during development, and not in release builds or other production deployments.

You can redact headers that contain sensitive information by calling redactHeader(String) on the ChuckerInterceptor.

interceptor.redactHeader("Auth-Token", "User-Session");

Decode-Body 📖

Chucker by default handles only plain text bodies. If you use a binary format like, for example, Protobuf or Thrift it won't be automatically handled by Chucker. You can, however, install a custom decoder that is capable to read data from different encodings.

object ProtoDecoder : BinaryDecoder {
    fun decodeRequest(request: Request, body: ByteString): String? = if (request.isExpectedProtoRequest) {
        decodeProtoBody(body)
    } else {
        null
    }

    fun decodeResponse(request: Response, body: ByteString): String? = if (request.isExpectedProtoResponse) {
        decodeProtoBody(body)
    } else {
        null
    }
}
interceptorBuilder.addBodyDecoder(ProtoDecoder).build()

Migrating 🚗

If you're migrating from Chuck to Chucker, please refer to this migration guide.

If you're migrating from Chucker v2.0 to v3.0, please expect multiple breaking changes. You can find documentation on how to update your code on this other migration guide.

Snapshots 📦

Development of Chucker happens in the develop branch. Every push to develop will trigger a publishing of a SNAPSHOT artifact for the upcoming version. You can get those snapshots artifacts directly from Sonatype with:

repositories {
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
dependencies {
  debugImplementation "com.github.chuckerteam.chucker:library:3.4.1-SNAPSHOT"
  releaseImplementation "com.github.chuckerteam.chucker:library-no-op:3.4.1-SNAPSHOT"
}

Moreover, you can still use JitPack as it builds every branch. So the top of develop is available here:

repositories {
    maven { url "https://jitpack.io" }
}
dependencies {
  debugImplementation "com.github.chuckerteam.chucker:library:develop-SNAPSHOT"
  releaseImplementation "com.github.chuckerteam.chucker:library-no-op:develop-SNAPSHOT"
}

⚠️ Please note that the latest snapshot might be unstable. Use it at your own risk ⚠️

If you're looking for the latest stable version, you can always find it in Releases section.

FAQ

  • Why are some of my request headers missing?
  • Why are retries and redirects not being captured discretely?
  • Why are my encoded request/response bodies not appearing as plain text?

Please refer to this section of the OkHttp documentation. You can choose to use Chucker as either an application or network interceptor, depending on your requirements.

  • Why Android < 21 is no longer supported?

In order to keep up with the changes in OkHttp we decided to bump its version in 4.x release. Chucker 3.4.x supports Android 16+ but its active development stopped and only bug fixes and minor improvements will land on 3.x branch till March 2021.

Contributing 🤝

We're offering support for Chucker on the #chucker channel on kotlinlang.slack.com. Come and join the conversation over there.

We're looking for contributors! Don't be shy. 😁 Feel free to open issues/pull requests to help us improve this project.

  • When reporting a new Issue, make sure to attach Screenshots, Videos or GIFs of the problem you are reporting.
  • When submitting a new PR, make sure tests are all green. Write new tests if necessary.

Short TODO List for new contributors:

Building 🛠

In order to start working on Chucker, you need to fork the project and open it in Android Studio/IntelliJ IDEA.

Before committing we suggest you install the pre-commit hooks with the following command:

./gradlew installGitHook

This will make sure your code is validated against KtLint and Detekt before every commit. The command will run automatically before the clean task, so you should have the pre-commit hook installed by then.

Before submitting a PR please run:

./gradlew build

This will build the library and will run all the verification tasks (ktlint, detekt, lint, unit tests) locally. This will make sure your CI checks will pass.

Acknowledgments 🌸

Maintainers

Chucker is currently developed and maintained by the ChuckerTeam. When submitting a new PR, please ping one of:

Thanks

Big thanks to our contributors ❤️

Libraries

Chucker uses the following open source libraries:

  • OkHttp - Copyright Square, Inc.
  • Gson - Copyright Google Inc.
  • Room - Copyright Google Inc.

License 📄

    Copyright (C) 2018-2020 Chucker Team.
    Copyright (C) 2017 Jeff Gilfelt.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
Comments
  • Add switching between encoded and decoded URL formats.

    Add switching between encoded and decoded URL formats.

    :camera: Screenshots

    Show us what you've changed, we love images.

    Screenshot_1581281305 Screenshot_1581280198 Screenshot_1581280204 Screenshot_1581280210

    :page_facing_up: Context

    Why did you change something? Is there an issue to link here? Or an extarnal link?

    There is an issue - https://github.com/ChuckerTeam/chucker/issues/155

    :pencil: Changes

    Which code did you change? How?

    From the exsiting code this PR touches mostly ViewModels and Entities. I added a way to display encoded or decoded URL (or its parts) with a wrapper FormattedUrl class.

    :warning: Breaking

    Is there something breaking in the API? Any class or method signature changed?

    No.

    :pencil: How to test

    Is there a special case to test your changes?

    Run the sample app. Use checkbox in the top right corner to switch between encoded and decoded URLs. The option should persist between application restarts.

    :crystal_ball: Next steps

    Do we have to plan something else after the merge?

    No.

    Closes #155

    opened by MiSikora 33
  • Poll about `Errors` tab future

    Poll about `Errors` tab future

    Hey everyone.

    Chucker evolves pretty fast and becomes better every day thanks to great feedback from the community and contributors hard work. However, there are some features that don't get much feedback on possible improvements. One such feature is ability to capture Throwable errors and show them in Errors tab. Moreover there are even some suggestions asking to disable that tab or remove it completely (like in #88 or here).

    While it looks reasonable that Chucker could remove this feature completely and focus just on network part we don't know for sure if this feature is used a lot or everyone just ignores it. Since there is no analytics available we would like to create sort of a poll in this issue and see your opinion.

    To vote just put a reaction to this message with emoji.

    Available options are:

    👍 - Leave Errors tab and errors collection feature. 👎 - Remove Errors tab and errors collection feature.

    This poll is valid for 1 month till May 8th so we could gather enough feedback.

    We would also love to hear your feedback on whenever you or your team used/use Errors tab and if it was/is helpful, so don't hesitate to leave comments here, in this issue.

    opened by vbuberen 20
  • Add support for HTTP Archive (HAR)

    Add support for HTTP Archive (HAR)

    :camera: Screenshots

    WhatsApp Image 2021-09-24 at 13 09 12 WhatsApp Image 2021-09-24 at 13 09 39 WhatsApp Image 2021-09-24 at 13 10 06 WhatsApp Image 2021-09-24 at 13 11 13 WhatsApp Image 2021-09-24 at 13 11 38

    :page_facing_up: Context

    This updates @JayNewstrom 's solution which allows Chucker to share/export files with desktop http viewers such as Charles Proxy, Chrome Network Debugger, etc.

    Closes #401

    :pencil: Changes

    Most of the code is new, but some changes were made on toolbars export buttons to allow har export.

    :no_entry_sign: Breaking

    No breaking changes.

    :hammer_and_wrench: How to test

    @JayNewstrom 's solution has some automated tests. You can also test via the UI (see screenshots). After you have the file ready to import into another application, it should be able to be imported.

    :stopwatch: Next steps

    As told by @JayNewstrom:

    This handles the simple case, and allows you to view request/response in Charles. The generated file is likely not 100% accurate/to spec yet. See comments in #401 for some reasons why (ie. missing data).
    
    I'd like to ensure this is the right direction, and get bugs/examples that fail to import and fix them as we find them.
    
    I'd also like to add support for binary request/response bodies via base 64 encoding.
    
    enhancement 
    opened by gusdantas 17
  • Handle empty and missing response bodies.

    Handle empty and missing response bodies.

    :page_facing_up: Context

    There is an issue - #242.

    :pencil: Changes

    I made ChuckerInterceptor gzip response back to the end end consumer in case it had to gunzip it. I also added tests for cases where ChuckerInterceptor is used as a netework interceptor.

    This is rather a quick fix as it affects some people. The proper solution would be to split requests and responses streaming in order to allow Chucker to consume them separately from the end user.

    :no_entry_sign: Breaking

    No.

    :hammer_and_wrench: How to test

    You can add a ChuckerInterceptor as a network interceptor. It should not cause IOExceptions for gzipped responses. You can also check the 81accac0 commit and run tests. They shoud fail at that stage.

    :stopwatch: Next steps

    No steps.

    Closes #242

    opened by MiSikora 17
  • Chucker 3.1.2 re-writing the Server Response; throws IOException when used as a networkInterceptor

    Chucker 3.1.2 re-writing the Server Response; throws IOException when used as a networkInterceptor

    :writing_hand: Describe the bug

    After updating to 3.1.2 (from 3.0.1) every request fails with an IOException:

    java.io.IOException: ID1ID2: actual 0x00007b22 != expected 0x00001f8b
    System.err:     at okio.GzipSource.checkEqual(GzipSource.java:205)
    System.err:     at okio.GzipSource.consumeHeader(GzipSource.java:120)
    System.err:     at okio.GzipSource.read(GzipSource.java:73)
    System.err:     at okio.RealBufferedSource.read(RealBufferedSource.java:51)
    System.err:     at okio.ForwardingSource.read(ForwardingSource.java:35)
    System.err:     at retrofit2.OkHttpCall$ExceptionCatchingResponseBody$1.read(OkHttpCall.java:288)
    System.err:     at okio.RealBufferedSource.select(RealBufferedSource.java:100)
    

    Chucker 3.0.1 returned the original Response. 3.1.x seems to process the response and returns this "processed Response" (see here).

    I see the need of processing the Response and doing stuff with it. But the Interceptor has to return the original response at the end, since Chucker is only some kind of debugging ouput, which should not change the Request/Response in any way.

    :bomb: Steps to reproduce

    • Add ChuckerInterceptor as a networkInterceptor
    • I think the Request has to be gzipped

    :wrench: Expected behavior

    • Chucker should not alter the Server Response

    :iphone: Tech info

    Chucker version: 3.1.2 OkHttp version: 3.14.6

    :page_facing_up: Additional context

    This only happens when the ChuckerInterceptor is added as a networkInterceptor. The Notification shows the correct Request with the Response.

    bug 
    opened by jannisveerkamp 17
  • Image preview background contrast

    Image preview background contrast

    :camera: Screenshots

    Screenshot_1586783170 Screenshot_1586783151 Screenshot_1586783159 Screenshot_1586783154 Screenshot_1586783146 Screenshot_1586783173

    :page_facing_up: Context

    There is an issue. #319

    :pencil: Changes

    Showing downloaded image preview triggers Palette to determine contrast colour based on the luminescence of the image. You can see in the screenshots that light image has dark background and vice versa.

    One unfortunate thing is that Palette does not recognise alpha channel so we cannot filter out the the transparent background and Palette treats it as a black colour. What I do is I create a new bitmap that uses magenta in place of transparent pixels and then filter them out in the Palette. I chose magenta as it is rather a rare colour.

    :no_entry_sign: Breaking

    No.

    :hammer_and_wrench: How to test

    I added image requests to the sample app. Unfortunately I didn't find any image generator that would operate on images with alpha and starting a local server just for that purpose seems too much.

    :stopwatch: Next steps

    Closes #319.

    enhancement 
    opened by MiSikora 16
  • Add support for Brotli compression

    Add support for Brotli compression

    :camera: Screenshots

    Screenshot 2021-02-14 at 19 56 25 Screenshot 2021-02-14 at 19 54 20

    :page_facing_up: Context

    There is a very old issue with such feature request #202. Since we are now on OkHttp 4 it is time to add Brotli support.

    :pencil: Changes

    • Added new dependency OkHttp Brotli
    • Updated OkHttpUtils to support uncompress operations for Brotli content

    :no_entry_sign: Breaking

    Nothing breaking expected

    :hammer_and_wrench: How to test

    Run sample and check brotli transaction response.

    :stopwatch: Next steps

    I would like to add tests to this feature, but not sure how to do it properly to match our test suit. Would gladly discuss it here or in Slack and appreciate help/directions.

    Closes #202

    enhancement 
    opened by vbuberen 15
  • Remove deprecated constructor and use exposed builder pattern

    Remove deprecated constructor and use exposed builder pattern

    :page_facing_up: Context

    There is an issue - #462.

    :pencil: Changes

    This implementation uses more robust builder pattern in terms of future development. It should be used with 4.x. There is one inconvenience when it comes to default values but it is not that big of a deal. I'll describe it more in the comments to the code.

    :no_entry_sign: Breaking

    Yes it breaks both API and ABI, but it is for 4.x.

    :hammer_and_wrench: How to test

    ~~I suggest reviewing commits separately. With 5e7d733 you can check if ReplaceWith works correctly.~~

    Nothing special to test.

    :stopwatch: Next steps

    Closes #462

    Helps with #466. It does not solve it, but I don't think we can fix it unfortunately. We can only make sure that in the future we don't fall into the same trap. Though suggestion with adding ABI compatibility tool would be a nice addition.

    We should consider doing the same with ChuckerCollector and RetentionManger. They do not change that dynamically, so there might be no reason to switch there to the builder pattern but on the other hand it might pose at some point in the future same issues as #466.

    enhancement 
    opened by MiSikora 15
  • Filter Transaction list based on Request Body contents

    Filter Transaction list based on Request Body contents

    :warning: Is your feature request related to a problem? Please describe

    We are using Chucker to inspect our https requests & responses and that also includes GraphQL. But due to the diverse and numerous modules in our application making network requests, the transaction list can sometimes become huge. Filtering on the basis of the URL doesn't help because the endpoints for all the GraphQL requests are just the same(because all our GraphQL requests are POST requests).
    Filtering the transaction list on the basis of the request body content would be extremely helpful to filter specific transactions not limited to just GraphQL.

    :bulb: Describe the solution you'd like

    A very naive solution, without requiring any UI change, would be to update the SQL query in the HttpTransactionDao's getFilteredTuples() function to search the user entered text in the request body as well. Eventually updating the query to:-

     "SELECT id, requestDate, tookMs, protocol, method, host, " +
                "path, scheme, responseCode, requestPayloadSize, responsePayloadSize, error, isGraphQLRequest FROM " +
                "transactions WHERE responseCode LIKE :codeQuery AND (path LIKE :query " +
                " OR requestBody LIKE :query) ORDER BY requestDate DESC"
    

    :bar_chart: Describe alternatives you've considered

    Nothing so far.

    :page_facing_up: Additional context

    chucker_filter_based_request_body

    :raising_hand: Do you want to develop this feature yourself?

    • [x] Yes
    • [ ] No
    opened by ArjanSM 14
  • Add support for exporting requests to HTTP Archive format (.har)

    Add support for exporting requests to HTTP Archive format (.har)

    I'm not fixed on .har, but it's a relatively simple plain text format, that's well supported by many applications (including Charles Proxy).

    We've run into many issues where people running our QA app are either not allowed, or not capable of running Charles Proxy and having the ability to view these requests there after would be a huge help to our debugging efforts.

    My goal is to dump the entire transactions table into a single file that I can view in Charles Proxy.

    I've done some initial digging, and I think the database contains all the information I would need in order to pull this off.

    :raising_hand: Do you want to develop this feature yourself?

    • [x] Yes
    • [ ] No

    I'm willing to do the work for this, but it likely won't happen right away.

    I'm also not convinced it's necessary to do this in Chucker core. I could fairly easily just look at the database in application code or a separate library that knows about Chuckers internal database and write the export code there. That being said, the reason I'm posting this here; I think this would be a feature that might be useful to other Churcker users as well.

    feature request 
    opened by JayNewstrom 14
  • Payload size isn't correct for some transactions

    Payload size isn't correct for some transactions

    :loudspeaker: Describe the bug

    Some transactions show payload size as -1. It is totally fine, since OkHttp returns this value in case the size is unknown. However, when I wanted to handle this value in Chucker UI I decided to check what other network interceptors show and found out that Stetho show sizes for transactions, which show -1 in Chucker.

    :wrench: Expected behavior

    Transactions show actual size instead of -1.

    :camera: Screenshots

    Screen Shot 2020-01-26 at 10 51 39
    opened by vbuberen 14
  • Bump kotlinVersion from 1.7.22 to 1.8.0

    Bump kotlinVersion from 1.7.22 to 1.8.0

    Bumps kotlinVersion from 1.7.22 to 1.8.0. Updates kotlin-gradle-plugin from 1.7.22 to 1.8.0

    Release notes

    Sourced from kotlin-gradle-plugin's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-gradle-plugin's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Updates kotlin-stdlib from 1.7.22 to 1.8.0

    Release notes

    Sourced from kotlin-stdlib's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-stdlib's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump robolectric from 4.9 to 4.9.2

    Bump robolectric from 4.9 to 4.9.2

    Bumps robolectric from 4.9 to 4.9.2.

    Release notes

    Sourced from robolectric's releases.

    Robolectric 4.9.2 is a minor release that primarily fixes robolectric/robolectric#7879, which was an issue using native SQLite with older Linux machines.

    It also includes:

    • A fix for ShadowSpeechRecognizer in SDK <= 28 (0df34bf0cb5423afb64d7f4340c95e741ba26aa6, thanks @​utzcoz)
    • Some fixes for instrumenting Jacoco-instrumented classes (7534d628fd69caab623b1ed31bf2096fd3c914db and 4e6047d88f7e8d9c83b13842a0d584d7eccd068a). Note there are still known issues with running Robolectric instrumentation on Jacoco-instrumented classes which should hopefully be fixed in 4.10.

    Full Changelog: https://github.com/robolectric/robolectric/compare/robolectric-4.9.1...robolectric-4.9.2

    Robolectric 4.9.1 is a minor release that fixes several issues:

    • Fixes sdk levels in ShadowAppOpsManager (50e2cfa4294c5dcfb7127f51f355a366f947c89a, thanks @​paulsowden)
    • Fixes an issue loading the native runtime on concurrent threads (0b4e996c27b85f05f7f52f75bc9d5109be7ef767)
    • Fixes some uses of LineBreaker and StaticLayout in Compose (ed2d7d3d600972090de29bcf9ad37d65a4d7ef47, thanks @​samliu000)
    • Added proxy settings for fetching artifacts (bed3ca5a4ea314f730a9d58331b0099ca4c0abeb, thanks @​sebastienrussell)
    • Avoid referring to Android S TelephonyCallback (d43ae9ad7b74512dbf89518247769ca5c2c4128c, thanks @​styluo)
    • Fix data race in ShadowPausedLooper (cb231c8c133b6f2ed4e46148d1a4f551fdd52dd2)
    • Add shadow for LocaleManager#getSystemLocales (24d49f41227c35e0e3ce8564e404a39481c312e6, thanks @​utzcoz)
    • Use uninterruptibly acquire for ResTable's lock (a221f6829110fd40b124527bde5317123f1737d9, thanks @​utzcoz)
    • Update androidx.test dependencies to latest stable releases (0bdf89b884ac7c50c0e4d7a2b2fff848d795bf16, thanks @​utzcoz)
    • Support zip files where EOCD's offset to central dir is -1 (9b36bc6b013db9e9eef5c509b2471cc8b0a7395a)

    Full Changelog: https://github.com/robolectric/robolectric/compare/robolectric-4.9...robolectric-4.9.1

    Commits
    • fb2d148 Bump version to 4.9.2.
    • 0df34bf Ensure ShadowSpeechRecognizer can work with SDK 28
    • 4e6047d Change where addCallToRoboInit() inserts call to $$robo$init
    • 7534d62 Add call to $$robo$init for Jacoco-instrumented constructors
    • 81dda2f Enable CI when commits are pushed to release branches
    • 53c4498 Bump version to 4.9.1.
    • 9b36bc6 Support zip files where EOCD's offset to central dir is -1
    • 73b8c53 Bump errorproneVersion from 2.9.0 to 2.16
    • 0bdf89b Update to androidx.test 11.04.2022 stable release
    • c718f94 Update to androidx.test 10.26.2022 RC release
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump apolloVersion from 3.7.1 to 3.7.3

    Bump apolloVersion from 3.7.1 to 3.7.3

    Bumps apolloVersion from 3.7.1 to 3.7.3. Updates apollo-gradle-plugin from 3.7.1 to 3.7.3

    Release notes

    Sourced from apollo-gradle-plugin's releases.

    v3.7.3

    This release contains a handful of bug fixes and improvements, and also discontinues the legacy JS artifacts.

    Many thanks to @​StefanChmielewski and @​chao2zhang for contributing to the project! 🧡

    ⚙️ Removed JS legacy artifacts (#4591)

    Historically, Kotlin Multiplatform has had 2 formats of JS artifacts: Legacy and IR, and Apollo Kotlin has been publishing both. However, the Legacy format is about to be deprecated with Kotlin 1.8 and moreover we've seen issues when using the Legacy artifact in the browser. That is why starting with this release, only the IR artifacts will be published. Please reach out if this causes any issue in your project.

    👷‍ All changes

    • Add GraphQLWsProtocol.Factory.webSocketPayloadComposer (#4589)
    • Escape "Companion" in enum value names (#4558)
    • Un-break Gradle configuration cache in multi module cases (#4564)
    • Move computing the alwaysGenerateTypesMatching to execution time (#4578)
    • Log deprecation warning instead of printing (#4561)
    • Escape spaces when url encoding, for Apple (#4567)
    • Fix providing linker flags to the Kotlin compiler with KGP 1.8 (#4573)
    • Use service {} in all messages/docs (#4572)
    • Print all duplicate types at once (#4571)
    • Fix JavaPoet formatting (#4584)
    • Don't publish legacy js artifacts (#4591)

    v3.7.2

    This patch release brings a few fixes.

    Many thanks to @​davidshepherd7, @​chao2zhang, @​agrosner, @​MyDogTom, @​doucheng, @​sam43 and @​vincentjames501, for helping improve the library! 🙏

    🔎‍ Explicit service declaration

    Apollo Kotlin can be configured to work with multiple services and have the package name, schema files location, and other options specified for each of them. When using a single service however it is possible to omit the service block and set the options directly in the apollo block - in that case, a default service named service is automatically defined.

    While this saves a few lines, it relies on Gradle afterEvaluate {} block that makes the execution of the plugin less predictable and more subject to race conditions with other plugins (see here for an example).

    What's more, as we move more logic to build time, the name of the service is going to be used more and more in generated code. Since explicit is better than implicit, mandating that service name sounds a good thing to do and a warning is now printed if you do not define your service name.

    To remove the warning, embed the options into a service block:

    apollo {
    + service("service") {
        packageName.set("com.example")
        // ...
    + }
    }
    

    👷‍ All changes

    • Improve "duplicate type" message by using the full path of the module (#4527)

    ... (truncated)

    Changelog

    Sourced from apollo-gradle-plugin's changelog.

    Version 3.7.3

    2022-12-20

    This release contains a handful of bug fixes and improvements, and also discontinues the legacy JS artifacts.

    Many thanks to @​StefanChmielewski and @​chao2zhang for contributing to the project! 🧡

    ⚙️ Removed JS legacy artifacts (#4591)

    Historically, Kotlin Multiplatform has had 2 formats of JS artifacts: Legacy and IR, and Apollo Kotlin has been publishing both. However, the Legacy format is about to be deprecated with Kotlin 1.8 and moreover we've seen issues when using the Legacy artifact in the browser. That is why starting with this release, only the IR artifacts will be published. Please reach out if this causes any issue in your project.

    👷‍ All changes

    • Add GraphQLWsProtocol.Factory.webSocketPayloadComposer (#4589)
    • Escape "Companion" in enum value names (#4558)
    • Un-break Gradle configuration cache in multi module cases (#4564)
    • Move computing the alwaysGenerateTypesMatching to execution time (#4578)
    • Log deprecation warning instead of printing (#4561)
    • Escape spaces when url encoding, for Apple (#4567)
    • Fix providing linker flags to the Kotlin compiler with KGP 1.8 (#4573)
    • Use service {} in all messages/docs (#4572)
    • Print all duplicate types at once (#4571)
    • Fix JavaPoet formatting (#4584)
    • Don't publish legacy js artifacts (#4591)

    Version 3.7.2

    2022-12-05

    This patch release brings a few fixes.

    Many thanks to @​davidshepherd7, @​chao2zhang, @​agrosner, @​MyDogTom, @​doucheng, @​sam43 and @​vincentjames501, for helping improve the library! 🙏

    🔎‍ Explicit service declaration

    Apollo Kotlin can be configured to work with multiple services and have the package name, schema files location, and other options specified for each of them. When using a single service however it is possible to omit the service block and set the options directly in the apollo block - in that case, a default service named service is automatically defined.

    While this saves a few lines, it relies on Gradle afterEvaluate {} block that makes the execution of the plugin less predictable and more subject to race conditions with other plugins (see here for an example).

    What's more, as we move more logic to build time, the name of the service is going to be used more and more in generated code. Since explicit is better than implicit, mandating that service name sounds a good thing to do and a warning is now printed if you do not define your service name.

    To remove the warning, embed the options into a service block:

    apollo {
    + service("service") {
        packageName.set("com.example")
        // ...
    + }
    </tr></table> 
    

    ... (truncated)

    Commits

    Updates apollo-runtime from 3.7.1 to 3.7.3

    Release notes

    Sourced from apollo-runtime's releases.

    v3.7.3

    This release contains a handful of bug fixes and improvements, and also discontinues the legacy JS artifacts.

    Many thanks to @​StefanChmielewski and @​chao2zhang for contributing to the project! 🧡

    ⚙️ Removed JS legacy artifacts (#4591)

    Historically, Kotlin Multiplatform has had 2 formats of JS artifacts: Legacy and IR, and Apollo Kotlin has been publishing both. However, the Legacy format is about to be deprecated with Kotlin 1.8 and moreover we've seen issues when using the Legacy artifact in the browser. That is why starting with this release, only the IR artifacts will be published. Please reach out if this causes any issue in your project.

    👷‍ All changes

    • Add GraphQLWsProtocol.Factory.webSocketPayloadComposer (#4589)
    • Escape "Companion" in enum value names (#4558)
    • Un-break Gradle configuration cache in multi module cases (#4564)
    • Move computing the alwaysGenerateTypesMatching to execution time (#4578)
    • Log deprecation warning instead of printing (#4561)
    • Escape spaces when url encoding, for Apple (#4567)
    • Fix providing linker flags to the Kotlin compiler with KGP 1.8 (#4573)
    • Use service {} in all messages/docs (#4572)
    • Print all duplicate types at once (#4571)
    • Fix JavaPoet formatting (#4584)
    • Don't publish legacy js artifacts (#4591)

    v3.7.2

    This patch release brings a few fixes.

    Many thanks to @​davidshepherd7, @​chao2zhang, @​agrosner, @​MyDogTom, @​doucheng, @​sam43 and @​vincentjames501, for helping improve the library! 🙏

    🔎‍ Explicit service declaration

    Apollo Kotlin can be configured to work with multiple services and have the package name, schema files location, and other options specified for each of them. When using a single service however it is possible to omit the service block and set the options directly in the apollo block - in that case, a default service named service is automatically defined.

    While this saves a few lines, it relies on Gradle afterEvaluate {} block that makes the execution of the plugin less predictable and more subject to race conditions with other plugins (see here for an example).

    What's more, as we move more logic to build time, the name of the service is going to be used more and more in generated code. Since explicit is better than implicit, mandating that service name sounds a good thing to do and a warning is now printed if you do not define your service name.

    To remove the warning, embed the options into a service block:

    apollo {
    + service("service") {
        packageName.set("com.example")
        // ...
    + }
    }
    

    👷‍ All changes

    • Improve "duplicate type" message by using the full path of the module (#4527)

    ... (truncated)

    Changelog

    Sourced from apollo-runtime's changelog.

    Version 3.7.3

    2022-12-20

    This release contains a handful of bug fixes and improvements, and also discontinues the legacy JS artifacts.

    Many thanks to @​StefanChmielewski and @​chao2zhang for contributing to the project! 🧡

    ⚙️ Removed JS legacy artifacts (#4591)

    Historically, Kotlin Multiplatform has had 2 formats of JS artifacts: Legacy and IR, and Apollo Kotlin has been publishing both. However, the Legacy format is about to be deprecated with Kotlin 1.8 and moreover we've seen issues when using the Legacy artifact in the browser. That is why starting with this release, only the IR artifacts will be published. Please reach out if this causes any issue in your project.

    👷‍ All changes

    • Add GraphQLWsProtocol.Factory.webSocketPayloadComposer (#4589)
    • Escape "Companion" in enum value names (#4558)
    • Un-break Gradle configuration cache in multi module cases (#4564)
    • Move computing the alwaysGenerateTypesMatching to execution time (#4578)
    • Log deprecation warning instead of printing (#4561)
    • Escape spaces when url encoding, for Apple (#4567)
    • Fix providing linker flags to the Kotlin compiler with KGP 1.8 (#4573)
    • Use service {} in all messages/docs (#4572)
    • Print all duplicate types at once (#4571)
    • Fix JavaPoet formatting (#4584)
    • Don't publish legacy js artifacts (#4591)

    Version 3.7.2

    2022-12-05

    This patch release brings a few fixes.

    Many thanks to @​davidshepherd7, @​chao2zhang, @​agrosner, @​MyDogTom, @​doucheng, @​sam43 and @​vincentjames501, for helping improve the library! 🙏

    🔎‍ Explicit service declaration

    Apollo Kotlin can be configured to work with multiple services and have the package name, schema files location, and other options specified for each of them. When using a single service however it is possible to omit the service block and set the options directly in the apollo block - in that case, a default service named service is automatically defined.

    While this saves a few lines, it relies on Gradle afterEvaluate {} block that makes the execution of the plugin less predictable and more subject to race conditions with other plugins (see here for an example).

    What's more, as we move more logic to build time, the name of the service is going to be used more and more in generated code. Since explicit is better than implicit, mandating that service name sounds a good thing to do and a warning is now printed if you do not define your service name.

    To remove the warning, embed the options into a service block:

    apollo {
    + service("service") {
        packageName.set("com.example")
        // ...
    + }
    </tr></table> 
    

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump fragment-ktx from 1.5.4 to 1.5.5

    Bump fragment-ktx from 1.5.4 to 1.5.5

    Bumps fragment-ktx from 1.5.4 to 1.5.5.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • TransactionPayloadFragment.kt line 102 error

    TransactionPayloadFragment.kt line 102 error

    Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object kotlin.Pair.component1()' on a null object reference

       at com.chuckerteam.chucker.internal.ui.transaction.TransactionPayloadFragment.onViewCreated$lambda-2(TransactionPayloadFragment.kt:102)
       at com.chuckerteam.chucker.internal.ui.transaction.TransactionPayloadFragment.$r8$lambda$T903xsqZYw_77gb8vnhfSzuuVAk()
       at com.chuckerteam.chucker.internal.ui.transaction.TransactionPayloadFragment$$ExternalSyntheticLambda1.onChanged(:4)
       at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
       at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
       at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
       at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
       at com.chuckerteam.chucker.internal.support.LiveDataUtilsKt.combineLatest$lambda-2$lambda-0(LiveDataUtils.kt:21)
       at com.chuckerteam.chucker.internal.support.LiveDataUtilsKt.$r8$lambda$mOyt4m3D7rz_Sl6O-_wkqyiVEGQ()
       at com.chuckerteam.chucker.internal.support.LiveDataUtilsKt$$ExternalSyntheticLambda2.onChanged(:8)
       at androidx.lifecycle.MediatorLiveData$Source.onChanged(MediatorLiveData.java:155)
       at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
       at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
       at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
       at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
       at androidx.lifecycle.LiveData$1.run(LiveData.java:93)
       at android.os.Handler.handleCallback(Handler.java:873)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:193)
       at android.app.ActivityThread.main(ActivityThread.java:6762)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
    
    incomplete 
    opened by jDilshodbek 5
Releases(3.5.2)
  • 3.5.2(Aug 2, 2021)

    This release is a re-deployment of 3.5.1, since in that release aar file didn't upload properly on Maven Central, so 3.5.1 wasn't available to projects getting Chucker from Maven Central.

    Source code(tar.gz)
    Source code(zip)
  • 3.5.1(Jul 20, 2021)

    This is hotfix release to avoid crashes for users, who still use throwable reporting feature.

    Fixed

    • Fix crash on Android 12 due to missing immutability flags in deprecated throwable reporting feature #653.
    Source code(tar.gz)
    Source code(zip)
  • 3.5.0(Jun 29, 2021)

    Note: this release has an issue with apps targeting Android 12 making Chucker crash when notification with throwable clicked, so if your project still uses this feature we highly recommend to update to 3.5.2!

    This is a patch release for developers preparing their projects for Android 12.

    Added

    • Support of apps targeting Android 12.

    Fixed

    • Fix crash on Android 12 due to missing immutability flags #593.
    • Fix not setting request body type correctly #538.
    Source code(tar.gz)
    Source code(zip)
  • 3.4.0(Nov 5, 2020)

    This is a new minor release with multiple fixes and one serious improvement which made us do a minor update instead of just patch - builder pattern for ChuckerInterceptor class. Previous constructor with multiple parameters is deprecated and will be removed in 4.x release.

    Also, starting with this release we are switching to Keepachangelog format for our changelogs.

    Added

    • ChuckerInterceptor.Builder for fluent creation of the interceptor. It will also help us with preserving binary compatibility in future releases of 4.x. #462

    Changed

    • Bumped targetSDK and compileSDK to 30 (Android 11).

    Removed

    • kotlin-android-extensions plugin for better compatibility with Kotlin 1.4.20.

    Fixed

    • Fixed memory leak in MainActivity #465.
    • Fixed GzipSource is not closed error reported by StrictMode #472.
    • Fixed build failure for projects with new kotlin-parcelize plugin #480.

    Deprecated

    • ChuckerInterceptor constructor is now deprecated. Unless Context is the only parameter that you pass into the constructor you should migrate to builder.
    Source code(tar.gz)
    Source code(zip)
  • 3.3.0(Sep 30, 2020)

    This is a new minor release with multiple fixes and improvements. After this release, we are starting to work on a new major release 4.x with minSDK 21. Bumping minSDK to 21 is required to keep up with newer versions of OkHttp.

    Versions 3.x will be supported for 6 months (till March 2021) getting bugfixes and minor improvements.

    Summary of changes

    • Added a new flag alwaysReadResponseBody into Chucker configuration to read the whole response body even if the consumer fails to consume it.
    • Added port numbers as part of the URL. Numbers appear if they are different from default 80 or 443.
    • Chucker now shows partially read application responses properly. Earlier in 3.2.0 such responses didn't appear in the UI.
    • Transaction size is defined by actual payload size now, not by Content-length header.
    • Added empty state UI for payloads, so no more guessing if there is some error or the payload is really empty.
    • Added ability to export a list of transactions.
    • Added ability to save a single transaction as a file.
    • Added ability to format URL encoded forms with a button to switch between encoded/decoded URLs.
    • Added generation of contrast background for image payload to distinguish Chucker UI from the image itself.
    • Switched OkHttp dependency from implementation to api, since it is available in the public API.
    • List items are now focusable on Android TV devices.
    • Further improved test coverage.

    Deprecations

    • Throwables capturing feature is officially deprecated and will be removed in the next releases. More info in [#321].

    Bugfixes

    • Fixed [#311] with leaking Closable resource.
    • Fixed [#314] with overlapping UI on some device.
    • Fixed [#367] with empty shared text when Don't keep activities is turned on.
    • Fixed [#366] with a crash when the process dies.
    • Fixed [#394] with failing requests when FileNotFound error happens.
    • Fixed [#410] with conflicts when other apps already use generic FileProvider.
    • Fixed [#422] with IOException.

    Dependency updates

    • Added Fragment-ktx 1.2.5
    • Added Palette-ktx 1.0.0
    • Updated Kotlin to 1.4.10
    • Updated Android Gradle plugin to 4.0.1
    • Updated Coroutine to 1.3.9
    • Updated AppCompat to 1.2.0
    • Updated ConstraintLayout to 2.0.1
    • Updated MaterialComponents to 1.2.1
    • Updated Gradle to 6.6.1

    Credits

    This release was possible thanks to the contribution of:

    @adb-shell @cortinico @djrausch @gm-vm @JayNewstrom @MiSikora @vbuberen @psh

    Source code(tar.gz)
    Source code(zip)
  • 3.2.0(Apr 4, 2020)

    This is a new minor release with numerous internal changes.

    Summary of changes

    • Chucker won't load the whole response into memory anymore, but will mutlicast it with the help of temporary files. It allows to avoid issues with OOM, like in reported in [#218]. This change also allows to avoid problems with Chucker consuming responses, like reported in [#242].
    • Added a red open padlock icon to clearly indicate HTTP requests in transactions list.
    • Added TLS info (version and cipher suite) into Overview tab.
    • Added ability to encode/decode URLs.
    • Added RTL support.
    • Switched from AsyncTasks to Kotlin coroutines.
    • Switched to ViewBinding.
    • Bumped targetSDK to 29.
    • Greatly increased test coverage (we will add exact numbers and reports pretty soon).

    Bugfixes

    • Fix for [#218] with OOM exceptions on big responses.
    • Fix for [#242] with Chucker throwing exceptions when used as networkInterceptor().
    • Fix for [#240] with HttpHeader serialisation exceptions when obfuscation is used.
    • Fix for [#254] with response body search being case-sensitive.
    • Fix for [#255] with missing search icon on Response tab.
    • Fix for [#241] with overlapping texts.

    Dependency updates

    • Added kotlinx-coroutines-core 1.3.5
    • Added kotlinx-coroutines-android 1.3.5
    • Updated Kotlin to 1.3.71
    • Updated Android Gradle plugin to 3.6.1
    • Updated Room to 2.2.5
    • Updated OkHttp to 3.12.10
    • Updated Detekt to 1.7.3
    • Updated Dokka to 0.10.1
    • Updated KtLint plugin to 9.2.1
    • Updated MaterialComponents to 1.1.0
    • Updated Gradle to 6.3

    Credits

    This release was possible thanks to the contribution of:

    @adammasyk @cortinico @CuriousNikhil @hitanshu-dhawan @MiSikora @technoir42 @vbuberen

    Source code(tar.gz)
    Source code(zip)
  • 3.1.2(Feb 9, 2020)

    This is hot fix release for multiple issues introduced in Chucker 3.1.0.

    Enhancements

    • All Chucker screens now have their own ViewModel. Due to this change user can now open the transaction in progress and the content will appear as soon as transaction finishes. No need for reopening transaction anymore.

    Bugfixes

    • Fixed an issue introduced in 3.1.0 where image downloading fails if OkHttp was used for image loading in libraries like Glide, Picasso or Coil.
    • Fixed an issue with invalid CURL command generation.
    • Fixed an issue with crashes if ProGuard/R8 minification is applied to Chucker.
    • Fixed an issue with crash when user taps Save in a transaction, which is still in progress.
    • Fixed an issue with crash when user taps Clear from notification shade while the original app is already dead.
    • Fixed an issue with possible NPEs.
    Source code(tar.gz)
    Source code(zip)
  • 3.1.1(Jan 28, 2020)

    WARNING. This release contains an issue which fails image loading operations if OkHttp is used as image downloader in Glide, Picasso or Coil. Use v3.1.2.

    This is hot fix release for Chucker 3.1.0.

    Bugfixes

    • Fix for #203 issue with response body showing as null for some requests.
    Source code(tar.gz)
    Source code(zip)
  • 3.1.0(Jan 23, 2020)

    WARNING. This release contains an issue which causes some responses show its size as 0 an its body as null. Use v3.1.1.

    This is a new minor release of Chucker. Please note that this minor release contains multiple new features (see below) as well as multiple bugfixes.

    Enhancements

    • The library is now fully converted to Kotlin and migrated to AndroidX!
    • The whole UI has been revamped to support Dark Theme which follows your device theme.
    • The Response/Request Body is now displayed in a RecyclerView, drastically improving performances on big payloads.
    • HTTP Response/Request Body can now be saved in file.
    • Notifications for Throwable and HTTP Traffic are now going into separate channels.
    • A lot of classes inside the .internal package have restricted visibility (from public to internal). Also, resources like strings, dimensions and drawables from Chucker won't appear in your autocomplete suggestions.

    Bugfixes

    • Fixed ANRs during big response payloads processing.
    • Fixed contentType response formatting.
    • Fixed notifications importance in Android Q.
    • Fixed date formatting in transaction overview.
    • Fixed visibility of internal library classes and resources.
    • Fixed XML formatting crash

    Updated dependencies

    • Updated Kotlin to 1.3.61
    • Updated Retrofit to 2.6.4
    • Updated Room to 2.2.3
    • Updated OkHttp to 3.12.6
    • Updated Gson to 2.8.6
    • Updated Dokka to 0.10.0
    • Updated KtLint to 9.1.1
    • Updated Gradle wrapper to 6.1
    • Updated Android Gradle plugin to 3.5.3

    This release was possible thanks to the contribution of:

    @christopherniksch @yoavst @psh @kmayoral @vbuberen @dcampogiani @ullas-jain @rakshit444 @olivierperez @p-schneider @Volfor @cortinico @koral-- @redwarp @uOOOO @sprohaszka @PaulWoitaschek

    Source code(tar.gz)
    Source code(zip)
  • 3.0.1(Aug 16, 2019)

  • 3.0.0(Aug 12, 2019)

    This is a new major release of Chucker. Please note that this major release contains multiple new features (see below) as well as several breaking changes. Please refer to the migration guide if you need support in migrating from 2.x -> 3.0.0 or feel free to open an issue.

    • Chucker DB is now using Room instead of Cupboard as ORM.
    • The public api of Chucker (classes in com.chuckerteam.chucker.api) is now rewritten in Kotlin.
    • Classes inside the .internal package should now not be considered part of the public api and expect them to change without major version bump.
    • Removed usage of okhttp3.internal methods.
    • General UI update of the library (new using ConstraintLayout)
    • Added support to render images in Response page.
    • Added support to search and highlight text in the Http Response body.
    • We moved the artifact from JCenter to JitPack

    Wall of PRs is available inside the CHANGELOG file.

    This release was possible thanks to the contribution of:

    @alorma @Ashok-Varma @cortinico @koral-- @olivierperez @OlliZi @PaulWoitaschek @psh @redwarp @uOOOO

    Source code(tar.gz)
    Source code(zip)
Owner
Chucker Team
Developing Chucker for Android
Chucker Team
It is far easier to design a class to be thread-safe than to retrofit it for thread safety later

"It is far easier to design a class to be thread-safe than to retrofit it for thread safety later." (Brian Goetz - Java concurrency: Publisher: Addiso

Nguyễn Trường Thịnh 3 Oct 26, 2022
Same as an Outlined text fields presented in Material Design page but with some dynamic changes

README SSCustomEditTextOutlineBorder Getting Started SSCustomEditTextOutLineBorder is a small kotlin library for android to support outlined (stroked)

Simform Solutions 194 Dec 30, 2022
Modern Calendar View Supporting Both Hijri and Gregorian Calendars but in highly dynamic way

KCalendar-View Modern calendar view supporting both Hijri and Gregorian calendar

Ahmed Ibrahim 8 Oct 29, 2022
MyAndroidTools, but powered by Sui

MyAndroidTools 便捷地管理您的 Android 设备 简介 与另一款 MyAndroidTools 一样,本应用使你能够便捷地管理 Android 设备中的应用和组件。但与之不同的是,本应用通过 Sui 来调用高权限 API,所以不会在使用过程中频繁弹出 root 授权的 Toast

null 7 Sep 17, 2022
[Android Library] Get easy access to device information super fast, real quick

DeviceInfo-Sample Simple, single class wrapper to get device information from an android device. This library provides an easy way to access all the d

Anitaa Murthy 193 Nov 20, 2022
This library is a set of simple wrapper classes that are aimed to help you easily access android device information.

SysInfo Simple, single class wrapper to get device information from an android device. This library provides an easy way to access all the device info

Klejvi Kapaj 7 Dec 27, 2022
On-device wake word detection powered by deep learning.

Porcupine Made in Vancouver, Canada by Picovoice Porcupine is a highly-accurate and lightweight wake word engine. It enables building always-listening

Picovoice 2.8k Dec 30, 2022
A beautiful material calendar with endless scroll, range selection and a lot more!

CrunchyCalendar A light, powerful and easy to use Calendar Widget with a number out of the box features: Infinite vertical scrolling in both direction

CleverPumpkin 483 Dec 25, 2022
Celebrate more with this lightweight confetti particle system 🎊

Konfetti ?? ?? Celebrate more with this lightweight confetti particle system. Create realistic confetti by implementing this easy to use library. Demo

Dion Segijn 2.7k Dec 28, 2022
A FDPClient fork , It aims to add more modules.

LightClient A FDPClient fork , It aims to add more modules. You can download development version at Github-Actions , Release at Release Only running o

Ad973_ 3 Aug 26, 2021
This server uses json files to model items, entities and more.

Design Server | Simple server to design items, entities or more About this project/server: This server uses json files to model items, entities and mo

Phillipp Glanz 5 Jan 7, 2022
An awesome list that curates the best KMM libraries, tools and more.

Awesome KMM Kotlin Multiplatform Mobile (KMM) is an SDK designed to simplify creating cross-platform mobile applications. With the help of KMM, you ca

Konstantin 994 Dec 28, 2022
Muhammad Ariananda 7 Jul 17, 2022
Wrapper of FusedLocationProviderClient for Android to support modern usage like LiveData and Flow

FancyLocationProvider Wrapper of FusedLocationProviderClient for Android to support modern usage like LiveData or Flow. Install Add Jitpack repository

Jintin 66 Aug 15, 2022
Android library to calculate sun phases like golden hour, blue hour, sunrise, sunset etc

Solarized This is Android library to calculate sun phases like golden hour, blue hour, sunrise, sunset etc Features first / last light golden hour blu

null 8 Nov 29, 2022
A beautiful Fashion Store like Android App Mock built on Jetpack Compose with compose navigation, hilt, dark theme support and google's app architecture found on uplabs Here

A beautiful Fashion Store like Android App Mock built on Jetpack Compose with compose navigation, hilt, dark theme support and google's app architecture found on uplabs Here

Puncz 87 Nov 30, 2022
:balloon: A lightweight popup like tooltips, fully customizable with an arrow and animations.

Balloon ?? A lightweight popup like tooltips, fully customizable with arrow and animations. Including in your project Gradle Add below codes to your r

Jaewoong Eum 2.9k Jan 9, 2023
ZoomHelper will make any view to be zoomable just like Instagram pinch-to-zoom

ZoomHelper ZoomHelper will make any view to be zoomable just like the Instagram pinch-to-zoom. ?? Installation ZoomHelper is available in the JCenter,

AmirHosseinAghajari 238 Dec 25, 2022
:balloon: A lightweight popup like tooltips, fully customizable with an arrow and animations.

Balloon ?? A lightweight popup like tooltips, fully customizable with arrow and animations. Including in your project Gradle Add below codes to your r

Jaewoong Eum 1.8k Apr 27, 2021