Auto-generate the fastest possible Parcelable implementations for Java and Kotlin

Overview

This project is deprecated

It will still be maintained, but no new features will be added. Please use Parcelize, as it is the official way of generating Parcelable implementations on Android.

PaperParcel

Build Status

PaperParcel is an annotation processor that automatically generates the CREATOR and writeToParcel(...) implementations for you when writing Parcelable objects. PaperParcel fully supports both Java and Kotlin (including Kotlin Data Classes). Additionally, PaperParcel supports Google's AutoValue via an AutoValue Extension.

For more information please see the website.

Download

Java:

dependencies {
  compile 'nz.bradcampbell:paperparcel:2.0.8'
  annotationProcessor 'nz.bradcampbell:paperparcel-compiler:2.0.8'
}

Kotlin:

apply plugin: 'kotlin-kapt'

dependencies {
  compile 'nz.bradcampbell:paperparcel:2.0.8'
  compile 'nz.bradcampbell:paperparcel-kotlin:2.0.8' // Optional
  kapt 'nz.bradcampbell:paperparcel-compiler:2.0.8'
}

Development snapshots are available on JFrog OSS Artifactory.

License

Copyright 2016 Bradley Campbell.

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
  • Not compiling with Kotlin 1.0.6 (linux)

    Not compiling with Kotlin 1.0.6 (linux)

    Kotlin: 1.0.6

    Builds fail on two different linux ci servers, spitting out error: @PaperParcel can only be applied to classes that implement android.os.Parcelable. for every class.

    Our app builds without error on os x machines.

    Here is an example class:

    @PaperParcel
    data class Pagination(
            val total: Int = 0,
            val count: Int = 0,
            val perPage: Int = 0,
            val currentPage: Int = 1,
            val totalPages: Int = 1
    ) : PaperParcelable {
        companion object {
            @JvmField val CREATOR = PaperParcelPagination.CREATOR
        }
    }
    
    opened by DrewCarlson 18
  • What the heck is describe contents doing???

    What the heck is describe contents doing???

    Hello dear lib developer,

    thanks for this awesome PaperParcel library. I read your Blogpost with the history of this lib in kotlin and why it's interesting to also have it for java based android apps. However, i have the following problem:

    I use AutoValue and did simply include your library and added implements Parcelable. But now i'm forced to implement a "describeContents" field of type int in my builder / in my constructors of my AutoValue abstract class.

    What is this field supposed to do? And, is it really so important, that I have to add a setter for it? This feels a little bit too intrusive.

    opened by bjesuiter 16
  • Questions for v2.x

    Questions for v2.x

    Hello, I've been reviewing the library, and I must say, I really love the approach it has taken. I'm working with the Kotlin version mostly.

    I see that the v2.x branch has improved a lot over the current v1, most importantly:

    1. No new object creation is needed anymore vis PaperParcels.wrap
    2. Reflection is now totally gone.

    However, 1 seems to come with the penalty of more boilerplate. Is there a way, anyway really, we can possibly avoid the explicit CREATOR and writeToParcel hooks.

    Is it possible to use @Transient in place of the new @Exclude annotation?

    Also, the documentation doesn't mention anything about class and field level type adapters anymore. Are those still supported? Just curious though, as I do not personally use them

    Thank you.

    question 
    opened by kingsleyadio 16
  • Transient not working

    Transient not working

    @PaperParcel
    data class UIModel constructor(
            val id: String,
            val isGetting: Boolean = false,
            val pk: String? = null,
            @Transient val listData: List<Data>? = null,
            val taxonym: String? = null
    ) : PaperParcelable {
        constructor(
                id: String,
                isGetting: Boolean,
                pk: String?,
                taxonym: String?
        ) : this(
                id,
                isGetting,
                pk,
                null,
                taxonym
        )
    
        companion object {
            @JvmField
            val CREATOR = PaperParcelUIModel.CREATOR
        }
    }
    

    So first off I had to add in this secondary constructor in order to get this to build. The Data class is annotated @PaperParcel and implements PaperParcelable with the CREATOR companion object. Everything is in Kotlin. This was the only way I could get a successful build. There is a generated file, PaperParcelUIModel which has a writeToParcel method which correctly excludes the Transient field and a createFromParcel method which calls the secondary constructor. However when I, run, observe, and debug, my code I see that the Transient field with the List is still being included in the Bundle used to save and restore state. Any idea on why this is? Thanks, James.

    opened by jporcelli-tt 13
  • Interface (which implements Parcelable) in other module not working

    Interface (which implements Parcelable) in other module not working

    Hi,

    first of all, great work with registering adapters accross multiple modules! Thx

    My setup: paperparcel -> beta2 kotlin 1.0.6

    app-module: TestImpl (implements ITest) @ParcelPaper class TestImpl : ITest

    interface-module: ITest is an interface which implements Parcelable interface ITest : Parcelable

    -> problem: annotation processor throws the following exception: "error: @PaperParcel can only be applied to classes that implement android.os.Parcelable."

    if i put the interface in the same module or add "Parcelable" to "TestImpl" @ParcelPaper class TestImpl : ITest, Parcelable class it is working.

    IMPORTANT: it is working with this setup and kotlin 1.0.5-3. seems something changed in kapt3

    opened by Bodo1981 11
  • Custom TypeAdapter for Pair (kotlin) not working

    Custom TypeAdapter for Pair (kotlin) not working

    Your library is really great, but i get an error message writing a custom typeadapter

    @RegisterAdapter object PairAdapter : TypeAdapter<Pair<String, String>> {
      override fun readFromParcel(source: Parcel): Pair<String, String> {
        return Pair(source.readString(), source.readString())
      }
    
      override fun writeToParcel(value: Pair<String, String>, dest: Parcel, flags: Int) {
        dest.writeString(value.first)
        dest.writeString(value.second)
      }
    }
    

    data class with pair object:

    @PaperParcel data class ObjectWithPair(val pair: Pair<String, String>) : Parcelable {
      companion object {
        @JvmField val CREATOR = PaperParcelObjectWithPair.CREATOR
      }
    
      override fun describeContents() = 0
    
      override fun writeToParcel(dest: Parcel, flags: Int) {
        PaperParcelObjectWithPair.writeToParcel(this, dest, flags)
      }
    }
    

    error message: Unknown type kotlin.Pair<java.lang.String,java.lang.String>. Define a TypeAdapter to handle custom types. For more info, see https://github.com/grandstaish/paperparcel.

    i have also tested to explicitly define the typedapter with the full qualified package name like the error mentioned, but this didn´t work either

    @RegisterAdapter object PairAdapter : TypeAdapter<kotlin.Pair<java.lang.String, java.lang.String>> {
    ...
    }
    

    The example DateTypeAdapter is working as expected but not the Pair Adapter. Maybe you could have a look at it.

    I am using the newest version: 2.0.0-beta1

    Thx

    enhancement 
    opened by Bodo1981 10
  • Support for arbitrary parceling/unparceling

    Support for arbitrary parceling/unparceling

    I'd like to have a generic way to use the generated wrap/getContents methods for a given type. In particular, I'd like a single class that has these two methods (that delegates out to the various generated FooParcel/BarParcel classes):

    public static <ORIG, PARCELABLE extends Parcelable> PARCELABLE wrap(ORIG object)
    public static <ORIG, PARCELABLE extends Parcelable> ORIG unwrap(PARCELABLE object)
    

    I started implementing this but realized I should check with you first to make sure this is an enhancement you'd be amenable to. Thoughts?

    enhancement 
    opened by edenman 10
  • Question: would it be possible to use extensions

    Question: would it be possible to use extensions

    Having annotation is quite small code change. But would it be possible to have extension which accepts an object and saves/load it from parcel.

    At least current API could be improved with extension to avoid using util classes

    enhancement 
    opened by emartynov 9
  • Proguard rules keeping all classes

    Proguard rules keeping all classes

    The proguard rules are currently keeping all PaperParcel classes and classes annotated with PaperParcel.

    Is there reason the rules couldn't just keep class members instead?

    opened by josh-burton 8
  • Doesn't work for multiple modules

    Doesn't work for multiple modules

    I have separated my code in 2 Android modules. I have some @PaperParcel data classes (Kotlin) in one package and some in the other. I put the compile in both modules but I get error when building the project.

    bug 
    opened by tsuijten 7
  • Kotlin delegated property breaks compilation

    Kotlin delegated property breaks compilation

    Say we have a simple Kotlin data class:

    @PaperParcel
    data class File(val filePath: String) {
    }
    

    We want to determine the file name using the path. One approach is to add a function:

    fun name(): String {
      val name: String
      // Calculate file name from path
      return name
    }
    

    This makes us calculate the name often. Instead, we choose to use a delegated property:

    val name: String by lazy {
        // Calculate file name from path. Done only once
    }
    

    This breaks the compiler as the name is a delegated property, not a member property. Using @GetterMethodName also doesn't work for this reason.

    bug 
    opened by MariusVolkhart 7
  • Gradle configuration problem in 2.0.7

    Gradle configuration problem in 2.0.7

    Hi! I think I suddenly break gradle configuration with my recent PR with incap support.

    For version 2.0.7 to work properly I have to add both paperparcel and paperparcel-api artifacts even despite the fact that paperparcel-api declared using api configuration inside paperparcel module.

    opened by bejibx 5
  • kotlin_version = '1.2.20' kaptGenerateStubsReleaseKotlin FAILED at

    kotlin_version = '1.2.20' kaptGenerateStubsReleaseKotlin FAILED at "com.android.library" module

    I have an app with 3 modules:mobile(mobile app), wear(watch app)and core(contains some common entities).

    I tried to use paperparcel in mobile and core modules. In mobile module(plugin: 'com.android.application') it works fine, but in core module(plugin: 'com.android.library') this exception was caught: org.jetbrains.kotlin.util.ReenteringLazyValueComputationException

    :core:kaptGenerateStubsReleaseKotlin FAILED

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':core:kaptGenerateStubsReleaseKotlin'.

    Internal compiler error. See log for more details

    My file in core module:

    core->build.gradle:

    apply plugin: 'com.android.library' apply plugin: "kotlin-android" apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt'

    android { compileSdkVersion 24 buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 19
    }
    

    }

    dependencies { compile 'com.google.android.gms:play-services-wearable:8.1.0'

    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    
    compile 'nz.bradcampbell:paperparcel:2.0.0'
    compile 'nz.bradcampbell:paperparcel-kotlin:2.0.0'
    kapt 'nz.bradcampbell:paperparcel-compiler:2.0.0'
    

    }

    Also I enabled org.gradle.parallel and tried to add generateStubs = true but it didn't resolve this issue.

    opened by shkrebets 0
  • Unresolved reference: PaperParcelXXX using PaperParcel version 2.04 and kotlin 1.1.61

    Unresolved reference: PaperParcelXXX using PaperParcel version 2.04 and kotlin 1.1.61

    I can't build an apk and get this error msg: Error:(12, 33) Unresolved reference: PaperParcelState

    PaperParcelState:

    @PaperParcel data class State(
                val count: Int,
                val modificationDate: Date
        ) : PaperParcelable {
            @Transient
            val somethingToExclude = 10000L
    
            companion object {
                @JvmField
                val CREATOR = PaperParcelState.CREATOR
            }
        }
    

    project build.gradle:

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    
    buildscript {
        ext.kotlin_version = '1.1.61'
        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.0.1'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    module build.gradle:

    apply plugin: 'kotlin-kapt'
    
    apply plugin: 'com.android.application'
    
    apply plugin: 'kotlin-android'
    
    apply plugin: 'kotlin-android-extensions'
    
    android {
        compileSdkVersion 26
        defaultConfig {
            applicationId "com.example.ruslan.myapplication"
            minSdkVersion 15
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
        implementation 'com.android.support:appcompat-v7:26.1.0'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        implementation 'nz.bradcampbell:paperparcel:2.0.4'
        implementation 'nz.bradcampbell:paperparcel-kotlin:2.0.4'
        kapt 'nz.bradcampbell:paperparcel-compiler:2.0.4'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.1'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    }
    
    

    Could you please help me resolve this issue?

    opened by leshchenko 8
  • Build failure with Kotlin 1.1.4-3 and KAPT.

    Build failure with Kotlin 1.1.4-3 and KAPT.

    Looks like the fields that are being generated have different names from the ones that are defined in the data class.

    Data Class

    @PaperParcel
    data class User(
        val id: Long,
        val firstName: String,
        val lastName: String
    ) : PaperParcelable {
      companion object {
        @JvmField val CREATOR = PaperParcelUser.CREATOR
      }
    }
    

    Build Error

    Information:Gradle tasks [:app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:mockableAndroidJar, :app:compileDebugAndroidTestSources, :app:compileDebugUnitTestSources, :app:compileDebugSources]
    Error:No field match found for the constructor parameter "arg0" in com.example.login.User. Constructor arguments are matched with fields via their name and type.
    Error:No field match found for the constructor parameter "arg1" in com.example.login.User. Constructor arguments are matched with fields via their name and type.
    Error:No field match found for the constructor parameter "arg2" in com.example.login.User. Constructor arguments are matched with fields via their name and type.
    Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
    > Compilation failed; see the compiler error output for details.
    

    PS: I am using Android Studio 3.-0 Beta 7

    opened by rjoncontract 1
  • CREATOR of an improper type is not reported as an error

    CREATOR of an improper type is not reported as an error

    Hi, I've just found my own bug in this code causing an IllegalArgumentException:

    @PaperParcel
    data class MultiSearchState(
            val searchQuery: String? = null,
            val activeSearchType: SearchType = SearchType.MOVIES
    ) : ViewState, PaperParcelable {
    
        companion object {
            @JvmField val CREATOR = PaperParcelSearchState_SearchStarted.CREATOR
        }
    }
    

    The problem was the CREATOR val referring to another's class (SearchState.SearchStarted not MultiSearchState) creator. That's totally my mistake but it might be a good idea to show some error or warning. It's probably an often mistake after copy/paste. Anyway, thanks for the great library! It's the best.

    opened by sevar83 0
  • Classes are generated, but not recognized in AS

    Classes are generated, but not recognized in AS

    Hi, I am trying to use PaperParcel in my data class models, it does compile and run, but Android Studio is not indexing/recognizing the generated files. Android Studio version 2.3.3 Kotlin version 1.1.3-2

    My project is a multi-module project and I am using PaperParcel in one library module. My project has multiple flavors and build types. I see the generated code under $library/build/generated/source/kapt/release/$packages_path

    opened by BugsBunnyBR 13
Releases(parent-2.0.8)
  • parent-2.0.8(Jun 2, 2019)

  • parent-2.0.7(Jun 2, 2019)

  • parent-2.0.6(May 1, 2018)

  • parent-2.0.5(Jan 17, 2018)

  • parent-2.0.4(Aug 28, 2017)

  • parent-2.0.3(Aug 28, 2017)

    • Add optional Lombok support (thanks to @ayanyev and @InviaTravel)
    • Fix: compile issue when passing Parcelable creators of a generic type
    • Fix: internal properties in kotlin
    Source code(tar.gz)
    Source code(zip)
  • parent-2.0.2(Jul 31, 2017)

    Fix: resolve generic field types for fields contained in subclasses (#176) Fix: crash when a superclass and a subclass have a field with the same name (#189)

    Source code(tar.gz)
    Source code(zip)
  • parent-2.0.1(Apr 2, 2017)

    • Fix: broken build using kotlin 1.1.2.
    • Fix: error message for non-writable types would sometimes tell you a field was private when it wasn't.
    • Fix: Java keywords could not be used as property names as of Kotlin 1.1.0.
    Source code(tar.gz)
    Source code(zip)
  • parent-2.0.0(Feb 11, 2017)

    • Remove RegisterAdapter. ProcessorConfig should be used instead.
    • Undeprecate PaperParcel.Options.
    • Consolidate ProcessorConfig API and PaperParcel.Options as they share many of the same APIs.
    • Add flag for disabling Serializable support to PaperParcel.Options.
    • More descriptive error messages.
    • Allow PaperParcel class inheritance.
    • Allow java.lang.Object adapters.
    • Fix: Jack compilation.
    • Fix: property method matching when variables start with 'is'
    Source code(tar.gz)
    Source code(zip)
  • parent-2.0.0-beta2(Dec 29, 2016)

    • Added ProcessorConfig API for adding custom TypeAdapters and configuring other options in the processor.
    • Deprecated RegisterAdapter API in favour of ProcessorConfig
    • Deprecated PaperParcel.Options API in favour of ProcessorConfig
    • Re-added Serializable support
    • Performance improvements in the compiler and in the generated code
    • Fix: allow use of "new" as a variable name in kotlin (as it isn't a kotlin keyword)
    • Validate kapt version and give a helpful error message if the wrong version is being used
    • Fix: allow use of contravariant generic types
    • Greatly improve type matching system. This allows for adapters to handle complex generic types, including intersection types.
    Source code(tar.gz)
    Source code(zip)
  • parent-2.0.0-beta1(Nov 27, 2016)

    • Change package name from nz.bradcampbell.paperparcel to just paperparcel
    • TypeAdapters can now list other TypeAdapters or Classes as constructor parameters to allow for adding proper support for non-standard container and types (and more).
    • Removed "wrapper" types. Each wrapper is replaced with a Parcelable.Creator and a writeToParcel implementation for classes to manually use/call in their model objects.
    • Removed the TypedParcelable interface as wrappers no longer exist
    • Removed PaperParcels class and all reflection calls
    • Removed Mapping file
    • Removed support for Serializable out of the box. Users can opt-in to using Serializable via explicit TypeAdapters
    • Removed AccessorName API
    • Renamed DefaultAdapter to RegisterAdapter and removed all other types of adapter scoping (field and class scopes) as they served no purpose
    • Force annotated classes to implement Parcelable as wrappers have been removed
    • Greatly improve usage from Java
    • Add a more powerful abstraction for excluding fields
    • Package paperparcel as an AAR (includes proguard rules)
    • Adapter instances are defined as static constants to reduce the amount of allocations when parcelling. All built-in TypeAdapters are singleton instances where they can be.
    • Method count of output greatly reduced (as well as output being cleaner and easier to understand)
    • Improved error messaging
    • Fix: multi module builds
    • Release now on jcenter and maven central instead of jitpack
    Source code(tar.gz)
    Source code(zip)
A somewhat copy past of Jetbrain's code from the kotlin plugin repo to make it humanly possible to test Intellij IDEA kotlin plugins that work on kotlin

A somewhat copy past of Jetbrain's code from the kotlin plugin repo to make it humanly possible to test Intellij IDEA kotlin plugins that work on kotlin

common sense OSS 0 Jan 20, 2022
A repo to experiment with Continuation R, A implementations in Kotlin

A repo to experiment with Continuation R, A implementations in Kotlin

Simon Vergauwen 12 May 15, 2022
A simplified interface for interacting with in-memory cache implementations on the JVM

This library provides a simplified interface for interacting with in-memory cache implementations on the JVM. Think: "SLF4J but for caching"

null 5 Nov 29, 2022
RecyclerView Adapter Library with different models and different layouts as convenient as possible.

RecyclerView Presenter Convenience library to handle different view types with different presenters in a single RecyclerView. How to install repositor

Jan Rabe 86 Dec 26, 2022
Condenses KDoc where possible.

KDocCondenser Template ToDo list Create a new IntelliJ Platform Plugin Template project. Get known with the template documentation. Verify the pluginG

Jacob Wysko 0 Nov 3, 2021
A Kotlin Script which Auto-Create And Assign Gitlab MergeRequests

A Kotlin Script which create merge request automatically and assign it to a developer for review based on a startegy(Currently Queue).

Hamidreza Sahraei 6 Jun 7, 2022
Recycler-coroutines - RecyclerView Auto Add Data Using Coroutines

Sample RecyclerView Auto Add With Coroutine Colaborator Very open to anyone, I'l

Faisal Amir 8 Dec 1, 2022
This is a Kotlin multiplatform template project used to generate and deploy a natively compiled AWS lambda function using the custom runtime.

Overview This is a Kotlin multiplatform template project used to generate and deploy a natively compiled AWS Lambda function using a custom runtime. U

Greg Steckman 5 Jun 25, 2022
A Gradle plugin for Kotlin Multiplatform projects that generate a XCFramework for Apple targets or a FatFramework for iOS targets, and manages the publishing process in a CocoaPod Repository.

KMP Framework Bundler KMP Framework Bundler is a Gradle plugin for Kotlin Multiplatform projects that generate a XCFramework for Apple targets or a Fa

Marco Gomiero 17 Oct 29, 2022
Koin Annotations - help declare Koin definition in a very fast and intuitive way, and generate all underlying Koin DSL for you

The goal of Koin Annotations project is to help declare Koin definition in a very fast and intuitive way, and generate all underlying Koin DSL for you. The goal is to help developer experience to scale and go fast ?? , thanks to Kotlin Compilers.

insert-koin.io 68 Jan 6, 2023
[prototype] Generate TypeScript interfaces from Kotlin classes

Kotlinx Serialization TypeScript Generator Kotlinx Serialization TypeScript Generator creates TypeScript interfaces from Kotlinx Serialization classes

null 17 Dec 18, 2022
This program will read from your android application string.xml file and generate translated strings.xml files in your preferred languages using google sheet.

Localize your application content This program will read from your application string.xml file and generate translated strings.xml files in your prefe

DhiWise 4 Jul 29, 2022
💫 A Gradle Plugin to generate your networking code from Swagger

Swagger Gradle Codegen A Gradle plugin to generate networking code from a Swagger spec file. This plugin wraps swagger-codegen, and exposes a configur

Yelp.com 399 Nov 28, 2022
Android Spinner Dialog Library supported on both Java and Kotlin, Use for single or multi selection of choice

SpinnerDialog Android Spinner Dialog Library, Use for single or multi selection of choice Android UI Download To include SpinnerDialog in your project

Hamza Khan 55 Sep 15, 2022
StaticLog - super lightweight static logging for Kotlin, Java and Android

StaticLog StaticLog is a super lightweight logging library implemented in pure Kotlin (https://kotlinlang.org). It is designed to be used in Kotlin, J

Julian Pfeifer 28 Oct 3, 2022
Kotlin and Java API for generating .swift source files.

SwiftPoet SwiftPoet is a Kotlin and Java API for generating .swift source files. Source file generation can be useful when doing things such as annota

Outfox 232 Jan 2, 2023
Unofficial Actions on Google SDK for Kotlin and Java

Actions On Google Client Library This is a port of the official Node.js SDK to Kotlin. This can also be used from Java and any JVM language. Quick Fac

Ticketmaster® & Live Nation Entertainment® 118 Oct 3, 2022
Theia - A Kotlin program used to analyze and discover backdoors in Minecraft Java 1.12.2 forge mods

Theia A Kotlin program used to analyse and discover backdoors in Minecraft Java

null 7 Jan 13, 2022
A tool that can mock out an existing Appium session, supports both Java and Kotlin.

appium-mocker A tool that can mock out an existing Appium session, supports both Java and Kotlin. How to install latest appium-mocker Beta/Snapshots <

aaronLLL 21 Jun 8, 2022