Featured games (91)
games approved by the League of Dukes
Games in Showcase (581)
games submitted by our members
Games in WIP (500)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  How does Libgdx deal with natives?  (Read 482 times)
0 Members and 1 Guest are viewing this topic.
Offline trollwarrior1
« Posted 2014-02-09 09:23:34 »

I really like how Libgdx deals with natives. Don't need to create fat jar or have a folder near the jar with natives.
How do they do it? :O
Is there any tutorial like that?
Offline GamerIDGoesHere

Junior Member

« Reply #1 - Posted 2014-02-09 09:28:07 »

I would imagine they either rewrite the natives to go into a jar or put them in a jar somehow,

this might help

Offline BurntPizza
« Reply #2 - Posted 2014-02-09 09:53:39 »

Eclipse has several export modes, one of which is the Jar-in-Jar model I believe you are thinking of.
Upon opening a libGDX app in winRAR:

We see that the natives and libraries are packages as sub-jars, and that the main-class (the one that is first executed) is not the program main class, but a pre-loader supplied by Eclipse, with an extra Rsrc-Main-Class tag that tells the loader what the real main class is.

Jar in Jar loader source
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Nate

JGO Kernel

Medals: 129
Projects: 3
Exp: 14 years

Esoteric Software

« Reply #3 - Posted 2014-02-09 13:19:06 »

No idea what that Rsrc-Main-Class stuff is, I guess it is something for Eclipse. It is not how libgdx handles natives.

libgdx extracts native libs from the JAR to a temp location and loads them from there. This removes the need to mess with java.library.path, which is a source of many problems for beginners. It uses a CRC to skip extraction if it is not needed and also for the extraction directory, so multiple apps with different versions of the same lib won't conflict.

The class that does it is called SharedLibraryLoader:

Used like this:
new SharedLibraryLoader().load("nativeLibName");

You should have the natives in the JAR. I usually have a JAR per platform to reduce the size.

It can be used outside of libgdx, eg:

libgdx also does things to make LWJGL native libs work in the same way (since LWJGL doesn't work like normal native libs).

Offline trollwarrior1
« Reply #4 - Posted 2014-02-09 13:24:54 »

Thank you very much.. Will use this for sure! Smiley

Umm wait so can I use that code in my projects? I didn't really understand if I can use it from the license in the top of the class..
Offline Nate

JGO Kernel

Medals: 129
Projects: 3
Exp: 14 years

Esoteric Software

« Reply #5 - Posted 2014-02-09 19:41:09 »

Pages: [1]
  ignore  |  Print  


Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

xsi3rr4x (64 views)
2014-04-15 18:08:23

BurntPizza (62 views)
2014-04-15 03:46:01

UprightPath (75 views)
2014-04-14 17:39:50

UprightPath (58 views)
2014-04-14 17:35:47

Porlus (76 views)
2014-04-14 15:48:38

tom_mai78101 (101 views)
2014-04-10 04:04:31

BurntPizza (161 views)
2014-04-08 23:06:04

tom_mai78101 (256 views)
2014-04-05 13:34:39

trollwarrior1 (209 views)
2014-04-04 12:06:45

CJLetsGame (216 views)
2014-04-01 02:16:10
List of Learning Resources
by SHC
2014-04-18 03:17:39

List of Learning Resources
by Longarmx
2014-04-08 03:14:44

Good Examples
by matheus23
2014-04-05 13:51:37

Good Examples
by Grunnt
2014-04-03 15:48:46

Good Examples
by Grunnt
2014-04-03 15:48:37

Good Examples
by matheus23
2014-04-01 18:40:51

Good Examples
by matheus23
2014-04-01 18:40:34

Anonymous/Local/Inner class gotchas
by Roquen
2014-03-11 15:22:30 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!