Java bindings for Skia

Related tags

UI/UX java graphics skia 2d
Overview

Skija: Java bindings for Skia

Skia is an open source 2D graphics library which provides common APIs that work across a variety of hardware and software platforms.

Skija is a high-quality Java bindings for Skia.

Motivation: Why Skija?

Because Java doesn’t have a powerful and modern 2D graphics — still!

There are many occasions when you might need graphics:

  • custom UI widget libraries and whole toolkits,
  • graphs, diagrams,
  • visualizations,
  • games.

Existing offerings are: Graphics2D from AWT, GraphicsContext from JavaFX. They are good, but underwhelming.

Enter Skia. Skia has a proven track record of industrial-scale project relying on it for all things graphics: Google Chrome, Android, Flutter, Firefox Canvas, Xamarin, LibreOffice. Skia outperforms all existing Java2D toolkits in almost every benchmark, and also provides:

  • extensive color spaces support,
  • modern typography with open type features, variable typefaces, correct multi-script text handling, emojis,
  • highly-optimized GPU rendering,
  • modern GPU backends, including Vulkan and Metal (already in Skia, coming to Skija soon),
  • built-in caching and compositing facilities.

Skija brings all this power to the tips of your fingers, as simple as adding a jar to classpath.

Why hand-crafted bindings?

Automatically generated bindings for Skia exist, but don’t seem to have high adoption:

Skija project has a goal of providing great Java-native API that is natural to use. In particular:

  • full automatic memory management, no pointer abstractions leaking,
  • natural use of Java classes, interfaces, inheritance, singletons,
  • consistent naming following Java conventions, including getters/setters for properties,
  • typed enums instead of integer constants,
  • native Java platform abstractions instead of wrapped Skia/C++ ones (strings, arrays, streams, files, byte buffers, AutoCloseable),
  • hiding implementation details, e.g. transparent string encoding conversion, byte/code point indices conversion,
  • fluent builder-style APIs where possible,
  • lightweight data classes where possible (Point, Rect, FontMetrics, etc are not mirrored by native instances).

The ultimate goal for Skija is to feel as a Java library and not having to think about native part at all.

Built with Skija

Compose for Desktop, declarative UI toolkit for Kotlin:

Skija Graphics2D, an implementation of Java2D API:

Robert Felker demos:

Harold videos:

Skija demo app:

Current status

Public alpha. Things might change without notice.

Please note that Skia is known to change its API quite often (monthly). Skija will do its best to protect from these changes, but sometimes it might be impossible (e.g. method was removed). Normally it’s auxiliary stuff though, don’t worry too much.

Platforms:

  • Windows
  • Linux
  • macOS

Backends:

  • Bitmap
  • OpenGL
  • Direct3D
  • Metal
  • Vulkan

APIs:

