Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (491)
Games in Android Showcase (112)
games submitted by our members
Games in WIP (556)
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 704 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 Member





« 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 http://stackoverflow.com/questions/2937406/how-to-bundle-a-native-library-and-a-jni-library-inside-a-jar

Online BurntPizza
« 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 Kernel


Medals: 145
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:
https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/utils/SharedLibraryLoader.java

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


You should have the natives in the JAR. I usually have a JAR per platform to reduce the size.
1  
2  
3  
4  
5  
6  
7  
nativeLibName.dll
nativeLibName64.dll
libnativeLibName.dylib
libnativeLibName.so
libnativeLibName64.so
armnativeLibName.so
armnativeLibName64.so


It can be used outside of libgdx, eg:
https://github.com/badlogic/jglfw/blob/master/jglfw/src/com/badlogic/jglfw/Glfw.java#L424

libgdx also does things to make LWJGL native libs work in the same way (since LWJGL doesn't work like normal native libs).
https://github.com/libgdx/libgdx/blob/master/backends/gdx-backend-lwjgl/src/com/badlogic/gdx/backends/lwjgl/LwjglNativesLoader.java

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

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

EDIT-----
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: 145
Projects: 4
Exp: 14 years


Esoteric Software


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

http://en.wikipedia.org/wiki/Apache_License#Licensing_conditions

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

 

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

The first screenshot will be displayed as a thumbnail.

Nickropheliac (15 views)
2014-08-31 22:59:12

TehJavaDev (23 views)
2014-08-28 18:26:30

CopyableCougar4 (29 views)
2014-08-22 19:31:30

atombrot (41 views)
2014-08-19 09:29:53

Tekkerue (38 views)
2014-08-16 06:45:27

Tekkerue (35 views)
2014-08-16 06:22:17

Tekkerue (25 views)
2014-08-16 06:20:21

Tekkerue (34 views)
2014-08-16 06:12:11

Rayexar (72 views)
2014-08-11 02:49:23

BurntPizza (48 views)
2014-08-09 21:09:32
List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
java-gaming.org 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‑gaming.org
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!