Pluto: An on-device debugging framework for Android applications

Overview

Pluto

Maven Central CLA assistant Daily Builds

Pluto is an on-device debugging framework for Android applications, which helps in the inspection of HTTP requests/responses, captures Crashes, and ANRs, and manipulates application data on the go.

It comes with a UI to monitor and share the information, as well as APIs to access and use that information in your application.


Integrate Pluto in your application

Add Gradle Dependencies

Pluto is distributed through mavenCentral. To use it, you need to add the following Gradle dependency to your build.gradle file of your android app module.

dependencies {
  debugImplementation 'com.plutolib:pluto:2.0.0'
}

Intialize Pluto

Now to start using Pluto, intialize Pluto SDK from you application class by passing context to it.

Pluto.Installer(this)
  .addPlugin(DemoPlugin("demo_id"))
  .install()

Install plugins

Unlike version 1.x.x, Pluto now allows developers to add debuggers as plugins based on their need.

Here is the list of some plugins provided by us

We will be adding more to the list. So please stay tuned.

Please refer to their respective README for integration steps.

🎉 You are all set!

Now re-build and run your app, you will receive a notification from Pluto, use it to access Pluto UI.


Contribution

We're looking for contributors, help us improve Pluto. 😁

Please refer to your Contribution guidelines to get started.


License

