UPnP/DLNA library for Java and Android

Related tags

Utility cling
Overview

Cling EOL: This project is no longer actively maintained, code may be outdated. If you are interested in maintaining and developing this project, comment here.


Cling - The UPnP stack for Java and Android

Cling is an effort to create a UPnP-compatible software stack in Java. The project's goals are strict specification compliance, complete, clean and extensive APIs, as well as rich SPIs for easy customization.

Cling is Free Software, distributed under the terms of the GNU Lesser General Public License or at your option the Common Development and Distribution License.

We recommend you start with the README.txt.

Then download the Cling distribution or start with a Maven project in your pom.xml:

<repositories>
    <repository>
        <id>4thline-repo</id>
        <url>http://4thline.org/m2</url>
        <snapshots>
            <enabled>false</enabled> <!-- Or true, if you like to use unreleased code -->
        </snapshots>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.fourthline.cling</groupId>
        <artifactId>cling-core</artifactId>
        <version>2.1.2</version>
    </dependency>
</dependencies>

Read the first chapter of the manual for a simple Cling usage example. Have a look at the Android application examples.

Please post Cling usage questions on stackoverflow.com with the appropriate tags.

See the forum archive for older discussions.

Cling Modules

Cling Core

An embeddable Java library that implements the UPnP Device Architecture 1.0. Use Cling Core to expose services with a UPnP remoting interface, or to write control point applications that discover UPnP devices and utilize their services. You can also integrate Cling Core as an Android UPnP/DLNA library in your applications (platform level 15/4.0 required).

Cling Support

Optional classes and useful infrastructure for developing and controlling UPnP services with Cling Core; extensions that simplify working with UPnP media servers and renderers, NAT port mapping on routers, etc.

Cling Workbench

A desktop application for browsing UPnP devices and interacting with their services.

Cling MediaRenderer

Standalone UPnP MediaRenderer, based on gstreamer.

Building Cling

  • Install Maven 3.2.3 or newer.

  • Install the Android SDK and set the ANDROID_HOME environment variable to the SDK install directory.

  • Clone the Cling source:

git clone https://github.com/4thline/cling.git
  • Change into the cling/ directory.

  • Install everything into your local ~/.m2 Maven repository (this will take a few minutes if all dependencies have to be downloaded for the first time).

mvn clean install

If your build fails with Android/dex packaging errors, you forgot the clean.

  • Use Cling in your pom.xml with:
<dependencies>
  <dependency>
    <groupId>org.fourthline.cling</groupId>
    <artifactId>cling-core</artifactId>
    <version>2.1.2</version>
  </dependency>
</dependencies>

Building OS X Workbench DMG

hdiutil create -srcfolder \
    workbench/target/cling-workbench-2.1.2/Cling\ Workbench.app \
    workbench/target/cling-workbench-2.1.2/Cling\ Workbench.dmg

Publishing a release

Build release and tag on Github.

Update Maven repository:

mvn clean install
mvn clean deploy -DskipTests

Projects and applications using Cling

If your project or product is using Cling and you'd like to add it to this page, open an issue and we'll add you to the list.

  • BubbleDS - A UPnP control point for Android and LinnDS streamer appliances.

  • BubbleUPnP - A generic UPnP/DLNA media control point and renderer for Android.

  • Jinzora UPnP - The Jinzora music management and streaming server can be accessed through a UPnP MediaServer gateway written with Cling. The Android client also uses Cling to access the MediaServer.

  • MovieBrowser UPnP - A movie manager to use with your favorite player on your Android tablet. Manage your videos anywhere on your network (Samba & UPnP/DLNA) and watch them with your favorite player or using the unique Play-To feature (Android airplay).

  • Private Dancer - A UPnP/DLNA Media Renderer for Android. It is designed to be used on a device attached to speakers and power. Unlike other UPnP Android applications, Private Dancer is designed for always-on (headless) use.

  • MediaHouse - Stream music, videos, movies and pictures from PC, NAS or any other device running UPnP/DLNA compliant media server to your Android phone/handset/tablet.

  • Digital Photo Frame Slideshow - Turn your Android device in a digital photo viewer showing a slideshow of local files, photos from network shares (Samba/SMB) or pictures from a UPnP server.

  • I-Frame Home - Full HD digital photo frame, picture-like design, displays files located in internal memory, LAN or Internet.

  • MediaConnect - Enables you to connect mediaservers with mediaplayers and also remote control these mediaplayers within a WLAN.

  • MediaConnect - MediaConnect enables you to connect mediaservers with mediaplayers and also remote control these mediaplayers within a WLAN.

  • ShuffleBox - Use your smartphone or tablet as a remote control and play music on your laptop, mobile phone or any other DNLA device.

  • DroidUPnP - A FREE SOFTWARE UPnP control point application for Android. DroidUPnP discover your home UPnP device, content provider and renderer. It allows you to browse your UPnP content directory, select the media you want to use and allows you to play it on your connected television or any UPnP renderer compatible device. It also allows you to use your Android device as a UPnP content provider.

  • YAACC -An Android UPnP controller, FREE SOFTWARE as GPL. It allows you to discover, use and control UPnP devices in your network in order to stream media files. Since it's a subset of UPnP it also is capable of communicating with DLNA devices.

