-
Notifications
You must be signed in to change notification settings - Fork 169
[Android] How to build Android applications on Ubuntu
This manual is written for developing Android application (.apk) based on GStreamer. The manual is successfully evaluated and verified on Ubuntu 16.04 LTS x86_64 distribution. We assume that you dowload the required files into /var/www/gst-android/ folder.
## Proxy setting to run Android Studio in the office
1. Proxy: File - Settings Appearance & Behavior - System Settings - HTTP Proxy
2. SSL certificate: File - Settings - Tools - Server Certificates
3. Check gradle.properties
systemProp.http.proxyHost=10.112.1.184
systemProp.http.proxyPort=8080
systemProp.https.proxyHost=10.112.1.184
systemProp.https.proxyPort=8080
Step 0. gstreamer source ---> cerbero/NDK-xxb --> gst-android prebuilt files
dep-packs(88)-----/ (*.a and *.h)
Step 1. gst-android prebuilt files (w/ header files) ------> ndk-build ------> *.a
nnstreamer (*.c) ---------------------------/
Step 2. gst-android: *.a --------------> ndk-build -----> (libnnstreamer-android.so)
nnstreamer : *.a -------/
Step 3. Application
Step 3.1 CLI (NOW): nnstreamer-example source ------> ndk-build ---> C/C++ CLI app
(libnnstreamer-android.so) --------/
Step 3.2 GUI (FUTURE): nnstreamer-example source ----> gradle ---> Java/Kotlin GUI app
(libnnstreamer-android.so) ----------/ (Androd-Studio)
Step 4. Performance optimization
Note that Android studio use 'Gradle' instead of 'ndk-build' command to build Android applications.
$ vi ~/.bashrc
## Gstreamr-Android prebuilt binary setting, gst-root-android
export GSTREAMER_ROOT_ANDROID=/var/www/gst-android/gst_root_android
## Android NDK/SDK setting
# export ANDROID_NDK=$HOME/Android/Sdk/ndk-bundle
export ANDROID_NDK=/var/www/gst-android/android-ndk-r16b
export PATH=$ANDROID_NDK:$PATH
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME
export ANDROID_SDK=$HOME/Android/Sdk
- Download Android NDK (Note that the default compiler of NDK is recently changed from GCC to Clang/LLVM.)
- wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip
- Compiler: GCC
- Gstreamr-Android prebuilt binary: gstreamer-1.0-android-universal-1.14.4.tar.bz2
- wget https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip
- Compiler: Clang/LLVM
- Gstreamr-Android prebuilt binary: gstreamer-1.0-android-universal-1.15.1.tar.bz2
- wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip
- Download Android SDK (= Android Studio)
- Download Gstreamr-Android prebuilt binary
- https://developer.android.com/ndk/guides/
- https://developer.android.com/studio/intro/
- https://gstreamer.freedesktop.org/documentation/tutorials/android/index.html
- Download example applications for GStreamer from gst-docs.git repository
- git clone https://gitlab.freedesktop.org/gstreamer/gst-docs.git
- commit ba2cddfc17c42432cbb6f1766ea3a25bbb6fa3b0
- Author: Tim-Philipp Mmuller < tim@centricular.com >
- Date: Sat Dec 8 23:28:57 2018 +0000
- Description: Sync version with other modules
- Compile source code of your Android application with Android Studio (e.g., ./android-studio/bin/studio.sh)
- File - Sync project with Gradles (Press a circle arrow icon that is located at up-right.)
- Build - Build Bundle/APK - Build APK
- https://gitlab.freedesktop.org/gstreamer/cerbero
- https://github.com/centricular/cerbero-docs/blob/master/start.md
You can cross-compile GStreamer for Android from a Linux host using the configuration file 'config/cross-android.cbc'.
- Issue:
- https://gitlab.freedesktop.org/gstreamer/cerbero/issues/117 (cross-android-universal.cbc is failed.)
- https://gitlab.freedesktop.org/gstreamer/cerbero/issues/120 (How to use gst-inspect-1.0 on Android platform (ARM64) to print out information about a gstreamer plugin)
- How to build for only ARM64/Android:
git clone https://gitlab.freedesktop.org/gstreamer/cerbero
cd cerbero
time ./cerbero-uninstalled -c config/cross-android-arm64.cbc wipe
time ./cerbero-uninstalled -c config/cross-android-arm64.cbc bootstrap
time ./cerbero-uninstalled -c config/cross-android-arm64.cbc package gstreamer-1.0
ls -al *.tar.bz2
-
Q: Install missing platform(s) and sync project
- A: Just press a link to install required packages.
-
Q: Failed to update the version of the Android Gradle plugin.
- A: Just press a link to install required packages.
-
Q: error: undefined reference to 'gst_plugin_coreelements_register'
- A: You need to use 'gradle' of Android studio instead of 'nkd-build' command.
-
Q: 'gradle' command generates the "/usr/bin/ld.gold: error: cannot open crti.o: ..." error message
- A: Do not install NDK in the Android Studio. Note that you must use NDK r16b (old version) instead of latest version such as NDK r18b/ndk-bundle of Android Studio). Please specify NDK path at "File - Project Structure - SDK Location - Android NDK Location".
-
Q: Can we generate .apk on the Ubuntu console?
- A: Sure, Please refer to https://developer.android.com/studio/build/building-cmdline. If you have to write just C/C++ source code, please use 'ndk-build' command. If you have to develop JNI-based JAVA GUI applications, you can use 'gradlew' command on Ubuntu console.
- A: Note that ndk-build use jni/Android.mk. However, gradlew use build.gradle file without the existing jni/Android.mk.
$ cd gst-docs/examples/tutorials/android/android-tutorial-1 $ ndk-build $ ../gradlew build -Dorg.gradle.java.home=/var/www/gst-android/android-studio/jre $ find ./build/output/apk/ -name *.apk $ adb install -r {path-to-your-bild-folder}/{yourAppName}.apk $ ../gradlew clean
-
Q: Android emulator on AWS/X86_64 EC2 (Your CPU does not support required features (VT-x or SVM).
- A: You can not basically run the Android emulator on AWS/X86_64 because a AWS instance is running on KVM hypervisor. You must develop on a Linux computer that supports VT-x or SVM. Or use an Android virtual devices based on an ARM system image by using AWS bare metal instance (It provide nested virtualization. Region: US, Virginia North. Type: i3.metal {72 VCPUs, 512 GiB}). However, in this case, it is 10x slower than hardware accelerated virtualization.
-
Genymotion Cloud
of a market place provides Android operating system on EC2 commercially with the nested virtualization.
-
https://android.stackexchange.com/questions/176017/how-to-run-android-apps-on-amazon-ec2
-
https://medium.com/genymobile/android-os-now-available-as-an-amazon-machine-image-72748130436b
cat /sys/module/kvm_intel/parameters/nested egrep -c ‘(vmx|svm)’ /proc/cpuinfo cat /sys/hypervisor/properties/capabilities
-
-
Q: Cannot generate armeabi and mips libraries
- A: Officially, NDK r18b does not support out-of-date CPU (armeabi) and unpopular CPU (mips).
-
Q: Which storage capacity do we have to consider to install all Gstreamer libraries on Android platform?
- A: In case of ARM64, there are 122 static libraries (750MiB) in ./lib/ folder of prebuilt Gstreamer binary.
$ du -sh ./*
472M ./arm
749M ./arm64 (The arm64 folder is bigger than the others due to libavcodec.a.)
466M ./armv7
328M ./x86
546M ./x86_64
$ cd arm64/lib/ ; ls -al ./lib/*.a -S
-rw-r--r-- 1 ubuntu ubuntu 170384372 Oct 6 00:37 ./lib/libavcodec.a
-rw-r--r-- 1 ubuntu ubuntu 51669238 Oct 6 00:37 ./lib/libavformat.a
-rw-rw-r-- 1 ubuntu ubuntu 25866618 Oct 6 11:16 ./lib/libvpx.a
-rw-r--r-- 1 ubuntu ubuntu 25405002 Oct 5 22:59 ./lib/libcrypto.a
-rw-r--r-- 1 ubuntu ubuntu 21552530 Oct 5 19:30 ./lib/libgio-2.0.a
-rw-r--r-- 1 ubuntu ubuntu 18967870 Oct 5 19:07 ./lib/libgnustl.a
-rw-r--r-- 1 ubuntu ubuntu 17960942 Oct 5 21:36 ./lib/libgnutls.a
-rw-r--r-- 1 ubuntu ubuntu 16142968 Oct 5 21:54 ./lib/libtag.a
-rw-r--r-- 1 ubuntu ubuntu 13161792 Oct 5 19:42 ./lib/libgstreamer-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 12764148 Oct 5 21:14 ./lib/libhogweed.a
-rw-r--r-- 1 ubuntu ubuntu 12004860 Oct 5 19:47 ./lib/libxml2.a
-rw-r--r-- 1 ubuntu ubuntu 11985916 Oct 5 23:12 ./lib/libwebrtc_audio_processing.a
-rw-r--r-- 1 ubuntu ubuntu 11883410 Oct 5 20:08 ./lib/libcairo.a
-rw-r--r-- 1 ubuntu ubuntu 10043918 Oct 5 20:11 ./lib/libharfbuzz.a
-rw-r--r-- 1 ubuntu ubuntu 9803832 Oct 5 19:30 ./lib/libglib-2.0.a
-rw-r--r-- 1 ubuntu ubuntu 9450392 Oct 5 21:14 ./lib/libnettle.a
-rw-r--r-- 1 ubuntu ubuntu 9251962 Oct 5 22:34 ./lib/libopenh264.a
-rw-r--r-- 1 ubuntu ubuntu 7698100 Oct 5 23:53 ./lib/libx264.a
-rw-r--r-- 1 ubuntu ubuntu 7200908 Oct 5 19:57 ./lib/libfreetype.a
-rw-r--r-- 1 ubuntu ubuntu 6965966 Oct 6 00:49 ./lib/libges-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 6728066 Oct 5 19:54 ./lib/libpixman-1.a
-rw-r--r-- 1 ubuntu ubuntu 6644574 Oct 5 21:41 ./lib/libsoup-2.4.a
-rw-r--r-- 1 ubuntu ubuntu 6435888 Oct 5 21:11 ./lib/libgmp.a
-rw-r--r-- 1 ubuntu ubuntu 5913020 Oct 5 20:53 ./lib/libgstvideo-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 5363006 Oct 5 20:23 ./lib/liborc-0.4.a
-rw-r--r-- 1 ubuntu ubuntu 5307472 Oct 5 22:59 ./lib/libssl.a
-rw-r--r-- 1 ubuntu ubuntu 4847394 Oct 5 23:04 ./lib/libspandsp.a
-rw-r--r-- 1 ubuntu ubuntu 4425746 Oct 5 20:53 ./lib/libgstaudio-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 4291116 Oct 5 19:42 ./lib/libgstbase-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 4208630 Oct 5 22:49 ./lib/libopenjp2.a
-rw-r--r-- 1 ubuntu ubuntu 4197574 Oct 5 20:53 ./lib/libgstgl-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 3924470 Oct 5 20:32 ./lib/libturbojpeg.a
-rw-r--r-- 1 ubuntu ubuntu 3748826 Oct 6 00:02 ./lib/libgstrtspserver-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 3598076 Oct 5 20:26 ./lib/libopus.a
-rw-r--r-- 1 ubuntu ubuntu 3478452 Oct 5 20:32 ./lib/libjpeg.a
-rw-r--r-- 1 ubuntu ubuntu 3362240 Oct 6 00:37 ./lib/libavutil.a
-rw-r--r-- 1 ubuntu ubuntu 3315166 Oct 5 21:00 ./lib/libtiff.a
-rw-r--r-- 1 ubuntu ubuntu 3128890 Oct 5 19:30 ./lib/libgobject-2.0.a
-rw-r--r-- 1 ubuntu ubuntu 3123858 Oct 5 22:40 ./lib/libnice.a
-rw-r--r-- 1 ubuntu ubuntu 2984118 Oct 5 22:47 ./lib/librsvg-2.a
-rw-r--r-- 1 ubuntu ubuntu 2983962 Oct 5 20:21 ./lib/libvisual-0.4.a
-rw-r--r-- 1 ubuntu ubuntu 2825672 Oct 6 00:43 ./lib/libgstvalidate-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 2599216 Oct 5 20:15 ./lib/libpango-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 2598892 Oct 5 21:03 ./lib/libgdk_pixbuf-2.0.a
-rw-r--r-- 1 ubuntu ubuntu 2364684 Oct 5 22:45 ./lib/libcroco-0.6.a
-rw-r--r-- 1 ubuntu ubuntu 2286102 Oct 5 23:50 ./lib/libopencore-amrnb.a
-rw-r--r-- 1 ubuntu ubuntu 2274338 Oct 5 23:42 ./lib/libgstcodecparsers-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 2103000 Oct 5 19:07 ./lib/libiconv.a
-rw-r--r-- 1 ubuntu ubuntu 2094352 Oct 5 20:00 ./lib/libfontconfig.a
-rw-r--r-- 1 ubuntu ubuntu 1981664 Oct 5 19:50 ./lib/libpng16.a
-rw-r--r-- 1 ubuntu ubuntu 1943462 Oct 5 20:53 ./lib/libgsttag-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 1902336 Oct 5 21:46 ./lib/libmp3lame.a
-rw-r--r-- 1 ubuntu ubuntu 1825360 Oct 5 20:53 ./lib/libgstpbutils-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 1755200 Oct 5 21:51 ./lib/libFLAC.a
-rw-r--r-- 1 ubuntu ubuntu 1739550 Oct 5 19:07 ./lib/libsupc++.a
-rw-r--r-- 1 ubuntu ubuntu 1720046 Oct 5 22:26 ./lib/libass.a
-rw-r--r-- 1 ubuntu ubuntu 1715848 Oct 5 21:44 ./lib/libmpg123.a
-rw-r--r-- 1 ubuntu ubuntu 1713782 Oct 5 22:28 ./lib/libfaad.a
-rw-r--r-- 1 ubuntu ubuntu 1712700 Oct 6 00:37 ./lib/libavfilter.a
-rw-r--r-- 1 ubuntu ubuntu 1550450 Oct 5 23:58 ./lib/libjson-glib-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 1491728 Oct 5 20:18 ./lib/libtheora.a
-rw-r--r-- 1 ubuntu ubuntu 1291724 Oct 5 20:08 ./lib/libcairo-script-interpreter.a
-rw-r--r-- 1 ubuntu ubuntu 1230270 Oct 5 19:42 ./lib/libgstcheck-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 1197692 Oct 5 21:48 ./lib/libwavpack.a
-rw-r--r-- 1 ubuntu ubuntu 1179164 Oct 5 20:18 ./lib/libtheoraenc.a
-rw-r--r-- 1 ubuntu ubuntu 1153408 Oct 5 20:28 ./lib/libgraphene-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 1092172 Oct 5 22:43 ./lib/libvo-aacenc.a
-rw-r--r-- 1 ubuntu ubuntu 1090438 Oct 5 20:16 ./lib/libvorbisenc.a
-rw-r--r-- 1 ubuntu ubuntu 1083926 Oct 5 20:53 ./lib/libgstrtp-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 1082830 Oct 5 20:16 ./lib/libvorbis.a
-rw-r--r-- 1 ubuntu ubuntu 1061970 Oct 5 23:42 ./lib/libgstmpegts-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 1020114 Oct 5 19:55 ./lib/libexpat.a
-rw-r--r-- 1 ubuntu ubuntu 1011960 Oct 5 23:42 ./lib/libgstplayer-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 950024 Oct 5 20:15 ./lib/libpangoft2-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 929790 Oct 5 20:53 ./lib/libgstrtsp-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 908916 Oct 5 22:30 ./lib/libkate.a
-rw-rw-r-- 1 ubuntu ubuntu 823938 Oct 5 22:34 ./lib/librtmp.a
-rw-r--r-- 1 ubuntu ubuntu 814008 Oct 5 20:53 ./lib/libgstsdp-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 771352 Oct 5 22:00 ./lib/libdv.a
-rw-r--r-- 1 ubuntu ubuntu 754822 Oct 5 23:50 ./lib/libopencore-amrwb.a
-rw-r--r-- 1 ubuntu ubuntu 741266 Oct 5 19:42 ./lib/libgstnet-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 736098 Oct 5 22:41 ./lib/libSoundTouch.a
-rw-r--r-- 1 ubuntu ubuntu 721910 Oct 5 20:57 ./lib/libspeex.a
-rw-rw-r-- 1 ubuntu ubuntu 695038 Oct 5 22:35 ./lib/libsrtp.a
-rw-r--r-- 1 ubuntu ubuntu 685290 Oct 5 20:33 ./lib/libvorbisidec.a
-rw-r--r-- 1 ubuntu ubuntu 677494 Oct 5 23:42 ./lib/libgstadaptivedemux-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 675388 Oct 6 00:37 ./lib/libswresample.a
-rw-r--r-- 1 ubuntu ubuntu 650426 Oct 5 19:42 ./lib/libgstcontroller-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 557632 Oct 5 20:18 ./lib/libtheoradec.a
-rw-r--r-- 1 ubuntu ubuntu 549410 Oct 5 19:13 ./lib/libz.a
-rw-r--r-- 1 ubuntu ubuntu 543884 Oct 5 20:53 ./lib/libgstapp-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 509322 Oct 5 21:18 ./lib/libtasn1.a
-rw-r--r-- 1 ubuntu ubuntu 461760 Oct 5 20:15 ./lib/libpangocairo-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 429568 Oct 5 23:51 ./lib/libmpeg2.a
-rw-r--r-- 1 ubuntu ubuntu 419054 Oct 5 20:53 ./lib/libgstriff-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 395176 Oct 5 19:12 ./lib/libintl.a
-rw-r--r-- 1 ubuntu ubuntu 391332 Oct 5 22:25 ./lib/libfribidi.a
-rw-r--r-- 1 ubuntu ubuntu 382948 Oct 5 23:42 ./lib/libgstbadvideo-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 374226 Oct 5 22:37 ./lib/libmms.a
-rw-r--r-- 1 ubuntu ubuntu 368366 Oct 5 20:53 ./lib/libgstfft-1.0.a
-rw-rw-r-- 1 ubuntu ubuntu 364442 Oct 5 19:55 ./lib/libbz2.a
-rw-r--r-- 1 ubuntu ubuntu 321046 Oct 5 23:42 ./lib/libgstbadaudio-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 310920 Oct 5 23:42 ./lib/libgstwebrtc-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 265088 Oct 5 22:36 ./lib/libdca.a
-rw-r--r-- 1 ubuntu ubuntu 258380 Oct 5 23:12 ./lib/libsbc.a
-rw-r--r-- 1 ubuntu ubuntu 217960 Oct 5 23:42 ./lib/libgstbasecamerabinsrc-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 205084 Oct 5 20:16 ./lib/libvorbisfile.a
-rw-r--r-- 1 ubuntu ubuntu 197998 Oct 5 23:45 ./lib/liba52.a
-rw-r--r-- 1 ubuntu ubuntu 197406 Oct 5 23:42 ./lib/libgsturidownloader-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 173812 Oct 5 20:23 ./lib/liborc-test-0.4.a
-rw-r--r-- 1 ubuntu ubuntu 170604 Oct 5 23:42 ./lib/libgstinsertbin-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 167976 Oct 5 23:51 ./lib/libmpeg2convert.a
-rw-r--r-- 1 ubuntu ubuntu 163226 Oct 5 23:42 ./lib/libgstphotography-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 145934 Oct 5 23:42 ./lib/libgstisoff-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 142862 Oct 5 19:13 ./lib/libffi.a
-rw-r--r-- 1 ubuntu ubuntu 132154 Oct 5 19:48 ./lib/libogg.a
-rw-r--r-- 1 ubuntu ubuntu 114954 Oct 5 20:08 ./lib/libcairo-gobject.a
-rw-r--r-- 1 ubuntu ubuntu 111578 Oct 5 20:53 ./lib/libgstallocators-1.0.a
-rw-r--r-- 1 ubuntu ubuntu 68582 Oct 5 19:30 ./lib/libgmodule-2.0.a
-rw-r--r-- 1 ubuntu ubuntu 46734 Oct 5 22:30 ./lib/liboggkate.a
-rw-r--r-- 1 ubuntu ubuntu 27928 Oct 5 19:07 ./lib/libcharset.a
-rw-r--r-- 1 ubuntu ubuntu 8518 Oct 5 19:30 ./lib/libgthread-2.0.a
- Q: what is the file size of 5 test applications that is released by Gstreamer community
- A: Specified static libraries is selected by Android.mk. Then, ndk-build generates libgstreamer-android.so for a JNI-based Android Java application.
$ ls -al
-rw-rw-r-- 1 ubuntu ubuntu 10494336 12월 12 07:44 android-tutorial-1-debug.apk
-rw-rw-r-- 1 ubuntu ubuntu 22468768 12월 12 07:44 android-tutorial-2-debug.apk
-rw-rw-r-- 1 ubuntu ubuntu 27790487 12월 12 07:44 android-tutorial-3-debug.apk
-rw-rw-r-- 1 ubuntu ubuntu 58496669 12월 12 07:44 android-tutorial-4-debug.apk
-rw-rw-r-- 1 ubuntu ubuntu 58506609 12월 12 07:44 android-tutorial-5-debug.apk
$ mkdir android-tutorial-5-debug ; cd android-tutorial-5-debug
$ unzip ../android-tutorial-5-debug.apk
$ du -sh ./
8.0K ./AndroidManifest.xml
80K ./META-INF
636K ./assets
1.6M ./classes.dex
117M ./lib
1.4M ./res
184K ./resources.arsc
$ find . -name *.so | xargs ls -alh
-rw-rw-r-- 1 ubuntu 1.1M Dec 31 1979 ./lib/arm64-v8a/libc++_shared.so
-rw-rw-r-- 1 ubuntu 31M Dec 31 1979 ./lib/arm64-v8a/libgstreamer_android.so <---- HERE!!!
-rw-rw-r-- 1 ubuntu 26K Dec 31 1979 ./lib/arm64-v8a/libtutorial-5.so
-rw-rw-r-- 1 ubuntu 642K Dec 31 1979 ./lib/armeabi-v7a/libc++_shared.so
-rw-rw-r-- 1 ubuntu 22M Dec 31 1979 ./lib/armeabi-v7a/libgstreamer_android.so <---- HERE!!!
-rw-rw-r-- 1 ubuntu 30K Dec 31 1979 ./lib/armeabi-v7a/libtutorial-5.so
-rw-rw-r-- 1 ubuntu 1.1M Dec 31 1979 ./lib/x86/libc++_shared.so
-rw-rw-r-- 1 ubuntu 31M Dec 31 1979 ./lib/x86/libgstreamer_android.so <---- HERE!!!
-rw-rw-r-- 1 ubuntu 30K Dec 31 1979 ./lib/x86/libtutorial-5.so
-rw-rw-r-- 1 ubuntu 1.1M Dec 31 1979 ./lib/x86_64/libc++_shared.so
-rw-rw-r-- 1 ubuntu 31M Dec 31 1979 ./lib/x86_64/libgstreamer_android.so <---- HERE!!!
-rw-rw-r-- 1 ubuntu 27K Dec 31 1979 ./lib/x86_64/libtutorial-5.so
$ readelf -s ./libgstreamer_android.so | wc -l
30760