Bitmap               ▓▓▓▓▓▓▓▓▓▓    Paint                ▓▓▓▓▓▓▓▓▓▓
Canvas               ▓▓▓▓▓▓▓▓░░    Path                 ▓▓▓▓▓▓▓▓▓▓
Codec                ▓▓▓▓░░░░░░    PathEffects          ▓▓▓▓▓▓▓▓▓▓
Color                ▓░░░░░░░░░    PathMeasure          ▓▓▓▓▓▓▓▓▓▓
ColorFilter          ▓▓▓▓▓▓▓▓▓▓    PaintFilterCanvas    ▓▓▓▓▓▓▓▓▓▓
ColorInfo            ▓▓▓▓▓▓▓▓▓▓    Picture              ▓▓▓▓▓▓▓▓▓░
ColorSpace           ▓▓▓▓░░░░░░    PictureRecorder      ▓▓▓▓▓▓▓▓▓▓
Data                 ▓▓▓▓▓▓▓▓▓░    PixelRef             ▓▓▓▓▓▓▓▓▓▓
Drawable             ▓▓▓▓▓▓▓▓░░    Pixmap               ▓▓▓▓▓▓▓▓▓▓
Flattenable          ░░░░░░░░░░    Region               ▓▓▓▓▓▓▓▓▓▓
Font                 ▓▓▓▓▓▓▓▓▓▓    RuntimeEffect        ▓▓▓▓▓░░░░░
FontData             ░░░░░░░░░░    ScalerContext        ░░░░░░░░░░
FontManager          ▓▓▓▓▓▓▓▓▓░    Shader               ▓▓▓▓▓▓▓▓▓▓
FontStyle            ▓▓▓▓▓▓▓▓▓▓    ShadowUtils          ▓▓▓▓▓▓▓▓▓▓
FontStyleSet         ▓▓▓▓▓▓▓▓▓▓    Stream               ░░░░░░░░░░
Image                ▓▓░░░░░░░░    String               ▓░░░░░░░░░
ImageFilters         ▓▓▓▓▓▓▓▓▓▓    Surface              ▓░░░░░░░░░
ImageInfo            ▓▓▓▓▓▓▓▓▓▓    TextBlob             ▓▓▓▓▓▓▓▓▓▓
MaskFilter           ▓▓▓▓▓▓▓▓▓▓    TextBlobBuilder      ▓▓▓▓▓▓▓▓▓▓
Matrix33             ▓▓▓░░░░░░░    Typeface             ▓▓▓▓▓▓▓▓░░
Matrix44             ▓▓▓░░░░░░░    WStream              ▓▓░░░░░░░░

Shaper:                            Paragraph:

BiDiRunIterator      ▓▓▓▓▓▓▓▓▓▓    FontCollection       ▓▓▓▓▓▓▓▓▓▓
FontMgrRunIterator   ▓▓▓▓▓▓▓▓▓▓    LineMetrics          ▓▓▓▓▓▓▓▓▓░
FontRunIterator      ▓▓▓▓▓▓▓▓▓▓    Paragraph            ▓▓▓▓▓▓▓▓▓▓
HbIcuScriptRunIter   ▓▓▓▓▓▓▓▓▓▓    ParagraphCache       ▓▓▓▓▓▓▓▓▓▓
IcuBidiRunIterator   ▓▓▓▓▓▓▓▓▓▓    ParagraphStyle       ▓▓▓▓▓▓▓▓▓▓
LanguageRunIterator  ▓▓▓▓▓▓▓▓▓▓    ParagraphBuilder     ▓▓▓▓▓▓▓▓▓▓
RunHandler           ▓▓▓▓▓▓▓▓▓▓    TextStyle            ▓▓▓▓▓▓▓▓▓▓
RunInfo              ▓▓▓▓▓▓▓▓▓▓    TypefaceFontProvider ▓▓▓▓▓▓▓▓▓▓
ScriptRunIterator    ▓▓▓▓▓▓▓▓▓▓
Shaper               ▓▓▓▓▓▓▓▓▓▓
TextBlobBldRunHndlr  ▓▓▓▓▓▓▓▓▓▓

SVG:

SVGDOM               ▓▓▓▓▓▓▓▓░░
SVGCanvas            ▓▓▓▓▓▓▓▓▓▓
SVGSVG               ▓▓▓▓▓▓▓▓░░

Using Skija

Using Skija is as simple as adding a jar file.

Maven:

<repositories>
  <repository>
    <id>space-maven</id>
    <url>https://packages.jetbrains.team/maven/p/skija/maven</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>org.jetbrains.skija</groupId>
    <artifactId>skija-${platform}</artifactId>
    <version>${version}</version>
  </dependency>
</dependencies>

Gradle:

repositories {
  maven {
    url "https://packages.jetbrains.team/maven/p/skija/maven"
  }
}

dependencies {
  api "org.jetbrains.skija:${artifact}:${version}"
}

Replace ${artifact} and ${version} with:

Platform ${artifact} ${version}
macOS Intel skija-macos-x64 version
macOS M1 skija-macos-arm64 version
Linux skija-linux version
Windows skija-windows version