Noteworthy forks of Cling

  • jUPnP - Forked from pre-2.0, this code base still contains the OSGi feature, which has been removed in Cling 2.0.

  • DIAL Support - Based on alpha 2.0 code, this UPnP/DLNA library for Java and Android contains modifications to discover DIAL devices.

FAQ

Which version of the UPnP specification does Cling implement?

Cling Core is compatible with the UPnP Device Architecture 1.0.

Can I use Cling to access a UPnP/DLNA MediaServer in Android?

Yes, you can write a control point application for Android with Cling Core as a UPnP library. You can find additional utilities for browsing and parsing a MediaServer content directory in the Cling Support module.

Can I use Cling in my commercial application or device?

Cling is licensed under the LGPL, so there are no restrictions on the use of the unmodified Cling JAR files/binaries. You can use the unmodified JAR files/binaries in any application or device, for any purpose. The following distribution (for free or for pay) restrictions apply:

  • If you distribute Cling with your application or device, you have to include a notice like "contains LGPL software" and a link to the Cling homepage, so your users also get the benefit of Free Software.

  • You have to allow replacement of the Cling library in your distributed application. This means allowing replacement of the Cling JAR or JVM binary class file(s) in, for example, a WAR or EAR package.

  • For Cling 1.x, the following exception for static linking of an executable (see LGPLv3 clause 4 or LGPLv2 clause 6b) applies to Cling usage within Android applications and the DEX instead of the JVM binary format: Converting Cling's binary JVM class files to the DEX format, and distributing a combined work as an Android APK does not affect the licensing of other resources within that DEX or APK archive. You must however allow re-packaging/conversion of the DEX and APK with tools such as dex2jar. Anyone receiving your APK must be able to replace the Cling binary code with a compatible version. You can not lock your APK with any kind of obfuscation or DRM scheme, or otherwise prevent unpacking and reassembly of the DEX containing Cling binaries. Alternatively, consider dynamic loading of libraries on Android.

  • For Cling 2.x, you may at your option license Cling under CDDL instead of the LGPL. You can convert to DEX and package Cling 2.x within an APK without affect on other files in that APK. You can obfuscate the source in the APK and lock it with digital restrictions. If you modify Cling source code, and you distribute a binary compiled from this modified source code, you have to distribute your changed source code as well under the LGPL or CDDL (upon request). Typically this means you contribute your changes back to the Cling project, to be included in an official Cling release.

Contact us if you have questions about the licensing of Cling and/or require a proprietary license.

What are the dependencies of Cling Core?

Cling Core is distributed as a single JAR file. It only has one other dependency, the seamless-* libraries. All JAR files are typically packaged next to each other in the ZIP distribution. You have to add them to your classpath.

How can I access the services of a device?

First write a control point and a RegistryListener as explained in the manual. Then call device.getServices() when a device has been discovered.

Cling doesn't work if I start my application on Tomcat/JBoss/Glassfish/etc?!

