RxJava bindings for Android

Related tags

GUI RxAndroid
Overview

RxAndroid: Reactive Extensions for Android

Android specific bindings for RxJava 3.

This module adds the minimum classes to RxJava that make writing reactive components in Android applications easy and hassle-free. More specifically, it provides a Scheduler that schedules on the main thread or any given Looper.

Communication

Since RxAndroid is part of the RxJava family the communication channels are similar:

Binaries

allprojects {
    repositories {
        maven { url "https://oss.jfrog.org/libs-snapshot" }
    }
}

dependencies {
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    // Because RxAndroid releases are few and far between, it is recommended you also
    // explicitly depend on RxJava's latest version for bug fixes and new features.
    // (see https://github.com/ReactiveX/RxJava/releases for latest 3.x.x version)
    implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
}
  • RxAndroid:
  • RxJava:

Additional binaries and dependency information for can be found at search.maven.org.

Build

To build:

$ git clone [email protected]:ReactiveX/RxAndroid.git
$ cd RxAndroid/
$ ./gradlew build

Further details on building can be found on the RxJava Getting Started page of the wiki.

Sample usage

A sample project which provides runnable code examples that demonstrate uses of the classes in this project is available in the sample-app/ folder.

Observing on the main thread

One of the most common operations when dealing with asynchronous tasks on Android is to observe the task's result or outcome on the main thread. Using vanilla Android, this would typically be accomplished with an AsyncTask. With RxJava instead you would declare your Observable to be observed on the main thread:

