How to build minizip-ng on android with flutter? - android

I was trying to build native shared library of minizip-ng with flutter on Linux, but I'm getting the error below.
It seems that it cannot find lzma.h, but trying set the property 'MZ_LZMA' in minizip-ng's CMakeLists.txt to 'OFF' does not helps.
I also tried installing the liblzma-dev, but nothing changed.
The error:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':native_add:buildCMakeDebug[arm64-v8a]'.
> Build command failed.
Error while executing process /home/user/Android/Sdk/cmake/3.18.1/bin/ninja with arguments {-C /home/user/Dev/flutter/native_add/android/.cxx/Debug/5c706627/arm64-v8a native_add}
ninja: Entering directory `/home/user/Dev/flutter/native_add/android/.cxx/Debug/5c706627/arm64-v8a'
[1/3] Building C object minizip-ng/CMakeFiles/minizip.dir/mz_strm_lzma.c.o
FAILED: minizip-ng/CMakeFiles/minizip.dir/mz_strm_lzma.c.o
/home/user/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=aarch64-none-linux-android24 --sysroot=/home/user/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/sysroot -DHAVE_INTTYPES_H -DHAVE_LZMA -DHAVE_STDINT_H -DHAVE_ZLIB -DLZMA_API_STATIC -DMZ_ZIP_NO_CRYPTO -DMZ_ZIP_NO_ENCRYPTION -DZLIB_COMPAT -D_LARGEFILE64_SOURCE -D_POSIX_C_SOURCE=200112L -D__USE_LARGEFILE64 -I../../../../minizip-ng -Iminizip-ng -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fno-limit-debug-info -fPIC -Wall -std=gnu99 -MD -MT minizip-ng/CMakeFiles/minizip.dir/mz_strm_lzma.c.o -MF minizip-ng/CMakeFiles/minizip.dir/mz_strm_lzma.c.o.d -o minizip-ng/CMakeFiles/minizip.dir/mz_strm_lzma.c.o -c ../../../../minizip-ng/mz_strm_lzma.c
../../../../minizip-ng/mz_strm_lzma.c:15:10: fatal error: 'lzma.h' file not found
#include "lzma.h"
^~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.
And the CMakeLists.txt in project/android/ is:
cmake_minimum_required(VERSION 3.13)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra")
add_library(native_test SHARED lib.cpp)
add_subdirectory(minizip-ng)
target_link_libraries(native_test minizip)
The content of lib.cpp is:
#include "minizip-ng/mz_compat.h"
extern "C" {
int native_add(int a, int b) {
return a + b;
}
}
The structure of project/android/:
├── build.gradle
├── CMakeLists.txt
├── lib.cpp
├── local.properties
├── minizip-ng
│ ├── cmake
│ │ ├── clone-repo.cmake
│ │ └── FindZLIBNG.cmake
│ ├── CMakeLists.txt
│ ├── INDEX.md
│ ├── LICENSE
│ ├── minigzip.c
│ ├── minizip.c
│ ├── minizip.pc.cmakein
│ ├── mz_compat.c
│ ├── mz_compat.h
│ ├── mz_compat_shim.h.in
│ ├── mz_crypt_apple.c
│ ├── mz_crypt.c
│ ├── mz_crypt.h
│ ├── mz_crypt_openssl.c
│ ├── mz_crypt_win32.c
│ ├── mz.h
│ ├── mz_os.c
│ ├── mz_os.h
│ ├── mz_os_posix.c
│ ├── mz_os_win32.c
│ ├── mz_strm_buf.c
│ ├── mz_strm_buf.h
│ ├── mz_strm_bzip.c
│ ├── mz_strm_bzip.h
│ ├── mz_strm.c
│ ├── mz_strm.h
│ ├── mz_strm_libcomp.c
│ ├── mz_strm_libcomp.h
│ ├── mz_strm_lzma.c
│ ├── mz_strm_lzma.h
│ ├── mz_strm_mem.c
│ ├── mz_strm_mem.h
│ ├── mz_strm_os.h
│ ├── mz_strm_os_posix.c
│ ├── mz_strm_os_win32.c
│ ├── mz_strm_pkcrypt.c
│ ├── mz_strm_pkcrypt.h
│ ├── mz_strm_split.c
│ ├── mz_strm_split.h
│ ├── mz_strm_wzaes.c
│ ├── mz_strm_wzaes.h
│ ├── mz_strm_zlib.c
│ ├── mz_strm_zlib.h
│ ├── mz_strm_zstd.c
│ ├── mz_strm_zstd.h
│ ├── mz_zip.c
│ ├── mz_zip.h
│ ├── mz_zip_rw.c
│ ├── mz_zip_rw.h
│ ├── README.md
├── native_test_android.iml
├── settings.gradle
└── src
└── main
├── AndroidManifest.xml
└── kotlin
└── com
└── example
└── native_test
└── NativeTestPlugin.kt
I tried to search the error, but didn't find anything similar.
edit:
The Android Ndk version is 25.1.8937393

Related

libGDX Cannot read file from Gdx.files.internal

I have a bit of a problem with my libGDX project. In class(high school, don't think of too much), we have to make a hangman game. With some of my friends, we started to make it in Scala. Well, it works, kind of.
But the problem is that I cannot read the files from which the words are generated. It's a yaml file(words.yml), inside the android sub-project's assets. It is packed inside the .jar file, I checked it, however when I try to read it using Gdx.files.internal it stops with a NullPointerException. It's bugging me because I was able to read the image files. I thought it is impossible to read using Gdx.files.internal from not the main file from the core project. But that doesn't seem to be the case since it crashes as well if I put it in that file.
The field where it dies:
private val map: (Int, Array[String]) = {
val yaml: Yaml = new Yaml //using the snakeyaml library
//Debug
println("DBG")
println(Gdx.files.local("words.yml").path()) //<-------It crashes here
println("more DBG")
val tmp: util.LinkedHashMap[String, Any] = yaml.load(
scala.io.Source.fromFile(Gdx.files.internal("words.yml").file()) mkString)
//^^^^^or here if I remove the debug part^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(tmp.get("wordCount").asInstanceOf[Int],
tmp.get("words").toString.replaceAll("[\\[\\]]","").split(",")
.map((s: String) => {
if(s(0) == ' ') s.substring(1)
else s
}))
}
Error msg:
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.infosoftcorp.wordpress.ish.Save.<init>(Save.scala:7)
at com.infosoftcorp.wordpress.ish.InfoSoftHangman.<init>(InfoSoftHangman.scala:35)
at com.infosoftcorp.wordpress.ish.desktop.DesktopLauncher.main(DesktopLauncher.java:17)
Caused by: java.lang.NullPointerException
at com.infosoftcorp.wordpress.ish.FileHandler$.<init>(FileHandler.scala:25)
at com.infosoftcorp.wordpress.ish.FileHandler$.<clinit>(FileHandler.scala)
... 3 more
File structure:
.
├── android
│ ├── android.iml
│ ├── AndroidManifest.xml
│ ├── assets
│ │ ├── icon.png
│ │ ├── img
│ │ │ ├── 10.png
│ │ │ ├── 11.png
│ │ │ ├── 1.png
│ │ │ ├── 2.png
│ │ │ ├── 3.png
│ │ │ ├── 4.png
│ │ │ ├── 5.png
│ │ │ ├── 6.png
│ │ │ ├── 7.png
│ │ │ ├── 8.png
│ │ │ ├── 9.png
│ │ │ └── line.png
│ │ └── words.yml
│ ├── build.gradle
│ ├── ic_launcher-web.png
│ ├── libs
│ │ ├── armeabi
│ │ │ ├── libgdx-bullet.so
│ │ │ └── libgdx.so
│ │ ├── armeabi-v7a
│ │ │ ├── libgdx-bullet.so
│ │ │ └── libgdx.so
│ │ └── x86
│ │ ├── libgdx-bullet.so
│ │ └── libgdx.so
│ ├── proguard-project.txt
│ ├── project.properties
│ ├── res
│ │ ├── drawable-hdpi
│ │ │ └── ic_launcher.png
│ │ ├── drawable-mdpi
│ │ │ └── ic_launcher.png
│ │ ├── drawable-xhdpi
│ │ │ └── ic_launcher.png
│ │ ├── drawable-xxhdpi
│ │ │ └── ic_launcher.png
│ │ ├── values
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── values-hu
│ │ └── strings.xml
│ └── src
│ └── com
│ └── infosoftcorp
│ └── wordpress
│ └── ish
│ └── android
│ └── AndroidLauncher.java
├── asd.html
├── bitbucket-pipelines.yml
├── build
│ ├── android-profile
│ │ ├── profile-2018-02-12-00-57-01-965.rawproto
│ │ ├── profile-2018-02-12-00-58-00-422.rawproto
│ │ ├── profile-2018-02-12-00-59-18-263.rawproto
│ │ ├── profile-2018-02-12-00-59-55-075.rawproto
│ │ ├── profile-2018-02-12-01-00-22-650.rawproto
│ │ └── profile-2018-02-12-01-03-02-363.rawproto
│ ├── generated
│ │ ├── mockable-android-26.jar
│ │ └── mockable-android-27.jar
│ └── intermediates
│ ├── lint-cache
│ │ ├── api-versions-6-27.0.1.bin
│ │ ├── typos-en.txt-2.bin
│ │ └── typos-hu.txt-2.bin
│ └── proguard-files
│ ├── proguard-android-optimize.txt-2.3.0
│ └── proguard-android.txt-2.3.0
├── build.gradle
├── core
│ ├── build
│ │ ├── classes
│ │ │ └── main
│ │ │ └── com
│ │ │ └── infosoftcorp
│ │ │ └── wordpress
│ │ │ └── ish
│ │ │ ├── FileHandler$$anonfun$1.class
│ │ │ ├── FileHandler.class
│ │ │ ├── FileHandler$.class
│ │ │ ├── InfoSoftHangman$$anonfun$create$1.class
│ │ │ ├── InfoSoftHangman$$anonfun$drawLines$1$1.class
│ │ │ ├── InfoSoftHangman.class
│ │ │ ├── InfoSoftHangman$InputHandler.class
│ │ │ ├── Parsing$$anonfun$parseString$1.class
│ │ │ ├── Parsing$$anonfun$removeEach$1.class
│ │ │ ├── Parsing.class
│ │ │ ├── Parsing$.class
│ │ │ ├── Parsing$DecLives.class
│ │ │ ├── Parsing$HMSignal.class
│ │ │ ├── Parsing$ParseError.class
│ │ │ ├── Parsing$ParsingResult.class
│ │ │ ├── Save.class
│ │ │ └── Save$.class
│ │ ├── libs
│ │ │ └── core-1.0.jar
│ │ └── tmp
│ │ ├── compileScala
│ │ └── jar
│ │ └── MANIFEST.MF
│ ├── build.gradle
│ ├── core.iml
│ └── src
│ └── com
│ └── infosoftcorp
│ └── wordpress
│ └── ish
│ ├── FileHandler.scala
│ ├── InfoSoftHangman.scala
│ ├── Parsing.scala
│ └── Save.scala
├── desktop
│ ├── build
│ │ ├── classes
│ │ │ └── main
│ │ │ └── com
│ │ │ └── infosoftcorp
│ │ │ └── wordpress
│ │ │ └── ish
│ │ │ └── desktop
│ │ │ └── DesktopLauncher.class
│ │ ├── dependency-cache
│ │ ├── libs
│ │ │ └── desktop-1.0.jar
│ │ └── tmp
│ │ └── <chaos>
│ ├── build.gradle
│ ├── desktop.iml
│ ├── out
│ │ └── production
│ │ └── classes
│ └── src
│ └── com
│ └── infosoftcorp
│ └── wordpress
│ └── ish
│ └── desktop
│ └── DesktopLauncher.java
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── is-hangman.iml
├── is-hangman.ipr
├── is-hangman.iws
├── local.properties
├── README.md
└── settings.gradle
I added the working directory for the desktop sub-project
So I was really stupid that is what happened.
When the new Save is initialized it wasn't called inside the create() function, but before it
Well, sometimes I do stupid stuff.
Sorry for asking stupid questions you could never answer as I didn't post the code.

Using a prebuilt shared Library in Android Studio (cmake)

I want to use a C++ shared library inside my Android App.
I tried to follow along the hello-libs example from Google's NDK samples, but somehow it doesn't work out.
It seems, that my library isn't packed into the APK. All tutorials i found are using *.mk-files, but I want to use cmake.
This is my CMakeLists.txt:
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# native lib
add_library(native-lib SHARED
native-lib.cpp)
set(IMPORT_DIR ${CMAKE_SOURCE_DIR}/../jniLibs)
# shared lib
add_library(shared-lib SHARED IMPORTED)
set_target_properties(shared-lib PROPERTIES IMPORTED_LOCATION
${IMPORT_DIR}/dynamic/lib/${ANDROID_ABI}/libLibrary.so)
target_include_directories(native-lib PRIVATE
${IMPORT_DIR}/dynamic/include)
# linking libs
target_link_libraries(native-lib
android
shared-lib
log)
As soon as I link the shared-lib along with the others, I get the following error, when running the app:
E/art: dlopen("/data/app/my.package.name-1/lib/arm/libnative-lib.so", RTLD_LAZY) failed: dlopen failed: library "C:/projects/HelloLibs/app/src/main/cpp/../jniLibs/dynamic/lib/armeabi-v7a/libLibrary.so" not foun
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: my.package.name, PID: 29266
java.lang.UnsatisfiedLinkError: dlopen failed: library "C:/projects/HelloLibs/app/src/main/cpp/../jniLibs/dynamic/lib/armeabi-v7a/libLibrary.so" not found
at java.lang.Runtime.loadLibrary(Runtime.java:371)
at java.lang.System.loadLibrary(System.java:988)
at my.package.name.MainActivity.<clinit>(MainActivity.java:11)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1690)
at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2543)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771)
at android.app.ActivityThread.access$900(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1432)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5912)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
It looks like the library is not found on the device. Otherwise it looks like the librarie's path is still the one on my local maschine.
The prebuilt libLibrary.so does not have SONAME. If for whatever reason you cannot rebuild this library with latest NDK, you may try the patchelf utility to add SONAME to existing binary.
To package the prebuilt library into your APK, you need to manually configure Gradle with the sourceSets block to include the path to your .so file. After building your APK, you can verify which libraries Gradle packages into your APK by using the APK Analyzer(Build>Analyze APK...).
android {
...
sourceSets {
main {
jniLibs.srcDirs 'imported-lib/src/', 'more-imported-libs/src/'
}
}
for more information please see here "Include prebuilt native libraries"
You don't need to use CMake to use shared libraries (.so files). Just place the libraries inside the respective directories in src/main/jniLibs directory. Then you can load the libraries directly.
Android studio may show error in the native method declarations but, your app will work fine.
Another solution for packing the prebuilt libraries into your APK - linking them to jniLibs.
For example, I don't use direct placement of libraries (because they already exist elsewhere - in my case in docker image with all required prebuilts, SDK, NDK, etc.) but instead of it I just use linking to them to put them in APK. And if such libraries are also needed at build time, cmake can simply uses find_package().
/app/src/main$ tree
.
├── jniLibs
│ ├── arm64-v8a
│ │ ├── libCommonAPI.so -> /opt/thirdparty/android-29/arm64-v8a/capicxx-core-runtime/lib/libCommonAPI.so
│ │ ├── libCommonAPI-SomeIP.so -> /opt/thirdparty/android-29/arm64-v8a/capicxx-someip-runtime/lib/libCommonAPI-SomeIP.so
│ │ ├── libvsomeip3-cfg.so -> /opt/thirdparty/android-29/arm64-v8a/vsomeip/lib/libvsomeip3-cfg.so
│ │ ├── libvsomeip3-e2e.so -> /opt/thirdparty/android-29/arm64-v8a/vsomeip/lib/libvsomeip3-e2e.so
│ │ ├── libvsomeip3-sd.so -> /opt/thirdparty/android-29/arm64-v8a/vsomeip/lib/libvsomeip3-sd.so
│ │ └── libvsomeip3.so -> /opt/thirdparty/android-29/arm64-v8a/vsomeip/lib/libvsomeip3.so
│ ├── armeabi-v7a
│ │ ├── libCommonAPI.so -> /opt/thirdparty/android-29/armeabi-v7a/capicxx-core-runtime/lib/libCommonAPI.so
│ │ ├── libCommonAPI-SomeIP.so -> /opt/thirdparty/android-29/armeabi-v7a/capicxx-someip-runtime/lib/libCommonAPI-SomeIP.so
│ │ ├── libvsomeip3-cfg.so -> /opt/thirdparty/android-29/armeabi-v7a/vsomeip/lib/libvsomeip3-cfg.so
│ │ ├── libvsomeip3-e2e.so -> /opt/thirdparty/android-29/armeabi-v7a/vsomeip/lib/libvsomeip3-e2e.so
│ │ ├── libvsomeip3-sd.so -> /opt/thirdparty/android-29/armeabi-v7a/vsomeip/lib/libvsomeip3-sd.so
│ │ └── libvsomeip3.so -> /opt/thirdparty/android-29/armeabi-v7a/vsomeip/lib/libvsomeip3.so
│ ├── x86
│ │ ├── libCommonAPI.so -> /opt/thirdparty/android-29/x86/capicxx-core-runtime/lib/libCommonAPI.so
│ │ ├── libCommonAPI-SomeIP.so -> /opt/thirdparty/android-29/x86/capicxx-someip-runtime/lib/libCommonAPI-SomeIP.so
│ │ ├── libvsomeip3-cfg.so -> /opt/thirdparty/android-29/x86/vsomeip/lib/libvsomeip3-cfg.so
│ │ ├── libvsomeip3-e2e.so -> /opt/thirdparty/android-29/x86/vsomeip/lib/libvsomeip3-e2e.so
│ │ ├── libvsomeip3-sd.so -> /opt/thirdparty/android-29/x86/vsomeip/lib/libvsomeip3-sd.so
│ │ └── libvsomeip3.so -> /opt/thirdparty/android-29/x86/vsomeip/lib/libvsomeip3.so
│ └── x86_64
│ ├── libCommonAPI.so -> /opt/thirdparty/android-29/x86_64/capicxx-core-runtime/lib/libCommonAPI.so
│ ├── libCommonAPI-SomeIP.so -> /opt/thirdparty/android-29/x86_64/capicxx-someip-runtime/lib/libCommonAPI-SomeIP.so
│ ├── libvsomeip3-cfg.so -> /opt/thirdparty/android-29/x86_64/vsomeip/lib/libvsomeip3-cfg.so
│ ├── libvsomeip3-e2e.so -> /opt/thirdparty/android-29/x86_64/vsomeip/lib/libvsomeip3-e2e.so
│ ├── libvsomeip3-sd.so -> /opt/thirdparty/android-29/x86_64/vsomeip/lib/libvsomeip3-sd.so
│ └── libvsomeip3.so -> /opt/thirdparty/android-29/x86_64/vsomeip/lib/libvsomeip3.so
.

Where is semver coming from?

I did the following before:
MacBook-Pro:bb-ns-ng-dr ishandutta2007$ npm uninstall -g semver
MacBook-Pro:bb-ns-ng-dr ishandutta2007$ npm uninstall semver
MacBook-Pro:bb-ns-ng-dr ishandutta2007$ rm -rf platforms/
MacBook-Pro:bb-ns-ng-dr ishandutta2007$ rm -rf node_modules/
MacBook-Pro:bb-ns-ng-dr ishandutta2007$ tns build android --clean
I keep getting semver Duplicate resources error, even though semver is neither any of of node modules I defines nor any of theri tertiary dependency. Keeping aside the reson of Duplicate resources I am more curious how is it coming in the first place.
Could not merge source set folders:
[app/node_modules/semver/semver.min.js]
/Users/ishandutta2007/Documents/Projects/bb-ns-ng-dr/platforms/android/src/main/assets/app/node_modules/semver/semver.min.js
[app/node_modules/semver/semver.min.js]
/Users/ishandutta2007/Documents/Projects/bb-ns-ng-dr/platforms/android/src/main/assets/app/node_modules/semver/semver.min.js.gz:
Error: Duplicate resources [app/node_modules/semver/semver.browser.js]
/Users/ishandutta2007/Documents/Projects/bb-ns-ng-dr/platforms/android/src/main/assets/app/node_modules/semver/semver.browser.js
[app/node_modules/semver/semver.browser.js]
/Users/ishandutta2007/Documents/Projects/bb-ns-ng-dr/platforms/android/src/main/assets/app/node_modules/semver/semver.browser.js.gz:
Error: Duplicate resources
Here is how my node modules package tree looks like
MacBook-Pro:bb-ns-ng-dr ishandutta2007$ npm ls
/Users/ishandutta2007/Documents/Projects/bb-ns-ng-dr
├── #angular/animations#4.1.3
├── #angular/common#4.1.3
├── #angular/compiler#4.1.3
├── UNMET PEER DEPENDENCY #angular/core#4.1.3
├── #angular/forms#4.1.3
├── #angular/http#4.1.3
├── #angular/platform-browser#4.1.3
├── #angular/platform-browser-dynamic#4.1.3
├── #angular/router#4.1.3
├── #ngrx/core#1.2.0
├── #ngrx/effects#2.0.2
├── #ngrx/store#2.2.1
├── #ngrx/store-devtools#3.2.4
├── #types/gapi#0.0.30
├── #types/gapi.auth2#0.0.34
├── #types/gapi.youtube#3.0.31
├── #types/jasmine#2.5.38
├── #types/youtube#0.0.28
├─┬ babel-traverse#6.24.1
│ ├─┬ babel-code-frame#6.22.0
│ │ ├─┬ chalk#1.1.3
│ │ │ ├── ansi-styles#2.2.1
│ │ │ ├── escape-string-regexp#1.0.5
│ │ │ ├─┬ has-ansi#2.0.0
│ │ │ │ └── ansi-regex#2.1.1
│ │ │ ├── strip-ansi#3.0.1
│ │ │ └── supports-color#2.0.0
│ │ └── js-tokens#3.0.1
│ ├── babel-messages#6.23.0
│ ├─┬ babel-runtime#6.23.0
│ │ ├── core-js#2.4.1
│ │ └── regenerator-runtime#0.10.5
│ ├─┬ debug#2.6.8
│ │ └── ms#2.0.0
│ ├── globals#9.17.0
│ ├─┬ invariant#2.2.2
│ │ └── loose-envify#1.3.1
│ └── lodash#4.17.4
├─┬ babel-types#6.24.1
│ ├── esutils#2.0.2
│ └── to-fast-properties#1.0.3
├── babylon#6.17.1
├── lazy#1.0.11
├─┬ nativescript-angular#3.0.0
│ └── nativescript-intl#3.0.0
├─┬ nativescript-dev-typescript#0.4.5
│ └─┬ nativescript-hook#0.2.1
│ ├─┬ glob#6.0.4
│ │ ├─┬ inflight#1.0.6
│ │ │ └── wrappy#1.0.2
│ │ ├── inherits#2.0.3
│ │ ├─┬ minimatch#3.0.4
│ │ │ └─┬ brace-expansion#1.1.7
│ │ │ ├── balanced-match#0.4.2
│ │ │ └── concat-map#0.0.1
│ │ ├── once#1.4.0
│ │ └── path-is-absolute#1.0.1
│ └─┬ mkdirp#0.5.1
│ └── minimist#0.0.8
├── nativescript-exoplayer#3.0.7
├── nativescript-localstorage#1.1.2
├── nativescript-telerik-ui#2.0.1
├── nativescript-theme-core#1.0.4
├── ngrx-action-creator-factory#0.0.1
├── ngrx-store-localstorage#0.1.5
├── reflect-metadata#0.1.10
├─┬ rxjs#5.3.3
│ └── symbol-observable#1.0.4
├─┬ tns-core-modules#3.0.1
│ └── tns-core-modules-widgets#3.0.1
├── typescript#2.2.2
└── zone.js#0.8.11
npm ERR! peer dep missing: #angular/core#^2.0.0, required by #ngrx/effects#2.0.2
npm ERR! peer dep missing: #angular/core#^2.0.0, required by #ngrx/store#2.2.1
npm ERR! peer dep missing: #angular/core#^2.0.0-rc.5, required by ngrx-store-localstorage#0.1.5
npm depends on semver, so it seems unlikely you can totally get rid of it from your globals. According to npm there are over 4,000 packages with a dependency on it.
Instead of asking where it is coming from, perhaps you would want to focus your questions on what problem you are having.

Titanium Terminated exit value 0 Application Installer

Titanium Console.
[INFO] : Making sure the adb server is running
[INFO] : Removing deploy.json from SD card
[INFO] : Installing apk: C:\androidAulaEscolar_Laboratorio\build\android\bin\Aula Escolar.apk
[INFO] : Installing app on device: GT-S5830M
log
!SESSION 2015-02-17 10:21:41.279 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_55
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=es_MX
Command-line arguments: -os win32 -ws win32 -arch x86
!ENTRY org.eclipse.ui 2 0 2015-02-17 10:21:45.364
!MESSAGE Warnings while parsing the images from the 'org.eclipse.ui.commandImages' extension point.
!SUBENTRY 1 org.eclipse.ui 2 0 2015-02-17 10:21:45.364
!MESSAGE Cannot bind to an undefined command: plug-in='com.appcelerator.titanium.android.ui', id='com.appcelerator.titanium.mobile.command.run_on_device.android'
!SUBENTRY 1 org.eclipse.ui 2 0 2015-02-17 10:21:45.364
!MESSAGE Cannot bind to an undefined command: plug-in='com.appcelerator.titanium.android.ui', id='com.appcelerator.titanium.mobile.command.debug_on_device.android'
!ENTRY com.aptana.syncing.core 2 0 2015-02-17 10:21:50.553
!MESSAGE (Build 3.2.1.201402041146) [WARNING] com.aptana.syncing.core/debug Failed to load source connection point from URI file:/C:/Users/juanvilu
!ENTRY com.appcelerator.titanium.ui.ide 4 0 2015-02-17 10:22:03.164
!MESSAGE (Build 3.2.1.201402041146) [ERROR] com.appcelerator.titanium.core/debug/dashboard Unknown SDK iphone
!ENTRY com.appcelerator.titanium.core 2 0 2015-02-17 10:23:32.446
!MESSAGE (Build 3.2.1.201402041146) [WARNING] Failed parsing a command handler priority. Using the default priority.
Diagnostic log
Host OS: Windows 8
OS Version: 6.2
OS Arch: x86
JRE Version: 1.7.0_55
JRE Vendor: Oracle Corporation
JRE Home: C:\Program Files (x86)\Java\jre7
Titanium Studio Version: 3.2.1.201402041146
Install Directory: file:/C:/Users/juanvilu/AppData/Local/Titanium Studio/
Workspace Directory: file:/C:/WorkSpace/
VM Arguments: -Xms128m
-Xmx1024m
-XX:MaxPermSize=256m
-Xverify:none
-Declipse.p2.unsignedPolicy=allow
-Declipse.log.size.max=10000
-Declipse.log.backup.max=5
-Djava.awt.headless=true
-Djava.class.path=C:\Users\juanvilu\AppData\Local\Titanium Studio\\plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
Language: es_MX
ACS App URL: https://api.cloud.appcelerator.com/v1/apps/create.json?key=7fI2AZHmrSvAHNKsSQKzrSXz5NWjo2tt
ACS Login URL: https://api.cloud.appcelerator.com/v1/admins/studio_login.json?key=7fI2AZHmrSvAHNKsSQKzrSXz5NWjo2tt
Latest Titanium SDK: 3.2.2.GA
Titanium SDK Version: 3.1.2.GA
SDK Modules API Version:2
SDK Timestamp: 08/14/13 12:45
SDK Build Number: 5ceaff8
SDK Location: C:\Users\juanvilu\AppData\Roaming\Titanium\mobilesdk\win32\3.1.2.GA
Titanium SDK Version: 3.1.3.GA
SDK Modules API Version:2
SDK Timestamp: 09/18/13 12:00
SDK Build Number: 222f4d1
SDK Location: C:\Users\juanvilu\AppData\Roaming\Titanium\mobilesdk\win32\3.1.3.GA
Titanium SDK Version: 3.2.0.GA
SDK Modules API Version:2
SDK Timestamp: 12/20/13 10:56
SDK Build Number: d9182d6
SDK Location: C:\Users\juanvilu\AppData\Roaming\Titanium\mobilesdk\win32\3.2.0.GA
Titanium SDK Version: 3.2.1.GA
SDK Modules API Version:2
SDK Timestamp: 02/06/14 17:01
SDK Build Number: 991027b
SDK Location: C:\Users\juanvilu\AppData\Roaming\Titanium\mobilesdk\win32\3.2.1.GA
Titanium SDK Version: 3.2.2.GA
SDK Modules API Version:2
SDK Timestamp: 03/05/14 12:21
SDK Build Number: 96e9a07
SDK Location: C:\Users\juanvilu\AppData\Roaming\Titanium\mobilesdk\win32\3.2.2.GA
Browsers
- Default system web browser: Unknown (N/A)
- Internet Explorer: 9.10.9200.17228 (C:\Program Files (x86)\Internet Explorer\iexplore.exe)
- Internet Explorer: 9.10.9200.17228 (C:\Program Files\Internet Explorer\iexplore.exe)
- Mozilla Firefox: 35.0.1 (C:\Program Files (x86)\Mozilla Firefox\firefox.exe)
- Google Chrome: 40.0.2214.91 (C:\Program Files (x86)\Google\Chrome\Application\chrome.exe)
- Opera Stable: 27.0.1689.69 (C:\Program Files (x86)\Opera\Launcher.exe)
- Safari: 5.34.57.2 (C:\Program Files (x86)\Safari\Safari.exe)
Android SDK Version: 4.4.2
Android NDK Version: r9d (64-bit)
Titanium CLI Enabled: true
Node.ACS Host URL: null
Node.JS Version: v0.10.13
NPM Path: C:\Program Files (x86)\nodejs\node_modules\npm\bin\npm-cli.js
NPM Version: 1.3.2
C:\Users\juanvilu\AppData\Roaming\npm
├── acs#1.0.14
├── alloy#1.3.1
├── jade#1.1.5
├── stylus#0.42.2
└── titanium#3.2.1
npm -g ls titanium: C:\Users\juanvilu\AppData\Roaming\npm
└── titanium#3.2.1
Packages: C:\Users\juanvilu\AppData\Roaming\npm
├─┬ acs#1.0.14
│ ├── acs-node#0.9.2
│ ├── colors#0.6.0-1
│ ├── commander#0.6.1
│ ├─┬ connect#2.3.5
│ │ ├── bytes#0.0.1
│ │ ├── cookie#0.0.4
│ │ ├── crc#0.2.0
│ │ ├── debug#0.7.4
│ │ ├── formidable#1.0.11
│ │ ├── fresh#0.0.1
│ │ ├── mime#1.2.4
│ │ ├── qs#0.4.2
│ │ └── range-parser#0.0.4
│ ├── ejs#0.8.0
│ ├── esprima#0.9.9
│ ├─┬ express#3.0.0
│ │ ├─┬ connect#2.6.0
│ │ │ ├── bytes#0.1.0
│ │ │ ├── formidable#1.0.11
│ │ │ ├── pause#0.0.1
│ │ │ ├── qs#0.5.1
│ │ │ └─┬ send#0.0.4
│ │ │ └── mime#1.2.6
│ │ ├── cookie#0.0.4
│ │ ├── crc#0.2.0
│ │ ├── debug#0.7.4
│ │ ├── fresh#0.1.0
│ │ ├── methods#0.0.1
│ │ ├── range-parser#0.0.4
│ │ └─┬ send#0.1.0
│ │ └── mime#1.2.6
│ ├─┬ fstream#0.1.18
│ │ ├── graceful-fs#1.1.14
│ │ ├── inherits#1.0.0
│ │ └── rimraf#2.2.6
│ ├─┬ jade#0.28.1
│ │ └── coffee-script#1.4.0
│ ├─┬ log4js#0.5.1
│ │ └── async#0.1.15
│ ├── mkdirp#0.3.3
│ ├── node-uuid#1.3.3
│ ├─┬ npm#1.4.4
│ │ ├── abbrev#1.0.4
│ │ ├── ansi#0.2.1
│ │ ├── ansicolors#0.3.2
│ │ ├── ansistyles#0.1.3
│ │ ├── archy#0.0.2
│ │ ├── block-stream#0.0.7
│ │ ├── child-process-close#0.1.1
│ │ ├── chmodr#0.1.0
│ │ ├── chownr#0.0.1
│ │ ├── cmd-shim#1.1.1
│ │ ├── columnify#0.1.2
│ │ ├── editor#0.0.5
│ │ ├── fstream#0.1.25
│ │ ├─┬ fstream-npm#0.1.6
│ │ │ └── fstream-ignore#0.0.7
│ │ ├── github-url-from-git#1.1.1
│ │ ├── github-url-from-username-repo#0.0.2
│ │ ├── glob#3.2.7
│ │ ├── graceful-fs#2.0.2
│ │ ├── inherits#2.0.1
│ │ ├── ini#1.1.0
│ │ ├─┬ init-package-json#0.0.14
│ │ │ └── promzard#0.2.1
│ │ ├── lockfile#0.4.2
│ │ ├── lru-cache#2.5.0
│ │ ├─┬ minimatch#0.2.14
│ │ │ └── sigmund#1.0.0
│ │ ├── mkdirp#0.3.5
│ │ ├── node-gyp#0.12.2
│ │ ├── nopt#2.2.0
│ │ ├── npm-install-checks#1.0.0
│ │ ├── npm-registry-client#0.4.4
│ │ ├── npm-user-validate#0.0.3
│ │ ├─┬ npmconf#0.1.12
│ │ │ └─┬ config-chain#1.1.8
│ │ │ └── proto-list#1.2.2
│ │ ├── npmlog#0.0.6
│ │ ├── once#1.3.0
│ │ ├── opener#1.3.0
│ │ ├── osenv#0.0.3
│ │ ├── path-is-inside#1.0.0
│ │ ├─┬ read#1.0.5
│ │ │ └── mute-stream#0.0.4
│ │ ├── read-installed#1.0.0
│ │ ├─┬ read-package-json#1.1.7
│ │ │ └── normalize-package-data#0.2.9
│ │ ├─┬ request#2.30.0
│ │ │ ├── aws-sign2#0.5.0
│ │ │ ├── forever-agent#0.5.0
│ │ │ ├─┬ form-data#0.1.2
│ │ │ │ ├── async#0.2.9
│ │ │ │ └─┬ combined-stream#0.0.4
│ │ │ │ └── delayed-stream#0.0.5
│ │ │ ├─┬ hawk#1.0.0
│ │ │ │ ├── boom#0.4.2
│ │ │ │ ├── cryptiles#0.2.2
│ │ │ │ ├── hoek#0.9.1
│ │ │ │ └── sntp#0.2.4
│ │ │ ├─┬ http-signature#0.10.0
│ │ │ │ ├── asn1#0.1.11
│ │ │ │ ├── assert-plus#0.1.2
│ │ │ │ └── ctype#0.5.2
│ │ │ ├── json-stringify-safe#5.0.0
│ │ │ ├── mime#1.2.11
│ │ │ ├── node-uuid#1.4.1
│ │ │ ├── oauth-sign#0.3.0
│ │ │ ├── qs#0.6.6
│ │ │ ├─┬ tough-cookie#0.9.15
│ │ │ │ └── punycode#1.2.3
│ │ │ └── tunnel-agent#0.3.0
│ │ ├── retry#0.6.0
│ │ ├── rimraf#2.2.6
│ │ ├── semver#2.2.1
│ │ ├─┬ sha#1.2.3
│ │ │ └── readable-stream#1.0.24
│ │ ├── slide#1.1.5
│ │ ├── tar#0.1.19
│ │ ├── text-table#0.2.0
│ │ ├── uid-number#0.0.5
│ │ └── which#1.0.5
│ ├── pkginfo#0.2.2
│ ├─┬ request#2.14.0
│ │ ├─┬ form-data#0.0.7
│ │ │ ├── async#0.1.22
│ │ │ └─┬ combined-stream#0.0.4
│ │ │ └── delayed-stream#0.0.5
│ │ └── mime#1.2.9
│ ├─┬ socket.io#0.9.16
│ │ ├── base64id#0.1.0
│ │ ├── policyfile#0.0.4
│ │ ├── redis#0.7.3
│ │ └─┬ socket.io-client#0.9.16
│ │ ├─┬ active-x-obfuscator#0.0.1
│ │ │ └── zeparser#0.0.5
│ │ ├── uglify-js#1.2.5
│ │ ├─┬ ws#0.4.31
│ │ │ ├── nan#0.3.2
│ │ │ ├── options#0.0.5
│ │ │ └── tinycolor#0.0.1
│ │ └── xmlhttprequest#1.4.2
│ ├── string#1.1.0
│ ├─┬ tar#0.1.13
│ │ ├─┬ block-stream#0.0.7
│ │ │ └── inherits#2.0.1
│ │ └── inherits#1.0.0
│ ├── temp#0.4.0
│ ├── uglify-js#1.3.2
│ ├── underscore#1.3.3
│ └── wrench#1.3.9
├─┬ alloy#1.3.1
│ ├── colors#0.6.0-1
│ ├── commander#0.6.1
│ ├─┬ jsonlint#1.5.1
│ │ ├── JSV#4.0.2
│ │ └─┬ nomnom#1.6.2
│ │ ├── colors#0.5.1
│ │ └── underscore#1.4.4
│ ├── pkginfo#0.2.2
│ ├─┬ source-map#0.1.9
│ │ └── amdefine#0.1.0
│ ├─┬ uglify-js#2.2.5
│ │ └─┬ optimist#0.3.7
│ │ └── wordwrap#0.0.2
│ ├── wrench#1.3.9
│ ├─┬ xml2tss#0.0.5
│ │ └─┬ xml2js#0.2.8
│ │ └── sax#0.5.8
│ └── xmldom#0.1.13
├─┬ jade#1.1.5
│ ├── character-parser#1.2.0
│ ├── commander#2.1.0
│ ├─┬ constantinople#1.0.2
│ │ └─┬ uglify-js#2.4.12
│ │ ├── async#0.2.10
│ │ ├─┬ optimist#0.3.7
│ │ │ └── wordwrap#0.0.2
│ │ ├─┬ source-map#0.1.32
│ │ │ └── amdefine#0.1.0
│ │ └── uglify-to-browserify#1.0.2
│ ├── mkdirp#0.3.5
│ ├─┬ monocle#1.1.51
│ │ └─┬ readdirp#0.2.5
│ │ └─┬ minimatch#0.2.14
│ │ ├── lru-cache#2.5.0
│ │ └── sigmund#1.0.0
│ ├─┬ transformers#2.1.0
│ │ ├─┬ css#1.0.8
│ │ │ ├── css-parse#1.0.4
│ │ │ └── css-stringify#1.0.5
│ │ ├─┬ promise#2.0.0
│ │ │ └── is-promise#1.0.0
│ │ └─┬ uglify-js#2.2.5
│ │ ├─┬ optimist#0.3.7
│ │ │ └── wordwrap#0.0.2
│ │ └─┬ source-map#0.1.32
│ │ └── amdefine#0.1.0
│ └─┬ with#2.0.0
│ └─┬ uglify-js#2.4.0
│ ├── async#0.2.10
│ ├─┬ optimist#0.3.7
│ │ └── wordwrap#0.0.2
│ ├─┬ source-map#0.1.32
│ │ └── amdefine#0.1.0
│ └── uglify-to-browserify#1.0.2
├─┬ stylus#0.42.2
│ ├── css-parse#1.7.0
│ ├── debug#0.7.4
│ ├─┬ glob#3.2.8
│ │ ├── inherits#2.0.1
│ │ └─┬ minimatch#0.2.14
│ │ ├── lru-cache#2.5.0
│ │ └── sigmund#1.0.0
│ ├── mkdirp#0.3.5
│ └── sax#0.5.8
└─┬ titanium#3.2.1
├── async#0.2.10
├── colors#0.6.2
├─┬ fields#0.1.12
│ └── keypress#0.1.0
├── humanize#0.0.9
├─┬ jade#0.35.0
│ ├── character-parser#1.2.0
│ ├── commander#2.0.0
│ ├─┬ constantinople#1.0.2
│ │ └─┬ uglify-js#2.4.12
│ │ ├─┬ optimist#0.3.7
│ │ │ └── wordwrap#0.0.2
│ │ ├─┬ source-map#0.1.32
│ │ │ └── amdefine#0.1.0
│ │ └── uglify-to-browserify#1.0.2
│ ├── mkdirp#0.3.5
│ ├─┬ monocle#1.1.50
│ │ └─┬ readdirp#0.2.5
│ │ └─┬ minimatch#0.2.14
│ │ ├── lru-cache#2.5.0
│ │ └── sigmund#1.0.0
│ ├─┬ transformers#2.1.0
│ │ ├─┬ css#1.0.8
│ │ │ ├── css-parse#1.0.4
│ │ │ └── css-stringify#1.0.5
│ │ ├─┬ promise#2.0.0
│ │ │ └── is-promise#1.0.0
│ │ └─┬ uglify-js#2.2.5
│ │ ├─┬ optimist#0.3.7
│ │ │ └── wordwrap#0.0.2
│ │ └─┬ source-map#0.1.32
│ │ └── amdefine#0.1.0
│ └─┬ with#1.1.1
│ └─┬ uglify-js#2.4.0
│ ├─┬ optimist#0.3.7
│ │ └── wordwrap#0.0.2
│ ├─┬ source-map#0.1.32
│ │ └── amdefine#0.1.0
│ └── uglify-to-browserify#1.0.2
├── longjohn#0.2.2
├── moment#2.4.0
├─┬ node-appc#0.2.0
│ ├── adm-zip#0.4.4
│ ├── diff#1.0.8
│ ├─┬ dox#0.4.4
│ │ ├── commander#0.6.1
│ │ └── github-flavored-markdown#1.0.1
│ ├── node-uuid#1.4.1
│ ├── semver#2.1.0
│ ├─┬ uglify-js#2.3.6
│ │ ├─┬ optimist#0.3.7
│ │ │ └── wordwrap#0.0.2
│ │ └─┬ source-map#0.1.32
│ │ └── amdefine#0.1.0
│ └── xmldom#0.1.19
├─┬ optimist#0.6.1
│ ├── minimist#0.0.7
│ └── wordwrap#0.0.2
├─┬ request#2.27.0
│ ├── aws-sign#0.3.0
│ ├── cookie-jar#0.3.0
│ ├── forever-agent#0.5.2
│ ├─┬ form-data#0.1.2
│ │ └─┬ combined-stream#0.0.4
│ │ └── delayed-stream#0.0.5
│ ├─┬ hawk#1.0.0
│ │ ├── boom#0.4.2
│ │ ├── cryptiles#0.2.2
│ │ ├── hoek#0.9.1
│ │ └── sntp#0.2.4
│ ├─┬ http-signature#0.10.0
│ │ ├── asn1#0.1.11
│ │ ├── assert-plus#0.1.2
│ │ └── ctype#0.5.2
│ ├── json-stringify-safe#5.0.0
│ ├── mime#1.2.11
│ ├── node-uuid#1.4.1
│ ├── oauth-sign#0.3.0
│ ├── qs#0.6.6
│ └── tunnel-agent#0.3.0
├── semver#2.2.1
├── sprintf#0.1.3
├─┬ temp#0.6.0
│ ├── osenv#0.0.3
│ └─┬ rimraf#2.1.4
│ └── graceful-fs#1.2.3
├─┬ winston#0.6.2
│ ├── async#0.1.22
│ ├── cycle#1.0.3
│ ├── eyes#0.1.8
│ ├── pkginfo#0.2.3
│ ├── request#2.9.203
│ └── stack-trace#0.0.8
└── wrench#1.5.7
NPM_CONFIG_PREFIX env value: null
Npm config prefix value : C:\Users\juanvilu\AppData\Roaming\npm
ENV:
ProgramData=C:\ProgramData
USERPROFILE=C:\Users\juanvilu
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
JAVA_HOME=%PROGRAMFILES%\Java\jdk1.7.0_40\bin
ProgramFiles(x86)=C:\Program Files (x86)
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
Path_v2=C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Java\jdk1.8.0_31\bin;C:\Program Files (x86)\nodejs\;C:\Program Files (x86)\nodejs\;C:\android-sdk\tools;C:\android-sdk\platform-tools;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\WinSCP;C:\Program Files (x86)\Windows Live\Shared
SystemDrive=C:
TEMP=C:\Users\juanvilu\AppData\Local\Temp
ProgramFiles=C:\Program Files (x86)
Path=C:/Program Files (x86)/Java/jre7/bin/client;C:/Program Files (x86)/Java/jre7/bin;C:/Program Files (x86)/Java/jre7/lib/i386;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Java\jdk1.7.0_40\bin;C:\Program Files (x86)\nodejs\;C:\Program Files (x86)\nodejs\;C:\android-sdk\tools;C:\android-sdk\platform-tools;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\WinSCP;C:\Program Files (x86)\Windows Live\Shared;C:\Users\juanvilu\AppData\Roaming\npm;C:\android-sdk\tools;C:\android-sdk\platform-tools;C:\Program Files\Git\bin;C:\android-sdk\tools;C:\android-sdk\platform-tools;C:\Program Files\Git\bin;C:\Program Files\nodejs;C:\Program Files\Java\jdk1.7.0_40\bin;C:\Python27;C:\Users\juanvilu\AppData\Local\Titanium Studio;
HOMEDRIVE=C:
PROCESSOR_REVISION=3a09
USERDOMAIN=dev-juanvilu-w8
ALLUSERSPROFILE=C:\ProgramData
android_sdk=c:\android-sdk
ProgramW6432=C:\Program Files
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 58 Stepping 9, GenuineIntel
SESSIONNAME=Console
TMP=C:\Users\juanvilu\AppData\Local\Temp
PROCESSOR_ARCHITECTURE=x86
LOGONSERVER=\\DEV-JUANVILU-W8
CommonProgramFiles=C:\Program Files (x86)\Common Files
PROCESSOR_ARCHITEW6432=AMD64
OS=Windows_NT
FP_NO_HOST_CHECK=NO
HOMEPATH=\Users\juanvilu
PROCESSOR_LEVEL=6
CommonProgramW6432=C:\Program Files\Common Files
USERDOMAIN_ROAMINGPROFILE=dev-juanvilu-w8
LOCALAPPDATA=C:\Users\juanvilu\AppData\Local
COMPUTERNAME=DEV-JUANVILU-W8
SystemRoot=C:\Windows
windir=C:\Windows
NUMBER_OF_PROCESSORS=4
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
USERNAME=juanvilu
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
ComSpec=C:\Windows\system32\cmd.exe
APPDATA=C:\Users\juanvilu\AppData\Roaming
Confirm that you have the compatible build-tool folder, like r20. It must be compatible with the SDK tool which you are using to build. For example 3.5.0.GA can be build using r21.

What is an easy way to call a FFmpeg executable compiled for Android from java code?

I have compiled FFmpeg for Android to suite my needs in terms of codecs, muxers etc.
Now I have an executable that, from what I understand, should be placed in my project dir under <project-root>/external/<arbitrary-folder-name>/data/data/<my-app-package-name>/app_opt. What I have inside app_opt now is:
.
├── bin
│ └── ffmpeg
├── include
│ ├── libavcodec
│ │ ├── avcodec.h
│ │ ├── avfft.h
│ │ ├── dxva2.h
│ │ ├── vaapi.h
│ │ ├── vda.h
│ │ ├── vdpau.h
│ │ ├── version.h
│ │ └── xvmc.h
│ ├── libavdevice
│ │ └── avdevice.h
│ ├── libavfilter
│ │ ├── asrc_abuffer.h
│ │ ├── avcodec.h
│ │ ├── avfiltergraph.h
│ │ ├── avfilter.h
│ │ ├── buffersink.h
│ │ ├── buffersrc.h
│ │ ├── version.h
│ │ └── vsrc_buffer.h
│ ├── libavformat
│ │ ├── avformat.h
│ │ ├── avio.h
│ │ └── version.h
│ ├── libavutil
│ │ ├── adler32.h
│ │ ├── aes.h
│ │ ├── attributes.h
│ │ ├── audioconvert.h
│ │ ├── audio_fifo.h
│ │ ├── avassert.h
│ │ ├── avconfig.h
│ │ ├── avstring.h
│ │ ├── avutil.h
│ │ ├── base64.h
│ │ ├── bprint.h
│ │ ├── bswap.h
│ │ ├── common.h
│ │ ├── cpu.h
│ │ ├── crc.h
│ │ ├── dict.h
│ │ ├── error.h
│ │ ├── eval.h
│ │ ├── fifo.h
│ │ ├── file.h
│ │ ├── imgutils.h
│ │ ├── intfloat.h
│ │ ├── intfloat_readwrite.h
│ │ ├── intreadwrite.h
│ │ ├── lfg.h
│ │ ├── log.h
│ │ ├── lzo.h
│ │ ├── mathematics.h
│ │ ├── md5.h
│ │ ├── mem.h
│ │ ├── opt.h
│ │ ├── parseutils.h
│ │ ├── pixdesc.h
│ │ ├── pixfmt.h
│ │ ├── random_seed.h
│ │ ├── rational.h
│ │ ├── samplefmt.h
│ │ ├── sha.h
│ │ ├── timecode.h
│ │ └── timestamp.h
│ ├── libpostproc
│ │ └── postprocess.h
│ ├── libswresample
│ │ └── swresample.h
│ └── libswscale
│ └── swscale.h
├── lib
│ ├── libavcodec.a
│ ├── libavdevice.a
│ ├── libavfilter.a
│ ├── libavformat.a
│ ├── libavutil.a
│ ├── libpostproc.a
│ ├── libswresample.a
│ ├── libswscale.a
│ └── pkgconfig
│ ├── libavcodec.pc
│ ├── libavdevice.pc
│ ├── libavfilter.pc
│ ├── libavformat.pc
│ ├── libavutil.pc
│ ├── libpostproc.pc
│ ├── libswresample.pc
│ └── libswscale.pc
└── share
└── ffmpeg
├── examples
│ ├── decoding_encoding.c
│ ├── filtering_audio.c
│ ├── filtering_video.c
│ ├── Makefile
│ ├── metadata.c
│ └── muxing.c
├── ffprobe.xsd
├── libvpx-1080p50_60.ffpreset
├── libvpx-1080p.ffpreset
├── libvpx-360p.ffpreset
├── libvpx-720p50_60.ffpreset
├── libvpx-720p.ffpreset
├── libx264-ipod320.ffpreset
└── libx264-ipod640.ffpreset
Do I need just the ffmpeg under bin to place in my project's <project-root>/res/raw dir?
And what is the easiest way to call ffmpeg and feed it with a command string?
I compiled FFmpeg with limited decoders and demuxers, because I need audio extraction only.
See: How can I get FFmpeg to locate installed libraries when --sysroot is pointing to another directory?
I would use it in background and notify the user in notification bar on completion.
I know that, here on SO, other similar questions are present, but they are a bit vague or confusing, at least for me. I understand at this point I lack of competences (actually my App is a jigsaw made of java-code-snippets from the Net that work together).
I'd appreciate some guidance.
Thanks.
Although an executable 'ffmpeg' placed in a bin folder will run on a rooted phone, its actually not the best way to distribute ffmpeg in an app which will be suitable for general distribution.
The better interface is to use a standard JNI interface where android loads a shared lib permitting an invocation of ffmpeg and then calls the shell, android method serving as a wrapper for a CLI exec of ffmpeg.
For a great sample , see "android-ffmpeg-x264" project on github.
The android JNI interface is here
The project linked above is no longer supported. A newer alternative can be found at http://writingminds.github.io/ffmpeg-android-java/

Categories

Resources