How Can I create Android Games with Jmonkeyengine

Is there any guide that can help me. I have created empty project using the old method for Android but it failed and it says that failed to get class-path for jBullet. I found that I have to use Gradel.So, I want to create Gradle Project and I don’t want to use Start or Initializer because I don’t want this to create my project. I want to create project with SDK. What I want is that I want to learn how to use gradle and how to create & build android project with jmonkeyengine.

Create the project using the initializer and open it in the SDK, you should have everything working fine. The initializer uses Gradle and it creates a cross-platform project.

2 Likes

Why If I don’t use it.
I want to make my own game engine on top of Jmonkeyengine SDK. And I don’t want to use Initializer.

Here is why to not use the jMonkeyEngine SDK in the task of project initiation:

The SDK Android part relies on Netbeans ANT for building android applications utilizing the Android SDK and the binaries of Android Gradle Plugin (w/o Gradle API) locally on your machine to build Android apps, which is fairly good, but will expose you to problems related to outdated AGP version used by the unmaintained part of the SDK, which at its finest part will produce warnings on new android APIs, and on its worst behavior, a crash while releasing the application on play console.

On the other side, using the Gradle will download the up-to-date AGP for you which, together with the Android SDK, contains the right set of toolchains to compile, build and package the Android applications.

It’s your choice to use localized outdated AGP or up-to-date AGP.

EDIT:
That’s all I know about the plugin on the SDK, and maybe some people who have been working on the SDK could give some insights into this.

1 Like

What if I use Jmonkeyengine with IntelliJ IDEA. I mean not SDK but using the other IDE with good gradle support

Just a correction, it’s not the exact APIs of AGP, but it replicates what the AGP does while being unmaintained.

If an IDE supports Gradle, then anything running Gradle should work seamlessly, unless a conflict jumps in.

Btw, if you don’t like something about the Jme Initializer, let the community know, and it will be fixed hopefully if the suggestion is feasible.

2 Likes

The initialiser doesnt do anything magic. Just creates a gradle based starter project based on some questions you answer. You could hand type it, it’s just easier to use the initialiser. That project could be opened in any IDE including intelliJ, the jMonkey SDK etc.

You could also just look at the output of the initialiser and take inspiration from it if youre looking to understand how each piece works rather than starting with something working

In particular the initialiser isnt bundling any weird binaries or other “stuff” that would tie you to it. It is just writing the gradle (and some bat/sh files etc) for you

1 Like

What should I do. I don’t want to use this initializer. I want to create my own game engine for Android and Windows and LInux. Every time I don’t want to initialize this project from web. I just want to make my own lightweight game engine based on jmonkeyengine. I Think I should go for other game engine. Maybe I will use Libgdx to make my own engine if this does not work. I’m tired. can’t even run simple cube basic scene for android

Perhaps we are misunderstanding each other. What I’m saying is look at what the initialiser produces. Understand what it is doing. Then do whatever you want (including creating your own initial project templater).

You certainly can create your own game template if you want, there is nothing stopping you doing that. But what we are saying is at least look at the template that the Initializer produces. Would you be happier if I sent you a link to an example starter project. That is exactly what JME Initializer produces, it is just more dynamically produced (so you don’t have to do a bunch or renaming).

What is the flow you are trying to achieve, I think that’s what we are missing. What does your “own lightweight game engine” mean exactly. Is this a library of your own creation, or some sort of UI design studio.

I just want to make my own lightweight game engine based on jmonkeyengine

Also, don’t start by trying to do this. At the very least get a basic test game running on android before even thinking of producing an engine. Are you really going to be producing dozens of android games? Even if you are then producing a first basic test game will allow you to better understand what you want before writing your own game engine

1 Like

Yes you are right. I think i’m wasting time. I should try some other engines (Free) for Android to make my own mobile games. Thanks for replying. I think Jme is good for Desktop.