Observable.just("one", "two", "three", "four", "five")
    .subscribeOn(Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(/* an Observer */);

This will execute the Observable on a new thread, and emit results through onNext on the main thread.

Observing on arbitrary loopers

The previous sample is merely a specialization of a more general concept: binding asynchronous communication to an Android message loop, or Looper. In order to observe an Observable on an arbitrary Looper, create an associated Scheduler by calling AndroidSchedulers.from:

Looper backgroundLooper = // ...
Observable.just("one", "two", "three", "four", "five")
    .observeOn(AndroidSchedulers.from(backgroundLooper))
    .subscribe(/* an Observer */)

This will execute the Observable on a new thread and emit results through onNext on whatever thread is running backgroundLooper.

Bugs and Feedback

For bugs, feature requests, and discussion please use GitHub Issues. For general usage questions please use the mailing list or StackOverflow.

LICENSE

Copyright 2015 The RxAndroid authors

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
  • [RFC] Improve support for auto-unsubscribing observables and newer language/API levels

    [RFC] Improve support for auto-unsubscribing observables and newer language/API levels

    Currently, using Observables in Android components that have access to Context (or are themselves) requires one to carefully think about detaching from these sequences as part of the component life-cycle, since otherwise a closure the sequence holds a (strong) reference to might leak the current context until the time the sequence finishes and releases all subscribers.

    A good example are configuration changes, where Android first destroys, then recreates an Activity, but observables might still be holding on to a subscriber created within the scope of that Activity. Even with retained fragments that detach from their host activity, it's easy enough to leak the attached context indirectly by holding on to a view first created through that context (every view in Android has a strong reference to the Activity context it was first created in.)

    This ticket aims to find solutions to improve this situation, potentially by leveraging newer Android API levels where available, and/or add first class support for newer Java language levels (Java 8/Retrolambda)

    Some suggestions that have been made already follow.

    Android 14+ APIs

    One option would be to make use of Activity life cycle callbacks: http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html

    This might allows us to unsubscribe once Android is about to destroy an activity.

    Java 8 lambdas and Retrolambda

    Part of the problem is that every "lambda" in Java 7 or below is an anonymous inner class that will hold a strong reference to the outer class, even if it's a pure function that does not access state outside the lambda. Java 8 + Retrolambda could help here, since pure functions will be materialized as static methods that hold no reference back to their owner.

    http://cr.openjdk.java.net/~briangoetz/lambda/lambda-translation.html https://github.com/orfjackal/retrolambda

    Weak subscribers

    We've taken several stabs at this and always dismissed the solution. The idea was to use WeakReferences to bind subscribers and lambdas. The problem with his approach is that it doesn't work with lambdas, since the only incoming reference would be weak, and they are eligible for GC the instant they're created. There might still be other ways to achieve this, however, I'll leave it open for discussion.

    help wanted 
    opened by mttkay 66
  • Reactive Dialog

    Reactive Dialog

    This PR adds a DialogFragment returning an Observable.

    This allows for composition of actions over UI interactions (asking a user for data, confirmation etc..)

    This is the first PR in a series of backport from work we did. To help with comunication and my refactoring I'll issue the PR one by one as they get merged in or declined.

    opened by Dorvaryn 43
  • Proposal to add RxIdlingResource for Espresso testing

    Proposal to add RxIdlingResource for Espresso testing

    Problem: Espresso does not know about RxJava's async mechanisms, so it doesn't wait for subscriptions to finish before continuing on to the next testing step. Thereby, Espresso testing when using RxJava does not work out-of-the-box.

    Solution: I've created a RxIdlingResource class that tracks subscriptions via a RxJavaObservableExecutionHook plugin and is registered with Espresso as an IdlingResource. This gives Espresso the knowledge it needs to wait or proceed with respect to RxJava background processes.

    Also, since registering the plugin has to be done at a specific time in the startup process, I've created an RxAndroidJUnitRunner class that takes care of the setup.

    Proposal Since this project seems to fill the gaps between RxJava and the standard Android api's, it seems reasonable to add RxIdlingResource to fill the gap between RxJava and the Espresso testing framework. If everyone agrees that this belongs in the RxAndroid project I can go ahead and create a PR.

    opened by rosshambrick 35
  • Java 7

    Java 7

    Quick poll: anyone here who requires RxAndroid to support Java 6? It would be ideal if we could make a cut and drop Java 6 support. Any JARs built with language level 7 will NOT work with Android apps that are compiled against level 6, since Java 7 introduces new byte code instructions so is not backwards compatible.

    The problem is that it's easy to miss that when juggling multiple SDKs and JVMs on your dev machine. I'm using jEnv right now to do that, but we already encountered an issue where a Nebula plugin was compiled and deployed under Java 7 and would fail the RxAndroid build.

    Considering that Java 6 has reached end of life, should we support it or not? It's difficult to say, since it definitely took us a while to make the switch to Java 7 on Android.

    question 
    opened by mttkay 26
  • First attempt at adding Account Observable

    First attempt at adding Account Observable

    This is a rough draft, produced from code, I have been using for a while already.

    Note, that unlike most other operators in the library OnSubscribeAddAccount is left public to allow people to better adjust it for various needs - the code is already too sophisticated and does too much to try and stuff everything in bunch of static methods.

    Before finishing this, I would like to know answers to following questions:

    1. How do I test it? Robolectric 2.3 does not have proper shadow for AccountManager, so should I just write my own? By the way, are there plans to update to Robolectric 2.4, perhaps by employing SDK manager plugin to fetch dependencies? I am aware of #1369, but at current rate it is not going resolve itself.
    2. What are project guidelines (ok, what should those be) regarding use of annotations? Complex AccountManager methods need @Nullable annotation rather badly, but which one to choose? Android ones? IntelliJ ones (used so far, because they are easiest to get). Perhaps, something more complex (Checker Framework)?
    opened by Alexander-- 24
  • RX Android & Proguard

    RX Android & Proguard

    Hi,

    I ran into a small issue when releasing into pro-guard.The method AndroidSchedulers.mainThread() makes the subscription to never be called:

    This will not work (Hello will never show):

    mRestService.login(email, password)
                    .flatMap(user -> Observable.zip(
                            mRestService.checkUuid(user._token), 
                            Observable.just(user),
                            (v, u) -> (User) u // Pass user throught
                    ))
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(user -> { Log.v(TAG, "Hello") }, throwable -> { });
    

    This works as expected :

    mRestService.login(email, password)
                    .flatMap(user -> Observable.zip(
                            mRestService.checkUuid(user._token), 
                            Observable.just(user),
                            (v, u) -> (User) u // Pass user throught
                    ))
                    .subscribeOn(Schedulers.io())
                    //  .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(user -> runOnUiThread(() -> { Log.v(TAG, "Hello") }), throwable -> { });
    

    I'm using Jack and the latest AndroidStudio Gradle plugin (2.2.2) I've attached my proguard file in case you want to have a look: proguard-rules.txt

    needs-info 
    opened by supercairos 22
  • Reverted some View and Widget Observables to use simple objects instead of Event objects

    Reverted some View and Widget Observables to use simple objects instead of Event objects

    Recent changes to UI observables (particularly, 406bf6840fff2a98316faec8702311f9322047aa) added number of POJO event classes as well as some of associated infrastructure. Some of those were really useful, but few others: click, text change and toggle (aka "input") event classes look forced, as if those were added solely to match style of similar methods. Unfortunately, as explained below, they aren't very useful and accomplish nothing, except adding redundant entities and increasing range of possible issues.

    Few possible uses for event classes, that come to mind are:

    1. Encapsulating state, not stored in event source itself. This is the only sensible use for event classes in Android, which is why OnItemClickEven and OnListViewScrollEvent are legitimately useful and were added for good reason. Clearly not the case for click, text change and CompoundButton toggle events.
    2. Storing associated data, for example for doing reduce on it. None of the event classes in question (except OnSubscribeTextViewInput) contain any useful state. Click and compound button switch are self-descriptive. CharSequence, returned by TextView.getText(), can be mutable, and as such, is dangerous to use, unless immediately converted to string (which means, that at least one map call have to be done anyway).
    3. Turning emission of same object into emission of multiple distinct objects. RxJava already have timestamp operator for this.
    4. Passing those events somewhere else, possibly after serializing them. Doing so with all 3 events in question is pointless and even potentially dangerous. All of them contain little besides strong reference to event source, which makes them potential source of memory leaks, and makes it harder to write Rx plugins, detecting those.

    This merge request adds back Observables with tests and corresponding static methods, emitting plain View, TextView and Boolean objects. It also deprecates event-based methods. While we are at it, I have also renamed "input" to "toggle" as original naming choice was just plain bad.

    opened by Alexander-- 21
  • Added reactive versions of Activities and Fragments

    Added reactive versions of Activities and Fragments

    Subclasses of the common Activity and Fragment classes, extended so you can easily get an Observable<LifecycleEvent>.

    I wanted to get the ball rolling on this discussion (since it's the second part of #12, as I viewed it). I am fully aware this may be a controversial move. :P

    I tried working up a version using ActivityLifecycleCallbacks, but it felt too weird to have one solution for Activity and another for Fragment. Also, watching #84 has caused me to realize there are multiple places where being able to hook into the Activity or Fragment directly will save a lot of boilerplate.

    I purposefully chose to not rename the subclasses. That way, when you extend, say, Activity the package resolution dialog will show this version as well.

    One conspicuously missing extension is ActionBarActivity, since it depends on #83.

    opened by dlew 21
  • CompositeException Behavior

    CompositeException Behavior

    There are possibly improvements that need to be made specific to Android related to CompositeException.

    History of the discussion and work on this can be found at https://github.com/ReactiveX/RxJava/issues/1405

    opened by benjchristensen 21
  • Proposal/rehash: Use async Messaging

    Proposal/rehash: Use async Messaging

    This PR changes the default main thread Handler to use asynchronous messaging. This allows us to avoid VSYNC locking that otherwise pushes every post to the next frame.

    This works by relying on the new Handler.createAsync factory in API 28, and on pre-28 it will reflectively fall back to a private constructor of Handler (that's always existed) to enable this.

    This should give us the original goal of #228 with the safety of still leaning on the main thread looper and not trying to directly run things ourselves and risking deadlocks/trampolining issues.

    To use SDK 28, updated the AGP plugin and gradle along the way.

    Prior discussion below

    ~This is a main thread scheduler that's optimized to directly execute given Runnables if it's already on the main thread, rather than always scheduling.~

    ~Prior art: #228~

    ~Kept as a standalone implementation right now for review and discussion, but ideally this implementation would replace the existing main thread scheduler implementation as the default.~

    opened by ZacSweers 20
  • Can't use AndroidSchedulers.mainThread() after migrating to RxJava2?

    Can't use AndroidSchedulers.mainThread() after migrating to RxJava2?

    After migrating to RxJava2. observeOn doesn't accept AndroidSchedulers. Is there a alternate in Schedulers for AndroidSchedulers.mainThread() or how should i solve this issue ?

    OLD versions RxAndroid - 1.2.1 RxJava - 1.1.6

    Migrated Versions RxAndroid - 2.0.1 RxJava - 2.0.3

     rxHelper.manageSubscription(
                    mDataManager.getProducts()
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new SingleSubscriber<List<Items>>() {
                        @Override
                        public void onSuccess(List<Items> products) {
                            getView().hideProgress();
                            if (!products.isEmpty()) {
                                getView().showText(String.valueOf(products.get(0).getName()));
                                getView().showItems(products);
                            } else {
                                getView().showEmpty();
                            }
                        }
    
                        @Override
                        public void onError(Throwable error) {
                            Timber.e(error, "There was an error retrieving the products");
                            getView().hideProgress();
                            getView().showError();
                        }
                    })
            );
    
    opened by AruLNadhaN 18
  • java.lang.NoSuchMethodError

    java.lang.NoSuchMethodError

    OkHttp Dispatcher(48197)

    java.lang.NoSuchMethodError

    No static method disposed()Lio/reactivex/rxjava3/disposables/Disposable; in class Lio/reactivex/rxjava3/disposables/Disposable; or its super classes (declaration of 'io.reactivex.rxjava3.disposables.Disposable' appears in base.apk!classes3.dex)

    1 io.reactivex.rxjava3.android.schedulers.HandlerScheduler$HandlerWorker.schedule(HandlerScheduler.java:91)

    2 io.reactivex.rxjava3.core.Scheduler$Worker.schedule(Scheduler.java:402) 3 io.reactivex.rxjava3.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.schedule(ObservableObserveOn.java:161) 4 io.reactivex.rxjava3.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.onComplete(ObservableObserveOn.java:139) 5 io.reactivex.rxjava3.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onComplete(ObservableSubscribeOn.java:68) 6 retrofit2.adapter.rxjava3.BodyObservable$BodyObserver.onComplete(BodyObservable.java:70) 7 retrofit2.adapter.rxjava3.CallEnqueueObservable$CallCallback.onResponse(CallEnqueueObservable.java:66) 8 retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:161) 9 okhttp3.RealCall$AsyncCall.run(RealCall.kt:138) 10 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 11 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 12 java.lang.Thread.run(Thread.java:929)

    What is the problem and how to solve it ?

    opened by 13man 20
Releases(3.0.2)
  • 3.0.2(Nov 9, 2022)

    Fixed:

    • Ensure the main scheduler can be replaced in unit tests without needing Robolectric.

    Download:

    implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
    
    Source code(tar.gz)
    Source code(zip)
  • 3.0.1(Nov 9, 2022)

    Fixed:

    • AndroidSchedulers.mainThread() now correctly checks whether async messages are supported by the current Android version. Previously it always assumed they were available (true on API 16+).

    Changed:

    • Update to RxJava 3.1.5. This includes a transitive dependency bump to Reactive-Streams 1.0.4 which re-licenses that dependency from CC-0 to MIT-0.

    Download:

    implementation 'io.reactivex.rxjava3:rxandroid:3.0.1'
    
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(Feb 14, 2020)

    General availability of RxAndroid 3.0 for use with RxJava 3.0!

    The Maven groupId has changed to io.reactivex.rxjava3 and the package is now io.reactivex.rxjava3.android.

    The APIs and behavior of RxAndroid 3.0.0 is otherwise exactly the same as RxAndroid 2.1.1 with one notable exception:

    Schedulers created via AndroidSchedulers.from now deliver async messages by default. This is also true for AndroidSchedulers.mainThread().

    For more information about RxJava 3.0 see its release notes.

    Download:

    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    
    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Feb 15, 2019)

  • 2.1.0(Aug 16, 2018)

  • 2.0.2(Feb 12, 2018)

  • 2.0.1(Nov 12, 2016)

  • 2.0.0(Oct 29, 2016)

    General availability of RxAndroid 2.0 for use with RxJava 2.0!

    The sections below contain the changes since 2.0.0-RC1.

    API Enhancements

    • Pull 338 - Evaluate Schedulers initialization via Callable
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0-RC1(Aug 25, 2016)

    RxAndroid 2.0 has been rewritten from scratch to support RxJava 2.0.

    The library still offers the same APIs: a scheduler and stream cancelation callback that know about the main thread, a means of creating a scheduler from any Looper, and plugin support for the main thread sheduler. They just reside in a new package, io.reactivex.android, and may have slightly different names.

    For more information about RxJava 2.0 see its RC1 release notes

    Download:

    compile 'io.reactivex.rxjava2:rxandroid:2.0.0-RC1'
    
    Source code(tar.gz)
    Source code(zip)
  • 1.2.1(Aug 25, 2016)

    • New: AndroidSchedulers.reset() allows clearing the scheduler cache such that the next call to AndroidSchedulers.mainThread() will ask the RxAndroidSchedulerHook to re-create it. This API is experimental to match Schedulers.reset() in RxJava.
    • RxJava dependency now points at v1.1.6.
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(May 4, 2016)

    • Rewrite the Android-specific schedulers (main thread or custom) to greatly reduce allocation and performance overhead of scheduling work.
    • HandlerScheduler.create has been deprecated in favor of AndroidSchedulers.from(Looper) as a Looper is the actual mechanism of scheduling on Android, not Handler.
    • Fix: Correct the behavior of AndroidSchedulers.mainThread() to only invoke the registered RxAndroidSchedulersHook for creating the main thread scheduler and to cache the result instead of invoking it every time. This behvior change eliminates a performance overhead and brings behavior in line with RxJava. If you were relying on the ability to change the main thread scheduler over time (such as for tests), return a delegating scheduler from the hook which allows changing the delegate instance at will.
    • RxJava dependency now points at v1.1.4.
    • RxAndroidPlugins.reset() is now marked as @Experimental to match the RxJava method of the same name and behavior.
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Dec 9, 2015)

    • New: MainThreadSubscription utility class runs its onUnsubscribe action on the Android main thread. This aids in adding tear-down actions which must be executed on the main thread without having to deal with posting to the main thread yourself.
    • Fix: Lazily initialize mainThread() scheduler so that no Android code is run when overridden. This allows unit tests overriding the implementation to work correctly.
    • RxJava dependency now points at v1.1.0.

    Download:

    compile 'io.reactivex:rxandroid:1.1.0'
    
    Source code(tar.gz)
    Source code(zip)
  • 1.0.1(Aug 10, 2015)

    • Fix: Correctly check isUnsubscribed() state in HandlerScheduler's worker before scheduling more work.
    • Fix: Eliminate a potential race condition in HandlerScheduler to ensure any posted work will be canceled on unsubscription.

    Download:

    compile 'io.reactivex:rxandroid:1.0.1'
    
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Aug 5, 2015)

    Initial stable release!

    In order to provide a library that no project using RxJava would hesitate to depend on, the decision was made to remove the APIs which were not absolutely fundamental to all apps. That is what's contained in this release.

    Functionality which was previously part of this library is being explored in separate, modular libraries:

    • LifecycleObservable: https://github.com/trello/RxLifecycle
    • ViewObservable and WidgetObservable: https://github.com/JakeWharton/RxBinding

    This allows for a simpler process of design, development, and experimentation for the best ways to provide features like hooks into the lifecycle, binding to UI components, and simplifying interaction with all of Android's API. Not only can these projects now have their own release schedule, but it allows developers to pick and choose which ones are appropriate for your application.

    Applications using the various APIs which were previously in this library do not need to update immediately. Due to the number of APIs removed, switching to 1.0 and the use of these third-party libraries should be done gradually.

    Breaking changes:

    • AndroidSchedulers.handlerThread() is now HandlerScheduler.from().
    • All other APIs have been removed aside from AndroidSchedulers.mainThread(), RxAndroidPlugins, and RxAndroidSchedulersHook.

    Download:

    compile 'io.reactivex:rxandroid:1.0.0'
    
    Source code(tar.gz)
    Source code(zip)
  • v0.25.0(Jun 29, 2015)

    • New: RxAndroidPlugins and its RxAndroidSchedulersHook provides a mechanism similar to RxJavaPlugins (and its RxJavaSchedulersHook) for changing the scheduler returned from AndroidSchedulers.mainThread() as well as a callback for each subscription on any Handler-based scheduler.
    • Fix: Ensure errors are properly propagated from ContentObservable.fromCursor.
    • Fix: LifecycleObservable now correctly unsubscribes from its sources.

    Breaking changes:

    • Users of AppObservable.bindFragment with a support-v4 Fragment should now use bindSupportFragment.
    Source code(tar.gz)
    Source code(zip)
  • v0.24.0(Jun 29, 2015)

    This release has some breaking changes:

    • rx.android.observables.AndroidObservable has changed to rx.android.app.AppObservable;
    • ViewObservable has moved from rx.android.observables to rx.android.view
    • (as part of RxJava's breaking changes) collect has changed
    Source code(tar.gz)
    Source code(zip)
  • v0.23.0(Dec 3, 2014)

  • v0.22.0(Oct 16, 2014)

    This release adds a number of new operators:

    • Add operator to monitor SharedPreference changes
    • Add view state event types to streamline ViewObservable
    • Add OperatorAdapterViewOnItemClick to observe OnItemClick events in AdapterViews
    Source code(tar.gz)
    Source code(zip)
  • v0.21.0(Oct 1, 2014)

    This is the first release after splitting from RxJava into its own top level project RxAndroid.

    This is the same code as version 0.20.4 except:

    • all deprecated methods and types are deleted
    • now published to groupId io.reactivex instead of com.netflix.rxjava
    • artifactId is now rxandroid instead of rxjava-android
    io.reactivex:rxandroid:0.21.0
    

    Issues and discussions specific to RxAndroid should now be had in the RxAndroid Issues. Issues with core Observable and operators remain in RxJava Issues.

    The artifacts can be found on maven Central at: http://repo1.maven.org/maven2/io/reactivex/rxandroid

    Artifacts: Maven Central

    Source code(tar.gz)
    Source code(zip)
  • 0.20.4(Oct 1, 2014)

Owner
ReactiveX
Reactive Extensions for Async Programming
ReactiveX
Custom JavaFX bindings made easy with lambdas.

EasyBind EasyBind leverages lambdas to reduce boilerplate when creating custom bindings, provides a type-safe alternative to Bindings.select* methods

Tomas Mikula 146 May 29, 2022
Java Foreign Linker bindings to Lua

jpanlua Java bindings to liblua using JEP 398: Foreign Linker API. Requires JDK 16 or above. Requires -Dforeign.restricted=permit JRE flag. Exports pa

Aly Cerruti 5 Dec 24, 2021
🍏 A collection of partial JNA bindings for various macOS frameworks. (e.g. Foundation, AppKit, etc.)

JNApple ?? A collection of partial JNA bindings for various macOS frameworks. (e.g. Foundation, AppKit, etc.) Usage These are just some common example

Iridescent 3 Jun 19, 2022
SynchronizeFX - a library for JavaFX 2 and later that enables property bindings between different JVMs

SynchronizeFX - a library for JavaFX 2 and later that enables property bindings between different JVMs, both on a local computer and over the network.

Manuel Mauky 8 Jul 24, 2020
🌄 Image editor using native modules for iOS and Android. Inherit from 2 available libraries, Brightroom (iOS) and PhotoEditor (Android)

React Native Photo Editor (RNPE) ?? Image editor using native modules for iOS and Android. Inherit from 2 available libraries, Brightroom (iOS) and Ph

Baron Ha. 243 Jan 4, 2023
Android Resource Manager application to manage and analysis your app resources with many features like image resize, Color, Dimens and code Analysis

AndroidResourceManager Cross-Platform tools to manage your resources as an Android Developer, AndroidResourceManager - ARM provide five main services

Amr Hesham 26 Nov 16, 2022
CSS-style shadows for Android

Fifty Shades: CSS-style shadows for Android What? In CSS, shadows are specified by (dx, dy, blurRadius, colour) (I call it ShadowSpec). This library i

Mike 73 Dec 19, 2022
Simple, maintained and highly customizable colorpicker library for Android.

Colorpicker Library for Android Simple, maintained and highly customizable color picker library for Android. It is packed with ColorPicker Popup, Colo

Mrudul Tora 31 Oct 3, 2022
A simple implementation of the Android In-App Billing API.

Google In-App Billing Library v4+ A simple implementation of the Android In-App Billing API. It supports: in-app purchases (both consumable and non-co

Moisoni Ioan 79 Dec 12, 2022
A simple Android Tag EditText

TagEditText A simple Android Tag EditText. Setup The easiest way to add the TagEditText library to your project is by adding it as a dependency to you

HearSilent 15 May 5, 2022
A low intrusive, configurable android library that converts layout XML files into Java code to improve performance

qxml English 一个低侵入,可配置的 Android 库,用于将 layout xml 文件转换为 Java 代码以提高性能。 与X2C的对比 X2C: 使用注解处理器生成View类,使用时需要在类中添加注解,并替换setContentView方法,侵入性较强; 对于布局属性的支持不够完美

null 74 Oct 6, 2022
Lifecycle-aware shared observable data holder class for android.

Eyejet Lifecycle-aware shared observable data holder class for android. 1. Depend on our library Eyejet Library is available through Maven Repository.

ZeoFlow 16 Jul 27, 2021
An open source application to make your own android applications without coding!

Stif An Open source project for building Android Application at a go both with and without coding. This project was inspired from Scratch and Sketchwa

Nethical org 5 Aug 28, 2021
an android app to browse urls before open

link eye - kuesji koesnu - 8/8/2021 an android app to browse urls before open try to open a link, select link eye and choose always to start using

kuesji koesnu 25 Dec 31, 2022
Ini adalah Launcher SAMP untuk android, ini hanya untuk mengganti nama dan kemungkinan di update lanjutnya akan mendukung download client. Bersenang senanglah!!!

SAMP-Launcher-Android Ini adalah Launcher SAMP untuk android, ini hanya untuk mengganti nama dan kemungkinan di update lanjutnya akan mendukung downlo

Kiril 3 Nov 3, 2022
An Android library that allows you to easily create applications with slide-in menus.

An Android library that allows you to easily create applications with slide-in menus. You may use it in your Android apps provided that you cite this project and include the license in your app. Thanks!

Jeremy Feinstein 11.1k Jan 4, 2023
Implementation of ImageView for Android that supports zooming, by various touch gestures.

PhotoView PhotoView aims to help produce an easily usable implementation of a zooming Android ImageView. [ Dependency Add this in your root build.grad

Baseflow 18.4k Dec 30, 2022
A powerful 🚀 Android chart view / graph view library, supporting line- bar- pie- radar- bubble- and candlestick charts as well as scaling, panning and animations.

⚡ A powerful & easy to use chart library for Android ⚡ Charts is the iOS version of this library Table of Contents Quick Start Gradle Maven Documentat

Philipp Jahoda 36k Jan 9, 2023
RxJava bindings for JavaFX

RxJavaFX: JavaFX bindings for RxJava Read the free eBook Learning RxJava with JavaFX to get started. RxJavaFX is a lightweight library to convert Java

ReactiveX 513 Dec 27, 2022
RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.

RxJava: Reactive Extensions for the JVM RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-base

ReactiveX 46.7k Dec 30, 2022