Documentation

Get started by reading Getting Started.

API docs are under development — consult source code and JavaDoc comments.

I found SkiaSharp documentation to be excellent resource on what can be done in Skia. They have nice examples and visual explanations, too.

If Skija is missing a documentation for a particular method or class, check the same class in Skia Documentation instead. It might be that we didn’t move it over to Java yet. PRs are welcome!

Finally, LWJGL demo app has examples of most of the APIs that are currently implemented.

Resources

Building Skija from scratch

Prerequisites: Git, CMake, Ninja, JDK 9+, $JAVA_HOME, Python 3.

Checkout:

git clone https://github.com/JetBrains/skija.git
cd skija
./script/build.py

To codesign:

security find-identity
export APPLE_CODESIGN_IDENTITY="<...>"
./script/build.py

For building Skia itself, see https://github.com/JetBrains/skia-build/

Running examples

Examples require local build of Skija (see Building Skija).

See examples/.

Contributing

Contributions are welcome!

Make sure to read Code Conventions.

Remember: the goal of Skija is to map Skia API as close as possible.

These things have a place in Skija:

  • Everything that is in Skia and makes sense in Java world.
  • Convenience methods (e.g. a method that uses a default value for a parameter).
  • Documentation on Skija methods is very welcome!

These don’t:

  • Things that don’t directly map to anything in Java (pointers, etc).
  • New classes, new methods that don’t exist in Skia.
  • Code that combines Skia APIs together for special use-cases.

Useful things built on top of Skia/Skija are always welcome — as libraries.