Copyright 2021 Plutolib.

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
  • Almost whole response is truncated

    Almost whole response is truncated

    image

    I cannot see the response, for some reason pluto prints it on one line (even if its the long response) and even message is truncated. I'd like to see whole response like Gander can do it

    help wanted network-plugin 
    opened by radimjanda754 9
  • Easy access button is not working properly

    Easy access button is not working properly

    Describe the bug A clear and concise description of what the bug is. Many times even when I click on the Pluto easy access button (floating on top of my app), it does not open the Pluto screen Sometime, it get opened, but most of the time it does not open.

    Screenshots

    https://user-images.githubusercontent.com/34706326/130896315-f8531a15-0221-4f14-9e7f-21e125c48e79.mp4

    Smartphone (please complete the following information):

    • Device: Samsung F41
    • OS: Android 11
    • Library Version 1.0.0
    bug help wanted critical 
    opened by sonusourav 9
  • AAPT: error: resource android:attr/lStar not found.

    AAPT: error: resource android:attr/lStar not found.

    Describe the bug Exception is occurred when trying to implement any Pluto version for v1.1.1 - it was duplication classes issue. now AAPT: error: resource android:attr/lStar not found.

    To Reproduce

    • Add libray to build.gradle
    • Configure the library as intended
    • Build application
    • Build failed with error

    Screenshots version 1.1.1 - image

    version 2.0.3 - image image

    Smartphone (please complete the following information):

    • OS: Android
    • Library Version 2.0.3 as well as 1.1.1
    bug 
    opened by dharamveer-appyhigh 7
  • Build issues because of duplicate attribute corner_radius

    Build issues because of duplicate attribute corner_radius

    Describe the bug Build issues because of duplicate attribute. AAPT: error: duplicate value for resource 'attr/corner_radius' with config ''

    https://github.com/mocklets/pluto/blob/445ad948e282a2054044056bf9a26c15b0820b82/pluto/src/main/res/values/attr.xml#L5

    Can we append resource prefix here also to not use a common name which might conflict with some other library in big projects?

    To Reproduce Steps to reproduce the behavior:

    1. Add implementation 'com.crystal:crystalrangeseekbar:1.1.3' library (Just to replicate the conflict)
    2. Build.

    Expected behavior There should be no AAPT error and project should build without any issue.

    Build Environment:

    • Library Version : All versions
    bug 
    opened by amankgo 7
  • Pluto is crashing when clicking on notification after app has been killed.

    Pluto is crashing when clicking on notification after app has been killed.

    Describe the bug Pluto app is crashing with lateinit property session has not been initialized when clicking on notification after the target app crashed or has been killed. I did not try to reproduce it in a more simple app with different launch mode.

    To Reproduce Steps to reproduce the behavior:

    1. Kill the hosting app
    2. Click on the notification: "Pluto is debugging ..."
    3. See app is crashing

    Expected behavior Pluto notification is dismissed after app is killed/crashed. Alternatively if notification can not be dismissed for technical reasons to show an error message that Pluto session has ended.

    Screenshots If applicable, add screenshots to help explain your problem.

    Smartphone (please complete the following information):

    • Device: Emulator android 10, Pixel 5 android 12
    • OS: Android 10, Android 12
    • Library Version 1.1.0

    Additional context

    bug help wanted 
    opened by mlilienberg 6
  • Task :app:mergeDebugResources FAILED

    Task :app:mergeDebugResources FAILED

    Describe the bug Build getting failed with Task :app:mergeDebugResources FAILED error

    To Reproduce Steps to reproduce the behavior:

    1. follow the startup guide
    2. Add dependency
    3. Build project
    4. See build error

    Screenshots https://imgur.com/a/iMkysPE

    Full error logs `> Task :app:mergeDebugResources /home/dalakoti07/.gradle/caches/transforms-3/ac13ed731ff91608bb885e6070e58d98/transformed/preference-1.1.1/res/values/values.xml:424:4: Duplicate value for resource 'attr/min' with config 'DEFAULT' and product ''. Resource was previously defined here: /home/dalakoti07/AndroidStudioProjects/consumer/commons/ui/build/intermediates/packaged_res/debug/values/values.xml:1749:4: .

    Task :app:mergeDebugResources FAILED Execution failed for task ':app:mergeDebugResources'. A failure occurred while executing com.android.build.gradle.internal.res.ResourceCompilerRunnable Resource compilation failed. Check logs for details.

    `

    opened by Dalakoti07 5
  • Unable to integrate Pluto (Build Issue: Moshi Error)

    Unable to integrate Pluto (Build Issue: Moshi Error)

    @srtvprateek

    I am integrating Pluto library in my project with Crashes and Exceptions plugins. When I try to build the project it gives following error: Record requires ASM8

    Android Studio Version: Android Studio Dolphin | 2021.3.1 minSdkVersion: 21 targetSdkVersion: 30

    build tool: classpath 'com.android.tools.build:gradle:7.0.3 kotlin plugin: org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20

    Pluto Dependency: debugImplementation 'com.plutolib:pluto:2.0.5' releaseImplementation 'com.plutolib:pluto-no-op:2.0.5' debugImplementation 'com.plutolib.plugins:exceptions:2.0.5' releaseImplementation 'com.plutolib.plugins:exceptions-no-op:2.0.5'

    Other Dependencies include: Hilt, Gson, Retrofit, OkHttp

    gradle.properties android.enableJetifier=true android.useAndroidX=true android.jetifier.ignorelist=moshi-1.13.0

    Stacktrace:

    `FAILURE: Build completed with 2 failures.

    1: Task failed with an exception.

    • What went wrong: Execution failed for task ':app:mergeExtDexDevelopmentDebug'.

    Could not resolve all files for configuration ':app:DevelopmentDebugRuntimeClasspath'. Failed to transform exceptions-2.0.5.aar (com.plutolib.plugins:exceptions:2.0.5) to match attributes {artifactType=android-dex, asm-transformed-variant=DevelopmentDebug, dexing-enable-desugaring=true, dexing-is-debuggable=true, dexing-min-sdk=21, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}. > Could not resolve all files for configuration ':app:DevelopmentDebugRuntimeClasspath'. > Failed to transform moshi-1.13.0.jar (com.squareup.moshi:moshi:1.13.0) to match attributes {artifactType=android-asm-instrumented-jars, asm-transformed-variant=DevelopmentDebug, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.environment=standard-jvm, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}. > Execution failed for AsmClassesTransform: /Users/ritesh/.gradle/caches/modules-2/files-2.1/com.squareup.moshi/moshi/1.13.0/da685586facab9eb5c4fb630ce248be14e7da21b/moshi-1.13.0.jar. > Record requires ASM8 Failed to transform library-3.5.2.aar (com.github.chuckerteam.chucker:library:3.5.2) to match attributes {artifactType=android-dex, asm-transformed-variant=DevelopmentDebug, dexing-enable-desugaring=true, dexing-is-debuggable=true, dexing-min-sdk=21, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}. > Could not resolve all files for configuration ':app:DevelopmentDebugRuntimeClasspath'. > Failed to transform moshi-1.13.0.jar (com.squareup.moshi:moshi:1.13.0) to match attributes {artifactType=android-asm-instrumented-jars, asm-transformed-variant=DevelopmentDebug, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.environment=standard-jvm, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}. > Execution failed for AsmClassesTransform: /Users/ritesh/.gradle/caches/modules-2/files-2.1/com.squareup.moshi/moshi/1.13.0/da685586facab9eb5c4fb630ce248be14e7da21b/moshi-1.13.0.jar. > Record requires ASM8 Failed to transform moshi-1.13.0.jar (com.squareup.moshi:moshi:1.13.0) to match attributes {artifactType=android-dex, asm-transformed-variant=DevelopmentDebug, dexing-enable-desugaring=true, dexing-is-debuggable=true, dexing-min-sdk=21, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.environment=standard-jvm, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}. > Execution failed for AsmClassesTransform: /Users/ritesh/.gradle/caches/modules-2/files-2.1/com.squareup.moshi/moshi/1.13.0/da685586facab9eb5c4fb630ce248be14e7da21b/moshi-1.13.0.jar. > Record requires ASM8

    2: Task failed with an exception.

    • What went wrong: Execution failed for task ':app:dexBuilderDevelopmentDebug'.

    Could not resolve all files for configuration ':app:DevelopmentDebugRuntimeClasspath'. Failed to transform moshi-1.13.0.jar (com.squareup.moshi:moshi:1.13.0) to match attributes {artifactType=android-asm-instrumented-jars, asm-transformed-variant=DevelopmentDebug, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.environment=standard-jvm, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime, org.jetbrains.kotlin.platform.type=jvm}. > Execution failed for AsmClassesTransform: /Users/ritesh/.gradle/caches/modules-2/files-2.1/com.squareup.moshi/moshi/1.13.0/da685586facab9eb5c4fb630ce248be14e7da21b/moshi-1.13.0.jar. > Record requires ASM8 `

    opened by ritesh-karmare 4
  • Pluto widget like option

    Pluto widget like option

    We use your library to monitor the status of requests and responses in our application. But we faced one problem - Pluto's widget leads to conflicts with automation tests of the application on the BrowserStack. It would be nice to add an option that will programmatically disable the use of the widget and Over Other App request, depending on the needs of the developers, leaving access only through the notification panel (as is done in some libraries). Perhaps by using the builder when initializing Pluto, something like - Pluto.Builder().overOtherAppsOption(false).build().initialize(this)

    Sincerely. Yaroslav.

    Describe the solution you'd like

    using the builder when initializing Pluto ->

    Pluto.Builder().overOtherAppsOption(false).build().initialize(context: this)

    fun overOtherAppsOption(isEnabled: Boolean = true) { if (isEnabled) allowOverOtherAppOption() }

    enhancement 
    opened by Yaroslav-Syrota-Tictrac 4
  • Response Body shows -

    Response Body shows - " ~ Binary Data " in Pluto

    No Response Body info in pluto for some apis while it works for apis we're calling through Retrofit

    To Reproduce Steps to reproduce the behavior:

    the code for making the call is this(I have added PlutoInterceptor in the okhttp client's code):

    public static String makeRequest(Request request) throws IOException, HttpException, JSONException, NoNetworkException
      {
          if (NetworkUtils.isNetworkAvailable(BaseApp.getContext()))
          {
              return doRequest(request);
          } else
          {
              throw new NoNetworkException(BaseApp.getContext().getResources().getString(R.string.no_network_message));
          }
      }
    
      private static String doRequest(Request request) throws IOException, HttpException, JSONException
      {
          OkHttpClient httpClient = Factory.getOkHTTPClient();
          Response response = httpClient.newCall(request).execute();
          String body = response.body().string();
      }
    

    Expected behavior Screenshot_2021-09-20-17-32-51-216_com aranoah healthkart plus

    Screenshots Screenshot_2021-09-20-17-32-40-945_com aranoah healthkart plus

    Smartphone (please complete the following information):

    • Device: Xiaomi
    • Library Version 1.0.1

    Additional context It shows the response data for call made through Retrofit

    fun getRetrofitInstance(type: Type, typeAdapter: Any): Retrofit {
    
                return Retrofit.Builder()
                        .baseUrl(HkpApi.RETROFIT_SERVER_BASE_URL)
                        .addCallAdapterFactory(RxErrorHandlingCallAdapterFactory.create())
                        .addConverterFactory(gsonConverterForCustomDeserializer(type, typeAdapter)!!)
                        .client(getOkHTTPClient(true))
                        .build()
    }
    
    bug 
    opened by poojasngh432 4
  • Need a cleaner way to integrate all default modules

    Need a cleaner way to integrate all default modules

    The new way of declaring separate dependencies for each module is great for extensibility. But leads to a very poorly readable Build.Gradle file, see how my project now has 20 dependencies for Pluto: image

    Is there a cleaner way of declaring all essential modules, especially for projects with not just 2 but 3 or more build variants? Or maybe have a dependency that has all modules bundled?

    PS: Love Pluto!

    enhancement 
    opened by ishaangarg 3
  • Is ANR detection in the scope of pluto v2.0?

    Is ANR detection in the scope of pluto v2.0?

    Is your feature request related to a problem? Please describe. Just saw that ANR detection was already part of pluto v1. Not able to find same in the new version 2.0. If it's not part of the scope, was there any issue with the previous implementation?

    Describe the solution you'd like Bring back the ANR detection as part of your latest release.

    Describe alternatives you've considered Considering using pluto v1 for now to detect ANRs.

    Additional context None

    enhancement 
    opened by ishaan1995 3
  • Crashes detected and show only white page, caused by divider

    Crashes detected and show only white page, caused by divider

    Describe the bug Crashes happens when we access datastore preferences menu, it only showing white pages. Does it had relation with material3 implementation?

    To Reproduce Steps to reproduce the behavior:

    1. Implement Material3, and pluto
    2. Click on DataStore Preferences menu
    3. Crash occured and showing blank pages

    Expected behavior It should shown the datastore debug menu.

    Screenshots image

    Smartphone (please complete the following information):

    • Device: Emulator and Windows Subsystem
    • OS: Android 13
    • Browser: Chrome
    • Library Version: 2.0.6

    Additional context Stack trace

    EXCEPTION : 
    java.lang.NoSuchMethodError: No static method Divider-oMI9zvI(Landroidx/compose/ui/Modifier;JFFLandroidx/compose/runtime/Composer;II)V in class Landroidx/compose/material3/DividerKt; or its super classes (declaration of 'androidx.compose.material3.DividerKt' appears in /data/app/~~WT1lt4pFbbsxQ0RLe_6jSQ==/com.awantunai.app-DWvJmNn8NEttl4xm6R_veQ==/base.apk)
    	 at com.pluto.plugins.datastore.pref.internal.compose.MainComposableKt.MainComposable(MainComposable.kt:54)
    	 at com.pluto.plugins.datastore.pref.internal.BaseFragment$onCreateView$1$1$1.invoke(BaseFragment.kt:46)
    	 at com.pluto.plugins.datastore.pref.internal.BaseFragment$onCreateView$1$1$1.invoke(BaseFragment.kt:38)
    	 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    	 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    	 at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:145)
    	 at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2375)
    	 at androidx.compose.runtime.ComposerImpl.skipToGroupEnd(Composer.kt:2666)
    	 at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:250)
    	 at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:249)
    	 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    	 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    	 at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    	 at androidx.compose.ui.platform.CompositionLocalsKt.ProvideCommonCompositionLocals(CompositionLocals.kt:177)
    	 at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:123)
    	 at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3.invoke(AndroidCompositionLocals.android.kt:122)
    	 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    	 at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    	 at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    	 at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt.ProvideAndroidCompositionLocals(AndroidCompositionLocals.android.kt:114)
    	 at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4.invoke(null:8)
    	 at androidx.compose.ui.platform.AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4.invoke(null:10)
    	 at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:145)
    	 at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2375)
    	 at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2643)
    	 + 27 more lines
    
    
    
    ==================
    
    Thread : MAIN (id : 2,  priority : Normal,  is_Daemon : false,  state : RUNNABLE)
    
    ==================
    
    APP STATE : 
    App Version : 4.17.2-alpha (216)
    Android  (OS : 12, API_Level : 32)
    Orientation : landscape
    is_Rooted : false
    
    ==================
    
    DEVICE INFO : 
    Model : Windows Subsystem for Android(TM)
    Screen : { height : 1080px, width : 1920px, density :  160, size :  14.0 inches }
    
    -------------------------------------
    report generated by Pluto (https://plutolib.com)
    
    bug 
    opened by JosephSanjaya 1
  • Please add support to Proto DataStore

    Please add support to Proto DataStore

    Is your feature request related to a problem? Please describe. Currently im using proto datastore to support encryption, but i can't seems attach watcher because it need to use Preferences generic class.

    Describe the solution you'd like Please add support Proto DataStore with custom serializer,

    enhancement 
    opened by JosephSanjaya 2
  • Not Found import com.pluto.plugin.Plugin in Release

    Not Found import com.pluto.plugin.Plugin in Release

    **Plugin Class not found in release variant ** I create a custom pluto plugin for some purpose but in release variant i can;t find class.

    Screenshots Click here to see image.

    Additional context I added i custom plugin and its work in debug variant but when i run in release mode, it give error for not finding plugin class. Can't import these files import com.pluto.plugin.Plugin import com.pluto.plugin.PluginConfiguration

    bug 
    opened by rohitjakhar 1
  • Delete Mock setting is not working

    Delete Mock setting is not working

    Describe the bug already added mock settings is not getting deleted by clicking on delete settings.

    To Reproduce Steps to reproduce the behavior:

    1. Go to particular mocked api
    2. Click on update mock
    3. click on delete mock settings

    Expected behavior mock should be deleted

    bug 
    opened by sudeepmotwani-cred 0
  • Improve pluto response search

    Improve pluto response search

    Pluto search just highlights the response, for long responses it's very hard to find what I'm searching. It would be perfect to have option to scroll to next found match (like Gander does it)

    enhancement network-plugin 
    opened by radimjanda754 2
Releases(v2.0.8)
  • v2.0.8(Dec 27, 2022)

    What's Changed

    • chore(pluto): selector ui fix by @srtvprateek in https://github.com/plutolib/pluto/pull/187
    • feature(tools): added ui tools by @srtvprateek in https://github.com/plutolib/pluto/pull/189
    • fix(tools): tools refactors & fixes by @srtvprateek in https://github.com/plutolib/pluto/pull/190
    • fix(logger): fix for ConcurrentModificationException by @srtvprateek in https://github.com/plutolib/pluto/pull/191
    • fix(logger): fix for NullPointerException by @srtvprateek in https://github.com/plutolib/pluto/pull/194
    • fix(sample): moshi adapter fix for sample module by @srtvprateek in https://github.com/plutolib/pluto/pull/199

    Full Changelog: https://github.com/plutolib/pluto/compare/v2.0.6...v2.0.8

    Source code(tar.gz)
    Source code(zip)
  • v2.0.6(Oct 5, 2022)

    What's Changed

    • Added possibility to clean up logs from the hosting activity by @mukeshsolanki in https://github.com/plutolib/pluto/pull/179
    • Add support for configurable main thread response threshold by @ShridharGoel in https://github.com/plutolib/pluto/pull/183
    • chore(sample): ui refactor by @srtvprateek in https://github.com/plutolib/pluto/pull/184
    • chore(plugins): plugins code structure refactoring by @srtvprateek in https://github.com/plutolib/pluto/pull/185

    New Contributors

    • @mukeshsolanki made their first contribution in https://github.com/plutolib/pluto/pull/179
    • @ShridharGoel made their first contribution in https://github.com/plutolib/pluto/pull/183

    Full Changelog: https://github.com/plutolib/pluto/compare/v2.0.5...v2.0.6

    Source code(tar.gz)
    Source code(zip)
  • v2.0.5(Aug 14, 2022)

    What's Changed

    • fix(network): multiline content getting truncated by @srtvprateek in https://github.com/plutolib/pluto/pull/174
    • fix(core): strict mode enabled for sample app by @srtvprateek in https://github.com/plutolib/pluto/pull/175
    • fix(shared_pref): moshi ExceptionInInitializerError fix by @srtvprateek in https://github.com/plutolib/pluto/pull/177
    • version bump 2.0.5 by @srtvprateek in https://github.com/plutolib/pluto/pull/178

    Full Changelog: https://github.com/plutolib/pluto/compare/v2.0.4...v2.0.5

    Source code(tar.gz)
    Source code(zip)
  • v2.0.4(Aug 9, 2022)

    What's Changed

    • chore(shared-pref): replaced gson with moshi by @srtvprateek in https://github.com/plutolib/pluto/pull/165
    • chore(sample): replaced gson with moshi by @srtvprateek in https://github.com/plutolib/pluto/pull/166
    • Update README for Timber Integration by @ishaangarg in https://github.com/plutolib/pluto/pull/168
    • fix(gradle): android core version downgraded to 1.6.0 by @srtvprateek in https://github.com/plutolib/pluto/pull/170
    • chore(network): network plugin revamped by @srtvprateek in https://github.com/plutolib/pluto/pull/171
    • chore(pluto): enable plugin bundles by @srtvprateek in https://github.com/plutolib/pluto/pull/172 🎉

    New Contributors

    • @ishaangarg made their first contribution in https://github.com/plutolib/pluto/pull/168

    Full Changelog: https://github.com/plutolib/pluto/compare/v2.0.3...v2.0.4

    Source code(tar.gz)
    Source code(zip)
  • v2.0.3(Jul 23, 2022)

    What's Changed

    • Update README.md by @srtvprateek in https://github.com/plutolib/pluto/pull/149
    • fix(sample_app): sample app code ui & code refactor by @srtvprateek in https://github.com/plutolib/pluto/pull/150
    • fix(plugins): README refactored by @srtvprateek in https://github.com/plutolib/pluto/pull/151
    • chore(network): Network response and request size #152 by @srtvprateek in https://github.com/plutolib/pluto/pull/153
    • fix(detekt): TopLevelPropertyNaming pattern regex fix by @srtvprateek in https://github.com/plutolib/pluto/pull/154
    • code refactor and url fixes by @srtvprateek in https://github.com/plutolib/pluto/pull/155
    • chore(gradle): dependencies restructured by @srtvprateek in https://github.com/plutolib/pluto/pull/156
    • feature(exceptions): ANR functionality to Exceptions plugin by @srtvprateek in https://github.com/plutolib/pluto/pull/157
    • chore(core): improved clear data functionality by @srtvprateek in https://github.com/plutolib/pluto/pull/158
    • chore(core): debounce listener refactor by @srtvprateek in https://github.com/plutolib/pluto/pull/159
    • fix(sample): lint error fix by @srtvprateek in https://github.com/plutolib/pluto/pull/160
    • chore(core): back press logic improved by @srtvprateek in https://github.com/plutolib/pluto/pull/161
    • chore(core): TabularDataView added by @srtvprateek in https://github.com/plutolib/pluto/pull/162
    • fix(exception): handled ANR methods in no-op lib by @srtvprateek in https://github.com/plutolib/pluto/pull/163

    Full Changelog: https://github.com/plutolib/pluto/compare/v2.0.2-beta2...v2.0.3

    Source code(tar.gz)
    Source code(zip)
  • v2.0.2-beta2(May 21, 2022)

    What's Changed

    • chore(plugins): added integration doc for plugins by @srtvprateek in https://github.com/plutolib/pluto/pull/123
    • chore: guidelines for submitting plugin added by @srtvprateek in https://github.com/plutolib/pluto/pull/128
    • fix(exceptions): menu file fixed by @srtvprateek in https://github.com/plutolib/pluto/pull/129
    • feat(logger): added feature to share all the logs by @srtvprateek in https://github.com/plutolib/pluto/pull/130
    • feat(dataStore_pref): show all the pref data and a sample by @rishabhsinghbisht in https://github.com/plutolib/pluto/pull/117
    • feat(datastore): inset based keyboard handeling by @rishabhsinghbisht in https://github.com/plutolib/pluto/pull/133
    • feat(datastore): add filter by @rishabhsinghbisht in https://github.com/plutolib/pluto/pull/134
    • fix(lint): daily build error fix by @srtvprateek in https://github.com/plutolib/pluto/pull/135
    • fix(build): fix for #19 by @srtvprateek in https://github.com/plutolib/pluto/pull/137
    • feat(rooms-database): adding rooms-database plugin by @srtvprateek in https://github.com/plutolib/pluto/pull/138
    • refactor(datastore): code cleanup by @srtvprateek in https://github.com/plutolib/pluto/pull/139
    • refactor(config): configs cleanup by @srtvprateek in https://github.com/plutolib/pluto/pull/140
    • fix(datastore): ui fixes by @srtvprateek in https://github.com/plutolib/pluto/pull/141
    • fix(datastore): ui improvements & code refactor by @srtvprateek in https://github.com/plutolib/pluto/pull/142
    • fix(datastore): publish readiness by @srtvprateek in https://github.com/plutolib/pluto/pull/143
    • fix(rooms-db): publish readiness by @srtvprateek in https://github.com/plutolib/pluto/pull/144
    • fix(pluto): plugin icons updated by @srtvprateek in https://github.com/plutolib/pluto/pull/145
    • fix(version): versioning logic updated by @srtvprateek in https://github.com/plutolib/pluto/pull/146
    • fix(gradle): compose dependencies fixed by @srtvprateek in https://github.com/plutolib/pluto/pull/147
    • fix(rooms-db): testing multiple db scenario by @srtvprateek in https://github.com/plutolib/pluto/pull/148

    Full Changelog: https://github.com/plutolib/pluto/compare/v2.0.1-beta...v2.0.2-beta2

    Source code(tar.gz)
    Source code(zip)
  • v2.0.1-beta(Apr 3, 2022)

    What's Changed

    • support for no-op added by @srtvprateek in https://github.com/plutolib/pluto/pull/116
    • chore(pluto): code restructuring by @srtvprateek in https://github.com/plutolib/pluto/pull/119
    • chore(detekt): update detekt, add compose rules, update baseline by @rishabhsinghbisht in https://github.com/plutolib/pluto/pull/118
    • chore(detekt): updated detekt baseline by @srtvprateek in https://github.com/plutolib/pluto/pull/122

    Full Changelog: https://github.com/plutolib/pluto/compare/v2.0.0...v2.0.1-beta

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Feb 14, 2022)

  • v1.1.3(Feb 8, 2022)

    • Add new method to Pluto to open the Ui without clicking the notification (https://github.com/mocklets/pluto/pull/110)
    • add gradle script to generate dependency graph (https://github.com/mocklets/pluto/pull/105)
    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Oct 18, 2021)

  • v1.1.0(Sep 29, 2021)

  • v1.0.9(Sep 26, 2021)

  • v1.0.8(Sep 20, 2021)

    • fix for multiple easy access handles (#79)
    • show setup easy access dialog only once (#75)
    • use app's UncaughtExceptionHandler is provided by the app (#74)
    • logger dialog ui fixes (#70)
    • bottomsheet scroll issue fixes (#68)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.7(Sep 1, 2021)

  • v1.0.6(Aug 30, 2021)

    • enable sharing options for request curl (#57)
    • Fix FileProvider manifest merging issue (#55)
    • Fix shared prefs setting description (#56)
    • enable sharing options for request curl (#54)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.5(Aug 29, 2021)

    • data transformation logic improved (#48)
    • mutability flag added to notification pending indents (#47)
    • migration to kotlin-parcelize (#46)
    • new share options added (#45)
    • minSdkVersion bumped to 21 (#44)
    • logger improvements (#42)
    • getting ready for contributions (#40)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.4(Aug 24, 2021)

    • bug fix https://github.com/mocklets/pluto/issues/19
    • javadoc publishing https://github.com/mocklets/pluto/pull/27
    • ktlint and detekt integration https://github.com/mocklets/pluto/commit/6e7534249338886f978bc96b09ecc4c85109813d
    Source code(tar.gz)
    Source code(zip)
  • v1.0.2-beta(Aug 6, 2021)

    • stability fixes https://github.com/mocklets/pluto/pull/15
    • attribution fixes https://github.com/mocklets/pluto/commit/1ff2e5153db8c907578df2325ceff7c13d2e9fc4
    • navigation refactor https://github.com/mocklets/pluto/commit/1902031605fb303a04cee66a7c44adbe32e46659
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Aug 2, 2021)

  • v1.0.0(Jul 30, 2021)

Owner
Pluto
Pluto is a on-device debugging framework for Android applications.
Pluto
traffic debugging library for android

TrafficMonitor About Display traffic per Activity.Observing traffic is used by TrafficStats API. OkHttp Interceptor observer is implementing. Demo Bai

Tetsuya Masuda 17 Feb 4, 2022
A surgical debugging tool to uncover the layers under your app.

Scalpel DEPRECATED! Android Studio 4.0's layout inspector now includes a live-updating 3D view. Use it! A surgical debugging tool to uncover the layer

Jake Wharton 2.8k Jan 9, 2023
Easier RxJava2 debugging with better stacktraces

Traceur Traceur enables easier debugging of RxJava2 exceptions, by appending the source of any asynchronous calls to the original exception. An exampl

Oisin O'Neill 493 Dec 18, 2022
A model-agnostic visual debugging tool for machine learning

Manifold This project is stable and being incubated for long-term support. Manifold is a model-agnostic visual debugging tool for machine learning. Un

Uber Open Source 1.6k Dec 25, 2022
Cordova plugin for Android Serial USB communication (easily connect an Arduino board to an Android device).

PR-DC cordova-plugin-serialusb Cordova plugin for Android Serial USB communication. This plugin makes a connection to the external board trivial, for

PR-DC 3 May 8, 2022
Stetho is a debug bridge for Android applications, enabling the powerful Chrome Developer Tools and much more.

Stetho Stetho is a sophisticated debug bridge for Android applications. When enabled, developers have access to the Chrome Developer Tools feature nat

Facebook 12.6k Jan 7, 2023
🔪Swiss-army knife for Android testing and development 🔪 ⛺

ADB Enhanced ADB-Enhanced is a Swiss-army knife for Android testing and development. A command-line interface to trigger various scenarios like screen

Ashish Bhatia 938 Dec 20, 2022
Under the Hood is a flexible and powerful Android debug view library. It uses a modular template system that can be easily extended to your needs, although coming with many useful elements built-in.

Under the Hood - Android App Debug View Library Under the Hood is a flexible and powerful Android debug view library. It uses a modular template syste

Patrick Favre-Bulle 217 Nov 25, 2022
Android library to record the network calls through the interceptor mechanism of the http clients.

Android Snooper Introduction Android Snooper is a library which helps in debugging issues while running the applications on android devices. One of th

Prateek 151 Nov 25, 2022
A Read-Eval-Print-Loop server for Android and SQLite

Android DebugPort Android DebugPort is a drop-in utility which allows you to write and execute code within your app's context, at runtime, and from th

Jason Feinstein 148 Nov 14, 2022
Easy android exception tracer and handler.

Introduction Lup is a small android library that can help you to tracking bug that causes application stopped working (force close). Whiting this libr

icodeu 4 Sep 29, 2022
Sources for the LiveBoot app for rooted Android devices

This is the sauce for the LiveBoot app. License Copyright © 2011-2020 Jorrit Chainfire Jongma This code is released under the GPLv3. LICENSE, COPYING.

Chainfire 131 Jan 9, 2023
android logcat

android logcat

Ji Sungbin 3 Dec 2, 2022
A local ADB shell for Android!

LADB A local ADB shell for Android! How does it work? LADB bundles an ADB server within the app libraries. Normally, this server cannot connect to the

Tyler 1.1k Jan 2, 2023
btrace(AKA RheaTrace) is a high performance Android trace tool which is based on Systrace

btrace README 中文版 btrace(AKA RheaTrace) is a high performance Android trace tool

Bytedance Inc. 1.2k Jan 4, 2023
Android QA/Debug tools to speed up and streamline the development progress.

Android Dev Tools is a library that contains various QA/Debug tools to speed up and streamline the development progress.

Trendyol Open Source 105 Dec 5, 2022
Pluto Logger is a Pluto plugin to manage and share your Debug logs

Pluto Logger Plugin Pluto Logger is a Pluto plugin to manage and share your Debug logs. It also comes with Timber support. ?? Integrate plugin in your

Pluto 1 Feb 8, 2022
Pluto is a on-device debugger for Android applications, which helps in inspection of HTTP requests/responses, capture Crashes and ANRs and manipulating application data on-the-go.

Pluto Pluto is a on-device debugger for Android applications, which helps in inspection of HTTP requests/responses, capture Crashes and ANRs and manip

Mocklets 8 Aug 22, 2022