You'll get an error on startup, this error tells you that Cling couldn't use the Java JDK's HTTPURLConnection for HTTP client operations. This is an old and badly designed part of the JDK: Only "one application" in the whole JVM can configure it. You have to switch Cling to an alternative HTTP client, e.g. the other bundled implementation based on Apache HTTP Core. This is explained in more detail in the user manual.

Is IPv6 supported?

No, the default configuration of the UPnP stack in Cling Core will filter all network interfaces and IP addresses that are not IPv4. Some other parts of the Cling Core library might also assume that addresses are IPv4 and the whole library has not been tested in an IPv6 only environment. You are welcome to test Cling on IPv6 with a custom UpnpServiceConfiguration and NetworkAddressFactory and contribute back any necessary changes.

I don't see debug log messages on Android?

The java.util.logging implementation on Android is broken, it does not allow you to print debug-level messages easily. See this discussion for a simple solution.

Where can I find the source for Cling 1.x and teleal-common?

Here.

Wich version of Android (API) is supported by Cling?

Cling 1.0 supports Android 2.1. With Cling 2.0, we currently require platform level 15 (Android 4.0.3).

I get a lock acquisition timeout exception?

Your service receives a subscription, then this happens:

RuntimeException at org.teleal.cling.protocol.sync.ReceivingSubscribe.responseSent(ReceivingSubscribe.java:177)

Your service was already being used by something else and didn't give up the lock during the 500 millisecond default wait time. Increase the wait time by overriding DefaultServiceManager in LocalService. Or don't block the service action/methods for a long time.