Notice making a game engine is very different from making a game. That’s another domain irrespective of what JME can offer in general. You will need to study a lot of game engines architecture to fire your own engine, that is another story. So, please if the direction is to make a new trivial game engine and build it for Android, then please open another thread and you will get a lot of replies into game engines insights and building techniques.

2 Likes

I still don’t understand what you are saying or trying to achieve. Are you trying to make an engine, or make games.

JME is an engine in its own right. It is good for both Desktop and Android (if you want 3D Android games, it is also good for 2D games but in my opinion overkill). It is however code first (although the SDK fills in a lot of the UI side)

1 Like

It seems that @JavaFor3dGames comes from an OpenGL background (which I applause by the way) and doesn’t know much about Game Engines architecture and API development, so he contemplated the facts based on that.

1 Like

You are right. But I am no longer opengl/graphics programmer. I like to make things. But I want to make a engine on top of jmonkeyengine (for java programming reason and JME has many 3D graphics capabilities), where I will make a studio, UI for scene making and other drag & drop features. I want to make this for FPS games and some cars & fighter jet simulation games. That’s it. I will not make rpgs and other games. So, lightweight means some specific libraries and features.

1 Like

Will you be basing it on an IDE? You will probably want to to avoid getting bogged down in recreating what other people have done; e.g. an intelliJ plugin

If you really want to do this (and as I say, I think you should start by creating a test game, but if you really want to) you’ll probably need something similar to what the initialiser does embedded within your SDK; I believe the JMonkey SDK has something similar. You should look at what the initialiser does (see its source) and produce something similar. It starts with some templates with merge fields in it and replaces those with what the user wants.

The initialiser itself also has an api so the web interface to it is optional

1 Like

@JavaFor3dGames Alright, it seems your last message is perfectly aligned with what you want!

Though, I am not the right person to help you, and I believe someone could give you better insights…but yes you could build your own engine on top of JME.

Here are some insights into Game Engines:

  • A game engine is essentially a set of APIs and tools built on top of Operating Systems and OS resources to tie domain-specific binaries together in a single runtime infrastructure to produce games, that is the primitive definition, they are not just graphics APIs or OpenGL.
  • The basic construction conveys some Manager Interfaces wrapping system-dependent calls to different OS libraries or interfaces calling these libraries which controls how the hardware behaves on the low-level perspective.
  • The basic components of a game engine will be essentially parallel to an OS libraries components in general, so:
  1. A Graphics Manager API: abstracting the graphics APIs in use (OpenGL, Vulkan, Dx3d).
  2. An Audio Manager API: abstracting the audio engines APIs (Realtek for example).
  3. An Asset Manager API: abstracting file systems and parsers/serializers/deserializers.
  4. A Networking Manager API: abstracting networking communication protocols for system design and distributed development.
  5. An Input Manager API: abstracting input handlers (including keyboards, Mice, Analogs, Digitals, Touch, and others).
  6. A Physics Manager API: abstracting physics spaces and manages collision detection and object-object simulations (e.g., Minie and Bullet Physics).
  7. System-specific compatibility bridging APIs (Platform-specific Channels): system-specific modules for each platform/hardware managing the system-dependent calls from the above abstractions.
  8. Human-computer-interactive API (HCI): abstracts the game engine UI using the graphics module to build UI components and data models.
  9. Database Managers API: abstracts databases over IO pipelines for saving/loading game states.
  10. State/Control Manager APIs and Other Game Programming patterns APIs (e.g., ECS): abstracts the user-functional code in a game-loop compatible objects essentially putting a conceptual model (as Finite-States) into practice.

Those might be all the essentials to fire your engine, but there might be more, for example an Embedded/Hardware module for abstracting different types of control devices and sensors for simulation systems… If your aim is this, then I recommend grabbing some Game Engine development textbooks and starting rightaway, JME can help you, and you can build on top of it, but notice that though this might be shiny for the first sight, it is a very exhausting procedure and demands a lot of patience and perseverance, and it might take years to get something working if your aim is to cover everything or study every aspect, so once delved in, never came out with things easily!

1 Like