|
@@ -10,7 +10,7 @@ Making video games portable is all fine and dandy, until mobile
|
|
gaming monetization shows up.
|
|
gaming monetization shows up.
|
|
|
|
|
|
This area is complex, usually a mobile game that monetizes needs
|
|
This area is complex, usually a mobile game that monetizes needs
|
|
-special connections to a server for stuff such as:
|
|
|
|
|
|
+special connections to a server for thingst like:
|
|
|
|
|
|
- Analytics
|
|
- Analytics
|
|
- In-app purchases
|
|
- In-app purchases
|
|
@@ -29,27 +29,19 @@ special connections to a server for stuff such as:
|
|
- Posting to Facebook, Twitter, etc.
|
|
- Posting to Facebook, Twitter, etc.
|
|
- Push notifications
|
|
- Push notifications
|
|
|
|
|
|
-Oh yeah, developing for mobile is a lot of work. On iOS, you can just
|
|
|
|
-write a C++ module and take advantage of the C++/ObjC
|
|
|
|
-intercommunication, so this is rather easy.
|
|
|
|
|
|
+On iOS, you can write a C++ module and take advantage of the C++/ObjC
|
|
|
|
+intercommunication.
|
|
|
|
|
|
-For C++ developers Java is a pain, the build system is severely bloated
|
|
|
|
-and interfacing it with C++ through JNI (Java Native Interface) is more
|
|
|
|
-pain that you don't want even for your worst enemy.
|
|
|
|
|
|
+On Android, interfacing with C++ through JNI (Java Native Interface) isn't as convenient.
|
|
|
|
|
|
Maybe REST?
|
|
Maybe REST?
|
|
-----------
|
|
-----------
|
|
|
|
|
|
-Most of these APIs allow communication via REST+JSON APIs. Godot has
|
|
|
|
|
|
+Most of these APIs allow communication via REST/JSON APIs. Godot has
|
|
great support for HTTP, HTTPS and JSON, so consider this as an option
|
|
great support for HTTP, HTTPS and JSON, so consider this as an option
|
|
-that works in every platform. Only write the code once and you are set
|
|
|
|
|
|
+that works on every platform. Only write the code once and you are set
|
|
to go.
|
|
to go.
|
|
|
|
|
|
-Popular engines that have half the share of apps published on mobile get
|
|
|
|
-special plugins written just for them. Godot does not have that luxury
|
|
|
|
-yet. So, if you write a REST implementation of a SDK for Godot, please
|
|
|
|
-share it with the community.
|
|
|
|
-
|
|
|
|
Android module
|
|
Android module
|
|
--------------
|
|
--------------
|
|
|
|
|
|
@@ -63,8 +55,8 @@ config.py
|
|
~~~~~~~~~
|
|
~~~~~~~~~
|
|
|
|
|
|
In the config.py for the module, some extra functions are provided for
|
|
In the config.py for the module, some extra functions are provided for
|
|
-convenience. First, it's often wise to detect if android is being built
|
|
|
|
-and only enable building in this case:
|
|
|
|
|
|
+convenience. First, it's often wise to detect if Android is the target platform
|
|
|
|
+being built for and only enable building in this case:
|
|
|
|
|
|
.. code:: python
|
|
.. code:: python
|
|
|
|
|
|
@@ -73,7 +65,7 @@ and only enable building in this case:
|
|
|
|
|
|
If more than one platform can be built (typical if implementing the
|
|
If more than one platform can be built (typical if implementing the
|
|
module also for iOS), check manually for Android in the configure
|
|
module also for iOS), check manually for Android in the configure
|
|
-functions:
|
|
|
|
|
|
+functions for Android (or other platform-specific) code:
|
|
|
|
|
|
.. code:: python
|
|
.. code:: python
|
|
|
|
|
|
@@ -87,7 +79,7 @@ functions:
|
|
Java singleton
|
|
Java singleton
|
|
--------------
|
|
--------------
|
|
|
|
|
|
-An android module will usually have a singleton class that will load it,
|
|
|
|
|
|
+An Android module will usually have a singleton class that will load it,
|
|
this class inherits from ``Godot.SingletonBase``. Resource identifiers for
|
|
this class inherits from ``Godot.SingletonBase``. Resource identifiers for
|
|
any additional resources you have provided for the module will be in the
|
|
any additional resources you have provided for the module will be in the
|
|
``com.godot.game.R`` class, so you'll likely want to import it.
|
|
``com.godot.game.R`` class, so you'll likely want to import it.
|
|
@@ -96,8 +88,7 @@ A singleton object template follows:
|
|
|
|
|
|
.. code:: java
|
|
.. code:: java
|
|
|
|
|
|
- // package com.android.godot; // for 1.1
|
|
|
|
- package org.godotengine.godot; // for 2.0
|
|
|
|
|
|
+ package org.godotengine.godot;
|
|
|
|
|
|
import com.godot.game.R;
|
|
import com.godot.game.R;
|
|
|
|
|
|
@@ -119,7 +110,7 @@ A singleton object template follows:
|
|
// threads are weird and this runs in another thread, so you usually have to do
|
|
// threads are weird and this runs in another thread, so you usually have to do
|
|
activity.runOnUiThread(new Runnable() {
|
|
activity.runOnUiThread(new Runnable() {
|
|
public void run() {
|
|
public void run() {
|
|
- //useful way to get config info from engine.cfg
|
|
|
|
|
|
+ //useful way to get config info from project.godot
|
|
String key = GodotLib.getGlobal("plugin/api_key");
|
|
String key = GodotLib.getGlobal("plugin/api_key");
|
|
SDK.initializeHere();
|
|
SDK.initializeHere();
|
|
}
|
|
}
|
|
@@ -155,22 +146,6 @@ Java will most likely run in a separate thread, so calls are deferred:
|
|
Add this singleton to the build of the project by adding the following
|
|
Add this singleton to the build of the project by adding the following
|
|
to config.py:
|
|
to config.py:
|
|
|
|
|
|
-(Before Version 2.0)
|
|
|
|
-
|
|
|
|
-.. code:: python
|
|
|
|
-
|
|
|
|
- def can_build(plat):
|
|
|
|
- return plat=="android" or plat=="iphone"
|
|
|
|
-
|
|
|
|
- def configure(env):
|
|
|
|
- if env['platform'] == 'android':
|
|
|
|
- # will copy this to the java folder
|
|
|
|
- env.android_module_file("MySingleton.java")
|
|
|
|
- #env.android_module_file("MySingleton2.java") call again for more files
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-(After Version 2.0)
|
|
|
|
-
|
|
|
|
.. code:: python
|
|
.. code:: python
|
|
|
|
|
|
def can_build(plat):
|
|
def can_build(plat):
|
|
@@ -193,8 +168,6 @@ maybe other functionalities are needed.
|
|
Create the custom chunk of android manifest and put it inside the
|
|
Create the custom chunk of android manifest and put it inside the
|
|
module, add it like this:
|
|
module, add it like this:
|
|
|
|
|
|
-(Before Version 2.0)
|
|
|
|
-
|
|
|
|
.. code:: python
|
|
.. code:: python
|
|
|
|
|
|
def can_build(plat):
|
|
def can_build(plat):
|
|
@@ -203,20 +176,7 @@ module, add it like this:
|
|
def configure(env):
|
|
def configure(env):
|
|
if env['platform'] == 'android':
|
|
if env['platform'] == 'android':
|
|
# will copy this to the java folder
|
|
# will copy this to the java folder
|
|
- env.android_module_file("MySingleton.java")
|
|
|
|
- env.android_module_manifest("AndroidManifestChunk.xml")
|
|
|
|
-
|
|
|
|
-(After Version 2.0)
|
|
|
|
-
|
|
|
|
-.. code:: python
|
|
|
|
-
|
|
|
|
- def can_build(plat):
|
|
|
|
- return plat=="android" or plat=="iphone"
|
|
|
|
-
|
|
|
|
- def configure(env):
|
|
|
|
- if env['platform'] == 'android':
|
|
|
|
- # will copy this to the java folder
|
|
|
|
- env.android_add_java_dir("Directory that contain MySingelton.java")
|
|
|
|
|
|
+ env.android_add_java_dir("Directory that contains MySingelton.java")
|
|
env.android_add_to_manifest("AndroidManifestChunk.xml")
|
|
env.android_add_to_manifest("AndroidManifestChunk.xml")
|
|
|
|
|
|
|
|
|
|
@@ -244,23 +204,6 @@ So, finally it's time to add the SDK library. The library can come in
|
|
two flavors, a JAR file or an Android project for ant. JAR is the
|
|
two flavors, a JAR file or an Android project for ant. JAR is the
|
|
easiest to integrate, just put it in the module directory and add it:
|
|
easiest to integrate, just put it in the module directory and add it:
|
|
|
|
|
|
-(Before Version 2.0)
|
|
|
|
-
|
|
|
|
-.. code:: python
|
|
|
|
-
|
|
|
|
- def can_build(plat):
|
|
|
|
- return plat=="android" or plat=="iphone"
|
|
|
|
-
|
|
|
|
- def configure(env):
|
|
|
|
- if env['platform'] == 'android':
|
|
|
|
- # will copy this to the java folder
|
|
|
|
- env.android_module_file("MySingleton.java")
|
|
|
|
- env.android_module_manifest("AndroidManifestChunk.xml")
|
|
|
|
- env.android_module_library("MyLibrary-3.1.jar")
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-(After Version 2.0)
|
|
|
|
-
|
|
|
|
.. code:: python
|
|
.. code:: python
|
|
|
|
|
|
def can_build(plat):
|
|
def can_build(plat):
|
|
@@ -269,7 +212,7 @@ easiest to integrate, just put it in the module directory and add it:
|
|
def configure(env):
|
|
def configure(env):
|
|
if env['platform'] == 'android':
|
|
if env['platform'] == 'android':
|
|
# will copy this to the java folder
|
|
# will copy this to the java folder
|
|
- env.android_add_java_dir("Directory that contain MySingelton.java")
|
|
|
|
|
|
+ env.android_add_java_dir("Directory that contains MySingelton.java")
|
|
env.android_add_to_manifest("AndroidManifestChunk.xml")
|
|
env.android_add_to_manifest("AndroidManifestChunk.xml")
|
|
env.android_add_dependency("compile files('something_local.jar')") # if you have a jar, the path is relative to platform/android/java/gradlew, so it will start with ../../../modules/module_name/
|
|
env.android_add_dependency("compile files('something_local.jar')") # if you have a jar, the path is relative to platform/android/java/gradlew, so it will start with ../../../modules/module_name/
|
|
env.android_add_maven_repository("maven url") #add a maven url
|
|
env.android_add_maven_repository("maven url") #add a maven url
|
|
@@ -292,8 +235,6 @@ changes, it should be reflected in the manifest template:
|
|
|
|
|
|
Then, add the module folder to the project:
|
|
Then, add the module folder to the project:
|
|
|
|
|
|
-(Before Version 2.0)
|
|
|
|
-
|
|
|
|
.. code:: python
|
|
.. code:: python
|
|
|
|
|
|
def can_build(plat):
|
|
def can_build(plat):
|
|
@@ -305,8 +246,6 @@ Then, add the module folder to the project:
|
|
env.android_module_file("MySingleton.java")
|
|
env.android_module_file("MySingleton.java")
|
|
env.android_module_manifest("AndroidManifestChunk.xml")
|
|
env.android_module_manifest("AndroidManifestChunk.xml")
|
|
env.android_module_source("sdk-1.2","")
|
|
env.android_module_source("sdk-1.2","")
|
|
-
|
|
|
|
-(After Version 2.0)
|
|
|
|
|
|
|
|
|
|
|
|
Building
|
|
Building
|
|
@@ -330,7 +269,7 @@ Using the module
|
|
~~~~~~~~~~~~~~~~
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
To use the module from GDScript, first enable the singleton by adding
|
|
To use the module from GDScript, first enable the singleton by adding
|
|
-the following line to engine.cfg (Godot Engine 2.0 and greater):
|
|
|
|
|
|
+the following line to project.godot:
|
|
|
|
|
|
::
|
|
::
|
|
|
|
|
|
@@ -338,21 +277,13 @@ the following line to engine.cfg (Godot Engine 2.0 and greater):
|
|
|
|
|
|
modules="org/godotengine/godot/MySingleton"
|
|
modules="org/godotengine/godot/MySingleton"
|
|
|
|
|
|
-For Godot Engine 1.1 is
|
|
|
|
-
|
|
|
|
-::
|
|
|
|
-
|
|
|
|
- [android]
|
|
|
|
-
|
|
|
|
- modules="com/android/godot/MySingleton"
|
|
|
|
-
|
|
|
|
More than one singleton module can be enabled by separating with commas:
|
|
More than one singleton module can be enabled by separating with commas:
|
|
|
|
|
|
::
|
|
::
|
|
|
|
|
|
[android]
|
|
[android]
|
|
|
|
|
|
- modules="com/android/godot/MySingleton,com/android/godot/MyOtherSingleton"
|
|
|
|
|
|
+ modules="org/godotengine/godot/MySingleton,corg/godotengine/godot/MyOtherSingleton"
|
|
|
|
|
|
Then just request the singleton Java object from Globals like this:
|
|
Then just request the singleton Java object from Globals like this:
|
|
|
|
|
|
@@ -369,8 +300,6 @@ Then just request the singleton Java object from Globals like this:
|
|
Troubleshooting
|
|
Troubleshooting
|
|
---------------
|
|
---------------
|
|
|
|
|
|
-(This section is a work in progress, report your problems here!)
|
|
|
|
-
|
|
|
|
Godot crashes upon load
|
|
Godot crashes upon load
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|