Comments
  • Not returning all items with Twonky on Android

    Not returning all items with Twonky on Android

    Firstly thank you so much for the excellent Cling library for Android. I have been using Cling (currently 2.0.1) in my 'NAS Cast' Android app for about a year now, and have found it excellent to work with. Up until now I have managed to solve any DLNA issues I have had; however with this one I am completely stumped... It could still be me / my code, but I have worked hard to rule out as much as possible before asking for help.

    With Twonky (7.2.8 running on Raspbrian Linux on a Raspberry Pi 2) when I browse my film folder containing 163 video files Cling DIDLContent.getItems().size() only returns 103 items. If I look at ActionInvocation.getOutput()[2] I see 163 (the expected number). Also calling getChildCount() on the parent container returns 163 (as expected). It seems as though didl is not fully hydrated when the received() callback is called? <- Is this the case / due to the Android Optimisation?

    This works fine on Cling Workbench (on Windows), so I tried changing all combinations of XML parsers, but it made no difference, so this is either something unique to Cling on Android, or my code.

    I am running on Android 5.1.1 on a Nexus 5, but from my google analytics it looks like that is not relent. Other media servers seem to work fine, looks like just Twonky (multiple versions).

    Really hopeful that someone can point me in the right direction. Thank you very much for your help.

    Service<?, ?> service = mCurrentServer.findService(new UDAServiceType("ContentDirectory"));
            if(service != null) {
                mUpnpService.getControlPoint().execute(
                        new Browse(
                                service,
                                mCurrentPath.peek(),
                                BrowseFlag.DIRECT_CHILDREN
                        ) {
    
                            @Override
                            public void received(ActionInvocation actionInvocation, final DIDLContent didl) {
                                  // didl.getItems().size() returns 103, expecting 163
                                  // actionInvocation.getOutput()[2] is 163, the expected number
                                  // The parent getChildCount() returns 163 as expected
    
    opened by lucky81 15
  • Question : Is there an easy way to limit discovery to RootDevices?

    Question : Is there an easy way to limit discovery to RootDevices?

    UPnP Device Architecture allows different search targets for the ST header, but I can not find an option to specify a discovery using "ST:upnp:rootdevice". It seems, that only "ST:ssdp:all" is alowed.

    Can anybody give me a hint ?

    Best Hans-Jörg

    opened by hmerk 7
  • Uncaught exception 'org.fourthline.cling.transport.RouterException'

    Uncaught exception 'org.fourthline.cling.transport.RouterException'

    Getting crash on `java.lang.RuntimeException: Fatal error while executing protocol 'SendingSearch': org.fourthline.cling.transport.RouterException: Router wasn't available exclusively after waiting 15000ms, lock failed: ReadLock

    1 | at org.fourthline.cling.protocol.SendingAsync.run(SendingAsync.java:61) 2 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 3 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 4 | at java.lang.Thread.run(Thread.java:762) 5 | Caused by: org.fourthline.cling.transport.RouterException: Router wasn't available exclusively after waiting 15000ms, lock failed: ReadLock 6 | at org.fourthline.cling.transport.RouterImpl.lock(RouterImpl.java:499) 7 | at org.fourthline.cling.transport.RouterImpl.lock(RouterImpl.java:510) 8 | at org.fourthline.cling.transport.RouterImpl.send(RouterImpl.java:305) 9 | at org.fourthline.cling.protocol.async.SendingSearch.execute(SendingSearch.java:91) 10 | at org.fourthline.cling.protocol.SendingAsync.run(SendingAsync.java:54) 11 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 12 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 13 | at java.lang.Thread.run(Thread.java:762)

    0 | at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068) 1 | at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1063)

    0 | at android.os.MessageQueue.nativePollOnce(Native Method) 1 | at android.os.MessageQueue.next(MessageQueue.java:323) 2 | at android.os.Looper.loop(Looper.java:136) 3 | at android.app.ActivityThread.main(ActivityThread.java:6688) 4 | at java.lang.reflect.Method.invoke(Native Method) 5 | at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 6 | at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) `

    Please help us out, how we can get rid of this crash from "cling-core-2.1.2-SNAPSHOT.jar" library.

    opened by PpradeepkumarR1993 6
  • Jetty Dependency

    Jetty Dependency

    What specifically is required from Jetty for Cling? Cling is great but when it takes up 17% of the Android method dex limit, it makes a bit heavy weight.

    3367     org.fourthline.cling
    6886     org.eclipse
    893      org.seamless
    = 11,146 - 65,536 (dex limit)
    =~ 17%
    

    Are there possibilities to modulise the code? Or use a lighter weight network client?

    opened by chrisjenx 6
  • Switch to another wifi home network, media render device cannot be found again

    Switch to another wifi home network, media render device cannot be found again

    Hi, everyone. I'm doing some jobs with cling libs. But when I use cling 2.0.1, I found that when I switch my TV set box from one to another wifi home network, it can't work normally. Originally, I used the cling 1.0.5 and it worked well. But I want to change the nofity period, so I change to use 2.0.1. But now I'm confused but I didn't change too much codes. If somebody knows how to solve it, give me a help. Thanks.

    opened by SylvanHuang 6
  • 500 internal server sometimes coming?

    500 internal server sometimes coming?

    i checked in bubble upnp ,it works fine,when i try to play it is failing..it always shows 500 internal server error

          Play play= new Play(m_avtransportService) {
             @Override
            public void success(ActionInvocation invocation) {
                super.success(invocation);
                fireOnPlayingEvent();              
                Log.d(TAG,"Play is sucess");
            }
    
    
             @Override
            public void failure(ActionInvocation invocation, UpnpResponse response, String defaultMsg) {
    
                 fireOnFailEvent(invocation.getAction(), response,
                        Play.class.getSimpleName() + ":" + defaultMsg);
    
                }
    
        };
    
        m_controlPoint.execute(play);
    

    i was using cling 1 ,recently i migrated to cling 2.00

    i am trying to play when the setUri is sucess,

    this is my meta data dc:titleDeeyaalo Deeyaalo - TamilTunes.com/dc:titledc:creatorOranthanadu Gopu/dc:creatorupnp:classobject.item.audioItem.musicTrack/upnp:classupnp:albumKayal (2014)/upnp:album<upnp:artist role="Performer">Oranthanadu Gopu/upnp:artisthttp://192.168.43.121:57645/external/audio/media/230.mp3

    opened by aravindasthme 6
  • Avtransport Callbacks missing in cling-support-2.0.1.jar

    Avtransport Callbacks missing in cling-support-2.0.1.jar

    I am currently working on a project, and I noticed that

    org.fourthline.cling.support.avtransport.callback.Previous org.fourthline.cling.support.avtransport.callback.Next

    exist in the source on github, and in the documentations, but they are not part of the latest downloadable release. I cannot say whether more classes are missing or not.

    Could you update the jar files please?

    opened by geroyche 6
  • Some state variables missing in AVTransportVariable

    Some state variables missing in AVTransportVariable

    Some variables documented in the spec are missing in class org.teleal.cling.support.avtransport.lastchange.AVTransportVariable, e.g. RelativeTimePosition and AbsoluteTimePosition. This makes it difficult to use the LastChangeParser to read these variables.

    opened by cgawron 6
  • Same Android Devices Couldn't Discovery Because Same UDN Created

    Same Android Devices Couldn't Discovery Because Same UDN Created

    -environment: two or more SAME android devices Under Android 2.2

    -target source: org.teleal.cling.model.types.UDN.java

    public static UDN uniqueSystemIdentifier(String salt) { 
    
        java.net.InetAddress i = java.net.InetAddress.getLocalHost(); 
        systemSalt.append(i.getHostName()).append(i.getHostAddress()); 
        // Android always returns "localhost" and "127.0.0.1", not "192.168.0.xxx" 
    

    -more details: http://mailinglists.945824.n3.nabble.com/Same-Android-Devices-Couldn-t-Discovery-Because-Same-UDN-Created-tp3808695p3808695.html

    opened by kensuke 6
  • +Gradle Support, Bring compatibility up to java 7. Class generation compatibility still at 1.5

    +Gradle Support, Bring compatibility up to java 7. Class generation compatibility still at 1.5

    …ible and easy) up to 1.7 source compatability level. Add SuppressWarnings to all rawtype, unchecked, and unused elements in the Test Suites, and Implementation so the Eclipse project is clean.

    Added Gradle Support and initial configuration files.

    Work still to be done:

    Need to figure out how to do this for the Android Demo Projects, as they use Android Specific resources, such as 'R.java' which is generally not included with Android Library compilation outside of Android Studio.

    opened by decoded4620 5
  • App Crash when position info get Track values is null

    App Crash when position info get Track values is null

    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Long org.teleal.cling.model.types.UnsignedIntegerFourBytes.getValue()' on a null object reference at org.teleal.cling.support.model.PositionInfo.(PositionInfo.java:44) at org.teleal.cling.support.avtransport.callback.GetPositionInfo.success(GetPositionInfo.java:46) at org.teleal.cling.controlpoint.ActionCallback.run(ActionCallback.java:156) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818)

    opened by aravindasthme 5
  • Media render not recognized errors

    Media render not recognized errors

    I have an issue where every time I try to play a video from my Android phone using via Upnp using the Media Monkey app, I keep getting the "server inaccessible" message and the video won't play. If I wait a few seconds and press play again, the video will start playing somehow but then it ends up crashing a few minutes later. I can't do any seeking (forward or backward) for that video either or it will freeze up and crash.

    This is some of the logs

    06:55:52 INFO Media renderer was not recognized. Possible identifying HTTP headers: User-Agent: Linux/4.4.84-229.kcl4tv.5 UPnP/1.0 LGE WebOS TV LGE_DLNA_SDK/1.6.0/03.33.11 DLNADOC/1.50 DLNADeviceName.lge.com: %5bLG%5d%20webOS%20TV%20OLED55C1PUB 06:55:54 INFO Media renderer was not recognized. Possible identifying HTTP headers: User-Agent: Linux/4.4.84-229.kcl4tv.5 UPnP/1.0 LGE WebOS TV LGE_DLNA_SDK/1.6.0/03.33.11 DLNADOC/1.50 DLNADeviceName.lge.com: %5bLG%5d%20webOS%20TV%20OLED55C1PUB

    opened by reapshot 3
  • dependency scope setting issues

    dependency scope setting issues

    Hi,

    We are developing a tool to check whether the dependencies' scopes in maven are set rightly and reasonably.

    Our tools have found some issues in your project about scope setting in maven' pom.xml file.

    • in core\pom.xml, javax.enterprise:cdi-api scope should be compile instead of provided.

    Please help us confirm whether the following reports are right and explain why it should set like these.

    Thanks a lot.

    opened by DataProvided 0
  • Trying to get in touch regarding a security issue

    Trying to get in touch regarding a security issue

    Hey there!

    I belong to an open source security research community, and a member (@srikanthprathi) has found an issue, but doesn’t know the best way to disclose it.

    If not a hassle, might you kindly add a SECURITY.md file with an email, or another contact method? GitHub recommends this best practice to ensure security issues are responsibly disclosed, and it would serve as a simple instruction for security researchers in the future.

    Thank you for your consideration, and I look forward to hearing from you!

    (cc @huntr-helper)

    opened by zidingz 0
  • SSRF and DDOS vulnerability

    SSRF and DDOS vulnerability

    The Upnp protocol implemented in the latest version of cling has a flaw, and the CALLBACK parameter in the request header of the service's subscribe request is not checked, resulting in the attacker using this flaw to send malicious data to the device developed using cling, which causes the device to specify to the attacker. A large amount of data is sent from the IP address of the IP address to implement a DDOS attack; at the same time, the vulnerability can be used to implement an SSRF attack on the intranet. Payload is

    SUBSCRIBE / HTTP/1.1
    Host: localhost:9999
    Accept-Encoding: identity
    User-Agent: Callstranger Vulnerability Checker
    CALLBACK: <Malicious address>
    TIMEOUT: Second-300
    NT: upnp:event
    Content-Length: 0
    
    opened by YYHYlh 0
  • [SECURITY] Use HTTPS to resolve dependencies in Maven Build

    [SECURITY] Use HTTPS to resolve dependencies in Maven Build

    mitm_build


    This is a security fix for a vulnerability in your Apache Maven pom.xml file(s).

    The build files indicate that this project is resolving dependencies over HTTP instead of HTTPS. This leaves your build vulnerable to allowing a Man in the Middle (MITM) attackers to execute arbitrary code on your or your computer or CI/CD system.

    This vulnerability has a CVSS v3.0 Base Score of 8.1/10.

    POC code has existed since 2014 to maliciously compromise a JAR file in-flight. MITM attacks against HTTP are increasingly common, for example Comcast is known to have done it to their own users.

    This contribution is a part of a submission to the GitHub Security Lab Bug Bounty program.

    Detecting this and Future Vulnerabilities

    This vulnerability was automatically detected by LGTM.com using this CodeQL Query.

    As of September 2019 LGTM.com and Semmle are officially a part of GitHub.

    You can automatically detect future vulnerabilities like this by enabling the free (for open-source) LGTM App.

    I'm not an employee of GitHub nor of Semmle, I'm simply a user of LGTM.com and an open-source security researcher.

    Source

    Yes, this contribution was automatically generated, however, the code to generate this PR was lovingly hand crafted to bring this security fix to your repository.

    The source code that generated and submitted this PR can be found here: JLLeitschuh/bulk-security-pr-generator

    Opting-Out

    If you'd like to opt-out of future automated security vulnerability fixes like this, please consider adding a file called .github/GH-ROBOTS.txt to your repository with the line:

    User-agent: JLLeitschuh/bulk-security-pr-generator
    Disallow: *
    

    This bot will respect the ROBOTS.txt format for future contributions.

    Alternatively, if this project is no longer actively maintained, consider archiving the repository.

    CLA Requirements

    This section is only relevant if your project requires contributors to sign a Contributor License Agreement (CLA) for external contributions.

    It is unlikely that I'll be able to directly sign CLAs. However, all contributed commits are already automatically signed-off.

    The meaning of a signoff depends on the project, but it typically certifies that committer has the rights to submit this work under the same license and agrees to a Developer Certificate of Origin (see https://developercertificate.org/ for more information).

    - Git Commit Signoff documentation

    If signing your organization's CLA is a strict-requirement for merging this contribution, please feel free to close this PR.

    Tracking

    All PR's generated as part of this fix are tracked here: https://github.com/JLLeitschuh/bulk-security-pr-generator/issues/2

    opened by JLLeitschuh 0
Releases(2.1.2)
Owner
4th Line
4th Line
General purpose utilities and hash functions for Android and Java (aka java-common)

Essentials Essentials are a collection of general-purpose classes we found useful in many occasions. Beats standard Java API performance, e.g. LongHas

Markus Junginger 1.4k Dec 29, 2022
WebSocket & WAMP in Java for Android and Java 8

Autobahn|Java Client library providing WAMP on Java 8 (Netty) and Android, plus (secure) WebSocket for Android. Autobahn|Java is a subproject of the A

Crossbar.io 1.5k Dec 9, 2022
WebSocket & WAMP in Java for Android and Java 8

Autobahn|Java Client library providing WAMP on Java 8 (Netty) and Android, plus (secure) WebSocket for Android. Autobahn|Java is a subproject of the A

Crossbar.io 1.5k Dec 9, 2022
Trail is a simple logging system for Java and Android. Create logs using the same API and the library will detect automatically in which platform the code is running.

Trail Trail is a simple logging system for Java and Android. Create logs using the same API and the library will detect automatically in which platfor

Mauricio Togneri 13 Aug 29, 2022
Error handling library for Android and Java

ErrorHandler Error handling library for Android and Java Encapsulate error handling logic into objects that adhere to configurable defaults. Then pass

null 237 Dec 29, 2022
Multiplaform kotlin library for calculating text differences. Based on java-diff-utils, supports JVM, JS and native targets.

kotlin-multiplatform-diff This is a port of java-diff-utils to kotlin with multiplatform support. All credit for the implementation goes to original a

Peter Trifanov 51 Jan 3, 2023
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
java.io.File compatible SAF library

DocumentFileX java.io.File compatible SAF implementation Tired of SAF bullshits? Implement SAF with ease! This library is in alpha stage. Most feature

null 24 Aug 25, 2022
MMDUtils is a library for read/write mmd related file in java

MMDUtils MMDUtils is a library for read/write mmd related file in java Features Read/Write VMD(Vocaloid Motion Data) file Read/Write PMX(Polygon Model

null 5 Jan 28, 2022
gRPC and protocol buffers for Android, Kotlin, and Java.

Wire “A man got to have a code!” - Omar Little See the project website for documentation and APIs. As our teams and programs grow, the variety and vol

Square 3.9k Dec 31, 2022
a simple cache for android and java

ASimpleCache ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架。轻量到只有一个java文件(由十几个类精简而来)。 1、它可以缓存什么东西? 普通的字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java对象,和 b

Michael Yang 3.7k Dec 14, 2022
A lightning fast, transactional, file-based FIFO for Android and Java.

Tape by Square, Inc. Tape is a collection of queue-related classes for Android and Java. QueueFile is a lightning-fast, transactional, file-based FIFO

Square 2.4k Dec 30, 2022
BinGait is a tool to disassemble and view java class files, developed by BinClub.

BinGait Tool to diassemble java class files created by x4e. Usage To run BinGait, run java -jar target/bingait-shadow.jar and BinGait will launch. If

null 18 Jul 7, 2022
Java implementation of a Disk-based LRU cache which specifically targets Android compatibility.

Disk LRU Cache A cache that uses a bounded amount of space on a filesystem. Each cache entry has a string key and a fixed number of values. Each key m

Jake Wharton 5.7k Dec 31, 2022
Runtime code generation for the Java virtual machine.

Byte Buddy runtime code generation for the Java virtual machine Byte Buddy is a code generation and manipulation library for creating and modifying Ja

Rafael Winterhalter 5.3k Jan 7, 2023
Apk parser for java

APK parser lib, for decoding binary XML files, getting APK meta info. Table of Contents Features Get APK-parser Usage 1. APK Info 2. Get Binary XML an

Hsiafan 1.1k Jan 2, 2023
Apk parser for java

APK parser lib, for decoding binary XML files, getting APK meta info. Table of Contents Features Get APK-parser Usage 1. APK Info 2. Get Binary XML an

Hsiafan 1.1k Dec 18, 2022
A simple and easy to use stopwatch and timer library for android

TimeIt Now with Timer support! A simple and easy to use stopwatch and timer library for android Introduction A stopwatch can be a very important widge

Yashovardhan Dhanania 35 Dec 10, 2022
A library for fast and safe delivery of parameters for Activities and Fragments.

MorbidMask - 吸血面具 Read this in other languages: 中文, English, Change Log A library for fast and safe delivery of parameters for Activities and Fragment

Season 67 Mar 29, 2022