Hi !
Featured games (85)
games approved by the League of Dukes
Games in Showcase (636)
Games in Android Showcase (178)
games submitted by our members
Games in WIP (686)
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 1289 times)
0 Members and 1 Guest are viewing this topic.
Offline trollwarrior1
« Posted 2014-02-09 08: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 Devvie

Exp: 7-9 months

« Reply #1 - Posted 2014-02-09 08: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

« JGO Bitwise Duke »

Medals: 465
Exp: 6 years

« Reply #2 - Posted 2014-02-09 08: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 Bitwise Duke »

Medals: 166
Projects: 4
Exp: 14 years

Esoteric Software

« Reply #3 - Posted 2014-02-09 12: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 12: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 Bitwise Duke »

Medals: 166
Projects: 4
Exp: 14 years

Esoteric Software

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

Pages: [1]
  ignore  |  Print  
You cannot reply to this message, because it is very, very old.

Dwinin (63 views)
2015-11-07 13:29:08

Rems19 (77 views)
2015-10-31 01:36:56

Rems19 (69 views)
2015-10-31 01:32:37

williamwoles (104 views)
2015-10-23 10:42:59

williamwoles (91 views)
2015-10-23 10:42:45

Jervac_ (105 views)
2015-10-18 23:29:12

DarkCart (132 views)
2015-10-16 00:58:11

KaiHH (115 views)
2015-10-11 14:10:14

KaiHH (153 views)
2015-10-11 13:26:18

BurntPizza (167 views)
2015-10-08 03:11:46
Rendering resources
by Roquen
2015-11-13 14:37:59

Rendering resources
by Roquen
2015-11-13 14:36:58

Math: Resources
by Roquen
2015-10-22 07:46:10

Networking Resources
by Roquen
2015-10-16 07:12:30

Rendering resources
by Roquen
2015-10-15 07:40:48

Math: Inequality properties
by Roquen
2015-10-01 13:30:46

Math: Inequality properties
by Roquen
2015-09-30 16:06:05

HotSpot Options
by Roquen
2015-08-29 11:33:11 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!