Explorar el Código

Update Creating Android Modules to 3.0

Max Hilbrunner hace 7 años
padre
commit
949b3b1343
Se han modificado 1 ficheros con 16 adiciones y 87 borrados
  1. 16 87
      development/cpp/creating_android_modules.rst

+ 16 - 87
development/cpp/creating_android_modules.rst

@@ -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
 ~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~