Comments
  • Running skija with Java 8

    Running skija with Java 8

    Hi everyone,

    I was wondering if there is any possibility to make skija wordking with java 8 please ? Maybe a trick or something ? I need to swith to java 11, but due to some legacy code, i still need to wait a bit and i would love to try make skija working with my java 8 app.

    Thank's a lot.

    opened by Jojal 18
  • jigsaw support for natives resource loading

    jigsaw support for natives resource loading

    I tried to run skija in a modular maven project. But the native resources (*.dll, *.so) can't be reached from the shared lib via

    URL url = Library.class.getResource(resourcePath + fileName); `
    

    The Library.class is part of the skia-shared-x.x.x.jar and the native plattform libs are separated into skia-${platform}-x.x.x.jar

    It is necessary to manually extract the native files to the root of the project or to the src.main.resources folder.

    A workaround could be to add a empty class file 'Native.class' into each skia-${platform}-x.x.x.jar and add a load from resource method into Library::_extract(..) like:

    Native.class.getResourceAsStream(resourcePath + fileName);
    
    opened by comtel2000 14
  • Closing the window of the Clojure example causes JVM crash on MacOS

    Closing the window of the Clojure example causes JVM crash on MacOS

    Closing the window of the Clojure example causes JVM crash on MacOS. I ran it with clj -J-XstartOnFirstThread -M -m lwjgl.main. Log attached.

    hs_err_pid6917.log

    opened by stathissideris 13
  • bitmap example crashes

    bitmap example crashes

    Yes launching shadow jar from ITerm lead to

    Unhandled exception Type=Segmentation error vmState=0x00040000 J9Generic_Signal_Number=00000018 Signal_Number=0000000b Error_Value=00000000 Signal_Code=00000001 Handler1=000000000A895340 Handler2=0000000006668C80 InaccessibleAddress=0000000000000000 RDI=000000000C980A00 RSI=0000000000000000 RAX=0000000000000404 RBX=0000000000000000 RCX=0000000000000410 RDX=0000000000000000 R8=0000000000000000 R9=0000000000099454 R10=00007FA11700E058 R11=00000000476D1344 R12=0000000000000000 R13=0000000000000000 R14=000000000C980A00 R15=0000000000000000 RIP=000000000A89DDE0 GS=0000 FS=0000 RSP=000070000957DE00 RFlags=0000000000010246 CS=002B RBP=000070000957DEA0 ERR=0000000000000004 TRAPNO=000000040000000E CPU=0000000000040000 FAULTVADDR=0000000000000000 XMM0 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM1 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM2 000e1781000e1781 (f: 923521.000000, d: 1.959708e-308) XMM3 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM4 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM5 0000000000170000 (f: 1507328.000000, d: 7.447190e-318) XMM6 3fc29552f81ff523 (f: 4162843904.000000, d: 1.451820e-01) XMM7 402e7f9c1e980fa9 (f: 513281952.000000, d: 1.524924e+01) XMM8 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM9 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM10 0000000000000006 (f: 6.000000, d: 2.964394e-323) XMM11 0000000000000008 (f: 8.000000, d: 3.952525e-323) XMM12 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM13 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM14 0000000000000000 (f: 0.000000, d: 0.000000e+00) XMM15 0000000000000000 (f: 0.000000, d: 0.000000e+00)

    Originally posted by @Solido in https://github.com/JetBrains/skija/issues/53#issuecomment-755774385

    opened by tonsky 12
  • Bindings requests

    Bindings requests

    Hi !

    Thanks for Color4f, code is now much more direct.

    Instead of opening a ticket each time I'd like to suggest a list of methods & maybe influence you in your implementation priorities...

    Thanks !

    • [ ] path.rewind()

    • [ ] path.drawPatch()

    • [ ] path.drawPoints with Points

    • [x] Canvas drawTextOnPath

    • [x] Gradient with SkPoint instead of float (help a lot with sugar syntax / conversions)

    • [x] Canvas.saveLayer with Rect

    Also I've never linked Java to C but maybe later I'll be able to connect some API calls.

    opened by Solido 10
  • Render without Graphic Context

    Render without Graphic Context

    Hi Skija Team,

    Thanks for the work on this lib, can't wait to see how it will integrate with yours IDE solutions.

    Here are 2 questions that need some help please :

    • Is is possible to render image without any graphic context directly calling cpu | gpu ?

    • How compatible is it with Graal VM ?

    Thank you !

    Robert

    opened by Solido 9
  • How to manipulate raw pixel data?

    How to manipulate raw pixel data?

    I was wondering how I can access the raw pixel byte array of an Image in Skija. After loading an Image via Image.makeFromEncoded I somehow could not find a good way to convert the Image to a Bitmap. And even if I would be able to create a Bitmap there seems no accessor for the raw byte[] of the image representing the pixels. I need to do some raw pixel manipulation (for diffing purposes).

    On SkiaSharp you can create a SKBitmap either by using SKBitmap.Decode() or via SKBitmap.FromImage. The raw pixels are then accessible via skBitmap.Bytes.

    Is this missing in Skija?

    opened by Danielku15 8
  • Drawable

    Drawable

    Hi !

    My stuffs are getting more complex using Skija and I'd like to refactor to Kotlin objects drawn as SK Drawable. Do you have an estimation for landing this feature in your roadmap ?

    Thanks !

    opened by Solido 8
  • Some bindings for RuntimeEffect

    Some bindings for RuntimeEffect

    I tried to add some basic bindings for RuntimeEffect but I think I need some advice on how to proceed.

    1. How should I handle the Result struct in RuntimeEffect.h? Should I also be returning one in Java?
    2. That MakeShader binding is a mess, I have no idea how to deal with childrenPtrs and uniformPtr.
    3. Are there any more RuntimeEffect functions that need bindings?

    I'd appreciate any feedback, C++ isn't my strong suit.

    Reference material:

    • https://skia.org/docs/user/sksl/
    • https://github.com/mono/SkiaSharp/pull/1221/files#diff-9b53ac31984a05ad45ba4e2d111d9dc89289422983199bc68a2512ee750da04cR2896
    • https://skia.googlesource.com/skia/+/refs/heads/main/modules/canvaskit/canvaskit_bindings.cpp#1727

    Closes #120.

    opened by Vechro 6
  • Possible incompatibility with JavaFx

    Possible incompatibility with JavaFx

    Not sure where this problem lies, but I've been experiencing a core dump crash somewhere in libfreetype when JavaFx is initialized before rendering text using canvas drawString.

    Ubuntu 18.04
    openjdk version "12.0.1" 2019-04-16
    OpenJDK Runtime Environment Zulu12.2+3-CA (build 12.0.1+12)
    OpenJDK 64-Bit Server VM Zulu12.2+3-CA (build 12.0.1+12, mixed mode, sharing)
    

    I am trying to use skija's text rendering functionality. However, when JavaFx is initialized before trying to render with skija, the whole repl crashes with a core dump somewhere in libfreetype.

    When I do the skija text rendering first, and then initialize JavaFx, things seem to work.

    I have added a demo project here: https://github.com/mjmeintjes/skija-cljfx-crash-demo

    If I execute (Platform/startup #(Platform/setImplicitExit false)) before (create-image-with-text), then the JVM crashes due to a crash in native code, somewhere in libfreetype.

    However, if I execute (create-image-with-text) first, then I can run the startup code and then (create-image-with-text) can successfully run.

    opened by mjmeintjes 6
  • A crash is happening with lwjgl

    A crash is happening with lwjgl

    FramebufferSize 1440x810, scale 1.0, window 1440x810

    A fatal error has been detected by the Java Runtime Environment:

    EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffba78129e0, pid=7984, tid=9208

    JRE version: OpenJDK Runtime Environment (15.0+31) (build 15-ea+31-1502)

    Java VM: OpenJDK 64-Bit Server VM (15-ea+31-1502, mixed mode, sharing, tiered, compressed oops, g1 gc, windows-amd64)

    Problematic frame:

    C [skija.dll+0xb29e0]

    No core dump will be written. Minidumps are not enabled by default on client versions of Windows

    An error report file with more information is saved as:

    C:\Users\ABC.ABC-PC\IdeaProjects\SkijaProject\hs_err_pid7984.log

    If you would like to submit a bug report, please visit:

    https://bugreport.java.com/bugreport/crash.jsp

    The crash happened outside the Java Virtual Machine in native code.

    See problematic frame for where to report the bug.

    hs_err_pid7984.log

    opened by Hilal-Anwar 6
  • skija.dll: Can't find dependent libraries

    skija.dll: Can't find dependent libraries

    Hi:

    I run in vps server windows server 2012

    Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\Administrato r\AppData\Local\Temp\skija_0.93.6\skija.dll: Can't find dependent libraries at java.base/java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2614) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2499) at java.base/java.lang.Runtime.load0(Runtime.java:812) at java.base/java.lang.System.load(System.java:1821) at org.jetbrains.skija.impl.Library.load(Library.java:73) at org.jetbrains.skija.impl.Library.staticLoad(Library.java:47) at org.jetbrains.skija.Surface.(Surface.java:9) at com.javasrc.map.map.t3(map.java:166) at http_main.main(http_main.java:33)


    public static void t3() { //org.jetbrains.skija.windows.LibraryFinder; //https://github.com/JetBrains/skija/blob/master/docs/Getting%20Started.md Surface surface = Surface.makeRasterN32Premul(100, 100); Canvas canvas = surface.getCanvas();

        Paint paint = new Paint();
        paint.setColor(0xFFFF0000);
    
    
        canvas.drawCircle(50, 50, 30, paint);
    
        //--------------------------------------------------------
        Image image = surface.makeImageSnapshot();
        Data pngData = image.encodeToData(EncodedImageFormat.PNG);
    
        //-- 0.89.8
        byte [] buf = pngData.getBytes();
        ByteBuffer pngBytes = ByteBuffer.wrap(buf);
        //--
    
    
        
    
        try
        {
            File file = new File("d:\\filename.png");
    
            boolean append = false;
    
            FileOutputStream fs = new FileOutputStream(file, append);
    
            FileChannel wChannel = fs.getChannel();
    
            //wChannel.write(bbuf);
            wChannel.write(pngBytes);
    
            wChannel.close();
            fs.close();
    
    
        }
        catch (Exception e)//(IOException e) 
        {
            System.out.println(e);
        }
    
    }//
    

    Do need to install any libraries? Please help me.

    opened by clqsrc 1
  • Outdated

    Outdated "Built with Skija" section?

    Jetpack Compose is mentioned as the first item on "Built with Skija", however according to Jetbrains Compose for Desktop uses Skiko:

    Compose for Desktop is powered by our graphics library Skiko. By default, it uses an OpenGL-based renderer on macOS and Linux, and (now) a DirectX-based renderer on Windows.

    Source: https://blog.jetbrains.com/kotlin/2021/02/jetpack-compose-for-desktop-milestone-3-released/

    I can believe that there was a time where a Skija backend was used then moved to Skiko before launch. If this informantion is not accurate, i hope someone with more expertise to clarify, thanks.

    opened by mindlid 1
  • How to draw rich-text in skaji?

    How to draw rich-text in skaji?

    I want to draw image with text together, but I don't find any method to use rich-text in skaji. If I draw image and text separately, I may have typographical problems. So I want to know if any ways to use rich-text in skaji?

    opened by luojinrong 1
  • Implement Matrix33 missing methods

    Implement Matrix33 missing methods

    I need the missing methods for my project. So I have begun the work to implement them

    I have completed most of the conversion work. I'm at the writing-unit-test stage.

    But I have a few implementation questions first:

    1. I assume Matrix33 is intended to be the Skija version of SkMatrix. Correct? If so, I am curious. Why the name change?
    2. Is Matrix33 intended to be mutable or immutable?
    3. If mutable, I will need to remove Matrix33.IDENTITY, since something like Matrix.33.IDENTITY.setScale() will cause havoc.
    4. makePreScale() confuses me. It has the make prefix but it is not a static constructor. Was it intended that all the preScale()/, postScale() type fluent methods all be renamed to makePreScale()/makePostScale() style naming? Or is it just a mistake?
    opened by BigBadaboom 3
  • Instantiating a Typeface from file causes EXCEPTION_ACCESS_VIOLATION

    Instantiating a Typeface from file causes EXCEPTION_ACCESS_VIOLATION

    Calling a native method _nMakeFromFile from Typeface class causes an Access Violation. (Typeface.java 142). It's happening regardless of file and path. The issue arises when trying to create a Scene from Examples. Scene requires initialization of static final Typeface iter (Scene.java 7).

    Log file: hs_err_pid512.log

    opened by SamuelDidoszak 3
Owner
JetBrains
JetBrains open source projects
JetBrains
ScratchView 7.0 0.0 L4 Java repo is UX Design involving scratch cards like views which are scratched to reveal the information they conceal.

ScratchView Intro ScratchView repo is UX Design involving scratch cards like views which are scratched to reveal the information they conceal. There a

Harish Sridharan 1.1k Dec 24, 2022
LinearLayout & FrameLayout for Java Swing

Swan Layout Bringing LinearLayout and FrameLayout from Android to Java Swing Ins

Idayrus Studio 4 Jun 12, 2022
RxJava bindings for Android

RxAndroid: Reactive Extensions for Android Android specific bindings for RxJava 3. This module adds the minimum classes to RxJava that make writing re

ReactiveX 19.8k Jan 8, 2023
Materially inspired widgets and views that expose RxJava bindings.

Rx.Widgets Materially inspired widgets and views. Use ExpandableButtonGroup Add the widget to your view: <io.andref.rx.widgets.ExpandableButtonGro

Andrefio 12 Mar 12, 2018
Okuki is a simple, hierarchical navigation bus and back stack for Android, with optional Rx bindings, and Toothpick DI integration.

Okuki A simple, hierarchical navigation bus and back stack for Android, with optional Rx bindings, and Toothpick integration for automatic dependency-

Cain Wong 143 Nov 25, 2022
Kotlin MPP bindings for various clis

kommander Kotlin MPP bindings for various cli tools. The libraries only wrap around the clis and still require them to be natively available on the PA

Martynas Petuška 3 Mar 18, 2022
Small Kafka Playground to play around with Test Containers, and KotlinX Coroutines bindings while reading Kafka Definite Guide V2

KafkaPlayground Small playground where I'm playing around with Kafka in Kotlin and the Kafka SDK whilst reading the Kafka book Definite Guide from Con

Simon Vergauwen 34 Dec 30, 2022
Kafka bindings for Kotlin `suspend`, and Kafka streaming operators for KotlinX Flow.

Module kotlin-kafka Rationale Goals Example This project is still under development, andd started as a playground where I was playing around with Kafk

Simon Vergauwen 34 Dec 30, 2022
This little project provides Kotlin bindings for the popular tree-sitter library

kotlintree This little project provides Kotlin bindings for the popular tree-sitter library. Currently it only supports the Kotlin JVM target, but Kot

Christian Banse 23 Nov 28, 2022
Xamarin.Android provides open-source bindings of the Android SDK for use with .NET managed languages such as C#

Xamarin.Android Xamarin.Android provides open-source bindings of the Android SDK for use with .NET managed languages such as C#. Build Status Platform

Xamarin 1.8k Jan 5, 2023
Bindings to the JNI library on Android for Kotlin/Native

JNI Utils using this library: implementation("io.github.landrynorris:jni-utils:0.0.1-alpha01") This library provides bindings to the JNI library on An

Landry Norris 6 Sep 27, 2022
A Java serialization/deserialization library to convert Java Objects into JSON and back

Gson Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to a

Google 21.7k Jan 5, 2023
A Java API for generating .java source files.

JavaPoet JavaPoet is a Java API for generating .java source files. Source file generation can be useful when doing things such as annotation processin

Square 10k Jan 2, 2023
a 2d Java physics engine, native java port of the C++ physics engines Box2D and LiquidFun

jbox2d Please see the project's BountySource page to vote on issues that matter to you. Commenting/voting on issues helps me prioritize the small amou

jbox2d 1k Jan 2, 2023
LiteHttp is a simple, intelligent and flexible HTTP framework for Android. With LiteHttp you can make HTTP request with only one line of code! It could convert a java model to the parameter and rander the response JSON as a java model intelligently.

Android network framework: LiteHttp Tags : litehttp2.x-tutorials Website : http://litesuits.com QQgroup : 42960650 , 47357508 Android网络通信为啥子选 lite-htt

马天宇 829 Dec 29, 2022
A gradle plugin for getting java lambda support in java 6, 7 and android

Gradle Retrolambda Plugin This plugin will automatically build your java or android project with retrolambda, giving you lambda goodness on java 6 or

Evan Tatarka 5.3k Jan 5, 2023
I was fed up with writing Java classes to mirror json models. So I wrote this Java app to automate the process.

Json2Java I was fed up with writing Java classes to mirror json models. So I wrote this Java app to automate the process. What this tool can do right

Jon F Hancock 303 Oct 8, 2022
enjarify 8.6 0.0 L5 Python Enjarify is a tool for translating Dalvik bytecode to equivalent Java bytecode. This allows Java analysis tools to analyze Android applications.

Note: This repository may be out of date. Future development will occur at https://github.com/Storyyeller/enjarify. Introduction Enjarify is a tool fo

Google 2.7k Jan 8, 2023
CLI tool for decompiling Android apps to Java. It does resources! It does Java! Its real easy!

Easy-as-pie Android Decompiler Why One stop shop I got pretty tired of decompiling Android apps with a bunch of steps that I had to remember all the t

Alex Davis 619 Dec 27, 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