mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 23:06:49 +00:00
395 lines
18 KiB
Markdown
395 lines
18 KiB
Markdown
|
# GStreamer SDK documentation : Installing for Android development
|
|||
|
|
|||
|
This page last changed on May 24, 2013 by xartigas.
|
|||
|
|
|||
|
# Prerequisites
|
|||
|
|
|||
|
The development machine is where you will develop your Android
|
|||
|
application, which then you will deploy on the target machine, which
|
|||
|
should obviously be an Android device.
|
|||
|
|
|||
|
The development machine can either be a Linux, Mac OS X or Windows, and
|
|||
|
needs to have installed:
|
|||
|
|
|||
|
- The latest version of the [Android
|
|||
|
SDK](http://developer.android.com/sdk/index.html)
|
|||
|
- The latest version of the [Android
|
|||
|
NDK](http://developer.android.com/tools/sdk/ndk/index.html)
|
|||
|
- The GStreamer SDK for Android is targeted at API version 9 (Android
|
|||
|
2.3.1, Gingerbread) or higher. Use the SDK Manager tool to make sure
|
|||
|
you have at least one Android SDK platform installed with API
|
|||
|
version 9 or higher.
|
|||
|
|
|||
|
Optionally, you can use the [Eclipse
|
|||
|
IDE](http://www.eclipse.org/eclipse/). As stated in the Android
|
|||
|
documentation, *developing in Eclipse with ADT is highly recommended and
|
|||
|
is the fastest way to get started*. If you plan to use the Eclipse IDE:
|
|||
|
|
|||
|
- Install the [Android ADT
|
|||
|
plugin](http://developer.android.com/sdk/installing/installing-adt.html) for
|
|||
|
Eclipse
|
|||
|
- Install the [Android NDK
|
|||
|
plugin](http://tools.android.com/recent/usingthendkplugin) for
|
|||
|
Eclipse
|
|||
|
|
|||
|
Before continuing, make sure you can compile and run the samples
|
|||
|
included in the Android NDK, and that you understand how the integration
|
|||
|
of C and Java works via the [Java Native
|
|||
|
Interface](http://en.wikipedia.org/wiki/Java_Native_Interface) (JNI).
|
|||
|
Besides the [Android
|
|||
|
NDK](http://developer.android.com/tools/sdk/ndk/index.html)
|
|||
|
documentation, you can find some useful [Android JNI tips
|
|||
|
here](http://developer.android.com/guide/practices/jni.html).
|
|||
|
|
|||
|
# Download and install the SDK
|
|||
|
|
|||
|
The SDK has two variants: **Debug** and **Release**. The Debug variant
|
|||
|
produces lots of debug output and is useful while developing your
|
|||
|
application. The Release variant is what you will use to produce the
|
|||
|
final version of your application, since GStreamer code runs slightly
|
|||
|
faster and the libraries are smaller.
|
|||
|
|
|||
|
Get the compressed file below and just unzip it into any folder of your
|
|||
|
choice (Choose your preferred file format; both files have exactly the
|
|||
|
same content)
|
|||
|
|
|||
|
<table>
|
|||
|
<colgroup>
|
|||
|
<col width="100%" />
|
|||
|
</colgroup>
|
|||
|
<thead>
|
|||
|
<tr class="header">
|
|||
|
<th>Debug variant</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr class="odd">
|
|||
|
<td><ul>
|
|||
|
<li><a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.tar.bz2" class="external-link">GStreamer SDK 2013.6 (Congo) for Android ARM (Debug, tar.bz2)</a> - <a href="http://www.freedesktop.org/software/gstreamer-sdk/data/packages/android/arm/gstreamer-sdk-android-arm-debug-2013.6.tar.bz2" class="external-link">mirror</a> - <a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.tar.bz2.md5" class="external-link">md5</a> - <a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.tar.bz2.sha1" class="external-link">sha1</a></li>
|
|||
|
<li><a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.zip" class="external-link">GStreamer SDK 2013.6 (Congo) for Android ARM (Debug, zip)</a> - <a href="http://www.freedesktop.org/software/gstreamer-sdk/data/packages/android/arm/gstreamer-sdk-android-arm-debug-2013.6.zip" class="external-link">mirror</a> - <a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.zip.md5" class="external-link">md5</a> - <a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.zip.sha1" class="external-link">sha1</a></li>
|
|||
|
</ul></td>
|
|||
|
</tr>
|
|||
|
<tr class="even">
|
|||
|
<td><span style="color: rgb(0,0,0);">Release variant</span></td>
|
|||
|
</tr>
|
|||
|
<tr class="odd">
|
|||
|
<td><ul>
|
|||
|
<li><a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-release-2013.6.tar.bz2" class="external-link">GStreamer SDK 2013.6 (Congo) for Android ARM (Release, tar.bz2)</a> - <a href="http://www.freedesktop.org/software/gstreamer-sdk/data/packages/android/arm/gstreamer-sdk-android-arm-release-2013.6.tar.bz2" class="external-link">mirror</a> - <a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-release-2013.6.tar.bz2.md5" class="external-link">md5</a> - <a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-release-2013.6.tar.bz2.sha1" class="external-link">sha1</a></li>
|
|||
|
<li><a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.zip" class="external-link">GStreamer SDK 2013.6 (Congo) for Android ARM (Release, zip)</a> - <a href="http://www.freedesktop.org/software/gstreamer-sdk/data/packages/android/arm/gstreamer-sdk-android-arm-debug-2013.6.zip" class="external-link">mirror</a> - <a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.zip.md5" class="external-link">md5</a> - <a href="http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.zip.sha1" class="external-link">sha1</a></li>
|
|||
|
</ul></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
|
|||
|
<table>
|
|||
|
<tbody>
|
|||
|
<tr class="odd">
|
|||
|
<td><img src="images/icons/emoticons/warning.png" width="16" height="16" /></td>
|
|||
|
<td><p>Due to the size of these files, usage of a <a href="http://en.wikipedia.org/wiki/Download_manager" class="external-link">Download Manager</a> is <strong>highly recommended</strong>. Take a look at <a href="http://en.wikipedia.org/wiki/Comparison_of_download_managers" class="external-link">this list</a> if you do not have one installed. If, after downloading, the installer reports itself as corrupt, chances are that the connection ended before the file was complete. A Download Manager will typically re-start the process and fetch the missing parts.</p></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
|
|||
|
If you intend to build the tutorials in this same folder, make sure you
|
|||
|
have writing permissions.
|
|||
|
|
|||
|
In the process of building GStreamer-enabled Android applications, some
|
|||
|
tools will need to know where you installed the SDK. You must define an
|
|||
|
environment variable called `GSTREAMER_SDK_ROOT_ANDROID` and point it to
|
|||
|
the folder where you extracted the SDK. This environment variable must
|
|||
|
be available at build time, so maybe you want to make it available
|
|||
|
system-wide by adding it to your `~/.profile` file (on Linux and Mac) or
|
|||
|
to the Environment Variables in the System Properties dialog (on
|
|||
|
Windows).
|
|||
|
|
|||
|
- Point `GSTREAMER_SDK_ROOT_ANDROID` to the folder where you unzipped
|
|||
|
the SDK.
|
|||
|
|
|||
|
<table>
|
|||
|
<tbody>
|
|||
|
<tr class="odd">
|
|||
|
<td><img src="images/icons/emoticons/information.png" width="16" height="16" /></td>
|
|||
|
<td><p>If you plan to use Eclipse and do not want to define this environment variable globally, you can set it inside Eclipse. Go to Window → Preferences → C/C++ → Build → Build Variables and define <code>GSTREAMER_SDK_ROOT_ANDROID</code> there.</p></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
|
|||
|
# Configure your development environment
|
|||
|
|
|||
|
There are two routes to use GStreamer in an Android application: Either
|
|||
|
writing your GStreamer code in Java or in C.
|
|||
|
|
|||
|
Android applications are mainly written in Java, so adding GStreamer
|
|||
|
code to them in the same language is a huge advantage. However, this
|
|||
|
requires using [language
|
|||
|
bindings](http://en.wikipedia.org/wiki/Language_binding) for the
|
|||
|
GStreamer API which are not complete yet. In the meantime, this
|
|||
|
documentation will use Java for the User Interface (UI) part and C for
|
|||
|
the GStreamer code. Both parts interact through
|
|||
|
[JNI](http://en.wikipedia.org/wiki/Java_Native_Interface).
|
|||
|
|
|||
|
### Building the tutorials
|
|||
|
|
|||
|
There are a few Android-specific tutorials in the
|
|||
|
`$GSTREAMER_SDK_ROOT_ANDROID\share\gst-sdk\tutorials` folder. Each
|
|||
|
tutorial is a folder containing source code (in Java and C) and the
|
|||
|
resource files required to build a complete Android application.
|
|||
|
|
|||
|
The rest of the GStreamer SDK tutorials (basic and playback tutorials)
|
|||
|
cannot be run on Android without modification.
|
|||
|
|
|||
|
Android projects with GStreamer support are built like conventional
|
|||
|
Android NDK projects, so the instructions at the [Android
|
|||
|
NDK](http://developer.android.com/tools/sdk/ndk/index.html) home can be
|
|||
|
followed:
|
|||
|
|
|||
|
![](images/icons/grey_arrow_down.gif)Using Eclipse (Click to expand)
|
|||
|
|
|||
|
Make sure you have installed the ADT and NDK plugins listed in the
|
|||
|
prerequisites section, and that they are both aware of the location of
|
|||
|
the Android SDK and NDK respectively.
|
|||
|
|
|||
|
Import a tutorial into the Eclipse workspace:
|
|||
|
File → New → Project… → Android Project from Existing
|
|||
|
Code, and select the folder called `android-tutorial-1`.
|
|||
|
|
|||
|
After reading in the project and generating some extra files and
|
|||
|
folders, Eclipse might complain about missing files. **This is normal**,
|
|||
|
we are not finished yet.
|
|||
|
|
|||
|
Provide native development support by activating the NDK plugin:
|
|||
|
Right-click on the project in the Project Explorer (this should be the
|
|||
|
top-most folder,
|
|||
|
called `com.gst_sdk_tutorials.tutorial_1.Tutorial1`) → Android
|
|||
|
tools → Add Native Support… Here the NDK plugin asks for a library name.
|
|||
|
This is irrelevant and any valid file name will do. Accept.
|
|||
|
|
|||
|
Eclipse will still complain about errors in the code. **This is
|
|||
|
normal**. Some files are missing because they are generated during the
|
|||
|
first build run.
|
|||
|
|
|||
|
Build the project: Project → Build Project. If you bring up the Eclipse
|
|||
|
Console, you should see some progress messages. Once finished, the
|
|||
|
missing files will appear and all error messages should be gone. The
|
|||
|
project is now ready to run. Hit Run → Run.
|
|||
|
|
|||
|
A new application called “Android tutorial 1” should now be available on
|
|||
|
your device, with the GStreamer SDK logo. If you want to run the
|
|||
|
tutorial in an Android Virtual Device (AVD), make sure to create the
|
|||
|
device with support for audio playback and GPU Emulation (to enable
|
|||
|
OpenGL ES).
|
|||
|
|
|||
|
![](images/icons/grey_arrow_down.gif)Using the command line (Click to
|
|||
|
expand)
|
|||
|
|
|||
|
<table>
|
|||
|
<tbody>
|
|||
|
<tr class="odd">
|
|||
|
<td><img src="images/icons/emoticons/warning.png" width="16" height="16" /></td>
|
|||
|
<td><p>Note that, on Windows, this procedure requires a working Cygwin shell, as explained in the <a href="http://developer.android.com/tools/sdk/ndk/index.html#Reqs" class="external-link">Android NDK System Requirements</a>.</p></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
|
|||
|
For each tutorial, move to its folder and run:
|
|||
|
|
|||
|
``` theme: Default; brush: plain; gutter: false
|
|||
|
android update project -p . -s --target X
|
|||
|
```
|
|||
|
|
|||
|
Where `X` is one of the targets available in your system (the ones you
|
|||
|
installed with the SDK manager). Make sure to use a target with at least
|
|||
|
API level 9.
|
|||
|
|
|||
|
To get a list of all available targets in your system issue this
|
|||
|
command:
|
|||
|
|
|||
|
``` theme: Default; brush: plain; gutter: false
|
|||
|
android list
|
|||
|
```
|
|||
|
|
|||
|
The “update project” command generates the `build.xml` file needed by
|
|||
|
the build system. You only need to perform this action once per project.
|
|||
|
|
|||
|
To build the C part, just call:
|
|||
|
|
|||
|
``` theme: Default; brush: plain; gutter: false
|
|||
|
ndk-build
|
|||
|
```
|
|||
|
|
|||
|
A few lines in the `Android.mk` file (reviewed later) pull up the
|
|||
|
necessary machinery to compile the GStreamer bits and generate the
|
|||
|
Shared Object libraries (.so) that the Java code can use as native
|
|||
|
methods.
|
|||
|
|
|||
|
Finally, compile the Java code with:
|
|||
|
|
|||
|
``` theme: Default; brush: plain; gutter: false
|
|||
|
ant debug
|
|||
|
```
|
|||
|
|
|||
|
And install on the device with:
|
|||
|
|
|||
|
``` theme: Default; brush: plain; gutter: false
|
|||
|
adb install -r bin/Tutorial1-debug.apk
|
|||
|
```
|
|||
|
|
|||
|
The `-r` switch allows the installer to overwrite previous versions.
|
|||
|
Otherwise, you need to manually uninstall previous versions of your
|
|||
|
application.
|
|||
|
|
|||
|
A new application called “Android tutorial 1” should now be available on
|
|||
|
your device, with the GStreamer SDK logo. If you want to run the
|
|||
|
tutorial in an Android Virtual Device (AVD), make sure to create the
|
|||
|
device with support for audio playback and GPU Emulation (to enable
|
|||
|
OpenGL ES).
|
|||
|
|
|||
|
<table>
|
|||
|
<tbody>
|
|||
|
<tr class="odd">
|
|||
|
<td><img src="images/icons/emoticons/warning.png" width="16" height="16" /></td>
|
|||
|
<td><strong>Windows linkage problems</strong><br />
|
|||
|
|
|||
|
<p>Due to problems related to the standard linker, Google’s <a href="http://en.wikipedia.org/wiki/Gold_(linker)" class="external-link">Gold Linker</a> is used to build GStreamer applications. Unfortunately, the Android NDK toolchain for Windows does not include the gold linker and the standard one has to be used.</p>
|
|||
|
<p>If you observe linkage problems, you can replace the linker in your Android NDK with the gold one from <a href="http://code.google.com/p/mingw-and-ndk/downloads/detail?name=android-ndk-r8b-ma-windows.7z&can=2&q=" class="external-link">this project</a>. Download the <code>android-ndk-r8b-ma-windows.7z</code> file, extract <code>\android-ndk-r8b\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\arm-linux-androideabi\bin\ld.exe</code> (only this file is needed) and overwrite the one in the same folder in your Android NDK installation. You might need the free <a href="http://www.7-zip.org/" class="external-link">7-Zip archiving utility</a>.</p></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
|
|||
|
### Creating new projects
|
|||
|
|
|||
|
Create a normal NDK project, either from the command line as described
|
|||
|
in the [Android
|
|||
|
NDK](http://developer.android.com/tools/sdk/ndk/index.html#GetStarted)
|
|||
|
home, or use Eclipse: File → New → Project… → Android Application
|
|||
|
Project, and, once the wizard is complete, right click on the project
|
|||
|
→ Android Tools → Add Native Support …
|
|||
|
|
|||
|
To add GStreamer support you only need to modify the
|
|||
|
`jni/Android.mk` file. This file describes the native files in your
|
|||
|
project, and its barebones structure (as auto-generated by Eclipse) is:
|
|||
|
|
|||
|
**Android.mk**
|
|||
|
|
|||
|
``` theme: Default; brush: plain; gutter: true
|
|||
|
LOCAL_PATH := $(call my-dir)
|
|||
|
|
|||
|
include $(CLEAR_VARS)
|
|||
|
|
|||
|
LOCAL_MODULE := NativeApplication
|
|||
|
LOCAL_SRC_FILES := NativeApplication.c
|
|||
|
|
|||
|
include $(BUILD_SHARED_LIBRARY)
|
|||
|
```
|
|||
|
|
|||
|
Where line 5 specifies the name of the `.so` file that will contain your
|
|||
|
native code and line 6 states all source files that compose your native
|
|||
|
code, separated by spaces.
|
|||
|
|
|||
|
Adding GStreamer support only requires adding these lines:
|
|||
|
|
|||
|
**Android.mk with GStreamer support**
|
|||
|
|
|||
|
``` theme: Default; brush: plain; gutter: true
|
|||
|
LOCAL_PATH := $(call my-dir)
|
|||
|
|
|||
|
include $(CLEAR_VARS)
|
|||
|
|
|||
|
LOCAL_MODULE := NativeApplication
|
|||
|
LOCAL_SRC_FILES := NativeApplication.c
|
|||
|
LOCAL_SHARED_LIBRARIES := gstreamer_android
|
|||
|
LOCAL_LDLIBS := -landroid
|
|||
|
|
|||
|
include $(BUILD_SHARED_LIBRARY)
|
|||
|
|
|||
|
GSTREAMER_SDK_ROOT := $(GSTREAMER_SDK_ROOT_ANDROID)
|
|||
|
GSTREAMER_NDK_BUILD_PATH := $(GSTREAMER_SDK_ROOT)/share/gst-android/ndk-build/
|
|||
|
GSTREAMER_PLUGINS := coreelements ogg theora vorbis ffmpegcolorspace playback eglglessink soup opensles
|
|||
|
G_IO_MODULES := gnutls
|
|||
|
GSTREAMER_EXTRA_DEPS := gstreamer-interfaces-0.10 gstreamer-video-0.10
|
|||
|
|
|||
|
include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer.mk
|
|||
|
```
|
|||
|
|
|||
|
Where line 7 specifies an extra library to be included in the project:
|
|||
|
`libgstreamer_android.so`. This library contains all GStreamer code,
|
|||
|
tailored for your application’s needs, as shown below.
|
|||
|
|
|||
|
Line 8 specifies additional system libraries, in this case, in order to
|
|||
|
access android-specific functionality.
|
|||
|
|
|||
|
Lines 12 and 13 simply define some convenient macros.
|
|||
|
|
|||
|
Line 14 lists the plugins you want statically linked into
|
|||
|
`libgstreamer_android.so`. Listing only the ones you need makes your
|
|||
|
application smaller.
|
|||
|
|
|||
|
Line 15 is required to have internet access from GStreamer, through the
|
|||
|
`souphttpsrc` element.
|
|||
|
|
|||
|
Line 16 defines which GStreamer libraries your application requires.
|
|||
|
|
|||
|
Finally, line 18 includes the make files which perform the rest of the
|
|||
|
magic.
|
|||
|
|
|||
|
Listing all desired plugins can be cumbersome, so they have been grouped
|
|||
|
into categories, which can be used by including the `plugins.mk` file,
|
|||
|
and used as follows:
|
|||
|
|
|||
|
``` theme: Default; brush: plain; gutter: false
|
|||
|
include $(GSTREAMER_NDK_BUILD_PATH)/plugins.mk
|
|||
|
GSTREAMER_PLUGINS := $(GSTREAMER_PLUGINS_CORE) $(GSTREAMER_PLUGINS_CODECS) playbin souphttpsrc
|
|||
|
```
|
|||
|
|
|||
|
![](images/icons/grey_arrow_down.gif)List of categories and included
|
|||
|
plugins (Click to expand)
|
|||
|
|
|||
|
<table>
|
|||
|
<thead>
|
|||
|
<tr class="header">
|
|||
|
<th>Category</th>
|
|||
|
<th>Included plugins</th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr class="odd">
|
|||
|
<td><code>GSTREAMER_PLUGINS_CORE</code></td>
|
|||
|
<td><code>coreelements coreindexers adder app audioconvert audiorate audioresample audiotestsrc</code> <code>ffmpegcolorspace gdp gio pango typefindfunctions videorate videoscale videotestsrc</code> <code>volume autodetect videofilter</code></td>
|
|||
|
</tr>
|
|||
|
<tr class="even">
|
|||
|
<td><code>GSTREAMER_PLUGINS_PLAYBACK</code></td>
|
|||
|
<td><code>decodebin2 playbin</code></td>
|
|||
|
</tr>
|
|||
|
<tr class="odd">
|
|||
|
<td><code>GSTREAMER_PLUGINS_CODECS</code></td>
|
|||
|
<td><code>subparse ogg theora vorbis alaw annodex apetag audioparsers auparse avi flac flv flxdec</code> <code>icydemux id3demux isomp4 jpeg matroska mulaw multipart png speex taglib wavenc wavpack</code> <code>wavparse y4menc adpcmdec adpcmenc aiff cdxaparse dtmf dvbsuboverlay dvdspu fragmented</code> <code>hdvparse id3tag ivfparse jp2k kate mve mxf nsf nuvdemux opus pcapparse pnm schro siren</code> <code>subenc tta videoparsersbad vmnc vp8 y4mdec</code></td>
|
|||
|
</tr>
|
|||
|
<tr class="even">
|
|||
|
<td><code>GSTREAMER_PLUGINS_VIS</code></td>
|
|||
|
<td><code>libvisual goom goom2k1 audiovisualizers</code></td>
|
|||
|
</tr>
|
|||
|
<tr class="odd">
|
|||
|
<td><code>GSTREAMER_PLUGINS_EFFECTS</code></td>
|
|||
|
<td><code>alpha alphacolor audiofx cutter debug deinterlace effectv equalizer gdkpixbuf imagefreeze</code> <code>interleave level multifile replaygain shapewipe smpte spectrum videobox videocrop videomixer</code> <code>autoconvert bayer coloreffects faceoverlay fieldanalysis freeverb frei0r gaudieffects</code> <code>geometrictransform interlace jp2kdecimator liveadder rawparse removesilence scaletempoplugin</code> <code>segmentclip smooth speed stereo videofiltersbad videomeasure videosignal</code></td>
|
|||
|
</tr>
|
|||
|
<tr class="even">
|
|||
|
<td><code>GSTREAMER_PLUGINS_NET</code></td>
|
|||
|
<td><code>rtsp rtp rtpmanager souphttpsrc udp dataurisrc rtpmux rtpvp8 sdpelem</code></td>
|
|||
|
</tr>
|
|||
|
<tr class="odd">
|
|||
|
<td><code>GSTREAMER_PLUGINS_CODECS_GPL</code></td>
|
|||
|
<td><code>assrender</code></td>
|
|||
|
</tr>
|
|||
|
<tr class="even">
|
|||
|
<td><code>GSTREAMER_PLUGINS_SYS</code></td>
|
|||
|
<td><code>eglglessink opensles amc</code></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
|
|||
|
Build and run your application as explained in the **Building the
|
|||
|
tutorials** section.
|
|||
|
|
|||
|
Document generated by Confluence on Oct 08, 2015 10:27
|
|||
|
|