I have been working on this issue for the last couple of days. I am trying to use live555 ( http://www.live555.com/ ), a C / C ++ streaming media server, as a library in a Java Android Studio project. I was able to use ndk-build to create a set of .so files, but I can not find documentation on how to use the library in my Java application now. Here is my setup:
- Windows 8.1 64-bit
- Oracle JDK 1.8
- Android Studio 1.5.1
- Gradle 1.5.0
- Build Tools 23.0.2
The steps taken to get where I still have:
- Create a standard Android app using Android Studio.
- Right-click the application module in the project explorer and select "Create | Folder | JNI Folder from the context menu.
- Download live555 sources from http://www.live555.com/liveMedia/public/ by selecting the file live555-latest.tar.gz.
- Extract the sources to the JNI folder, so now you have the folder structure, for example:
$ PROJECT_DIR
| --app | | | | | | | | | | | | | | | | | | | | | | | | | | | | - | --main | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | live555. In the above folder, jnicreate Android.mkand files Application.mk. The file Application.mkcontains:
APP_OPTM := release
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-21
APP_STL := stlport_shared
The file Android.mkcontains:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := live555
LOCAL_SRC_FILES := \
live\BasicUsageEnvironment\BasicHashTable.cpp \
live\BasicUsageEnvironment\BasicTaskScheduler0.cpp \
...All of the rest of the .c and .cpp files
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)\live \
$(LOCAL_PATH)\live\BasicUsageEnvironment\include \
$(LOCAL_PATH)\live\BasicUsageEnvironment \
$(LOCAL_PATH)\live\UsageEnvironment\include \
$(LOCAL_PATH)\live\UsageEnvironment \
$(LOCAL_PATH)\live\groupsock\include \
$(LOCAL_PATH)\live\groupsock \
$(LOCAL_PATH)\live\liveMedia\include \
$(LOCAL_PATH)\live\liveMedia \
LOCAL_CPPFLAGS += -fPIC -fexceptions -DXLOCALE_NOT_USED=1 -DNULL=0 -DNO_SSTREAM=1 -UIP_ADD_SOURCE_MEMBERSHIP
include $(BUILD_SHARED_LIBRARY)
In my $PROJECT_DIR\gradle.propertiesfile I included the lineandroid.useDeprecatedNdk=true
$PROJECT_DIR\local.properties :
ndk.dir=C\:\\Users\\user\\AppData\\Local\\Android\\ndk
sdk.dir=C\:\\Users\\user\\AppData\\Local\\Android\\sdk
$PROJECT_DIR\app\build.gradle :
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.company.android.myapp"
minSdkVersion 21
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
moduleName "live555"
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir "src\\main\\libs"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
}
ndk-build $PROJECT_DIR\app\src\main\jni.
ndk-build /:
$PROJECT_DIR | | - | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | --main
| - | - | - | --libs
| - | - | - | - | --armeabi
| - | - | - | - | - | --liblive555.so
| - | - | - | - | - | --libstlport_shared.so
| - | - | - | - - | --armeabi-v7a
| - | - | - | - | - | --liblive555.so
| - | - | - | - | - | --libstlport_shared.so
| - | - | - | --obj
| - | - | - | - | --local
| - | - | - | - | - | --armeabi
| - | - | - | - | - | - | --objs
| - | - | - | - | - | - | --liblive555.so
| - | - | - | - | - | - | --libstlport_shared.so
| - | - | - | - | - | --armeabi-v7a
| - | - | - | - | - | - | --objs
| - | - | - | - | - | - | --liblive555.so
| - | - | - | - | - | - | --libstlport_shared.so
| "", Android, :
| --manifests
| --java
| --jniLibs
| - | --armeabi
| - | - | --liblive555.so
| - | - | --libstlport_shared.so
| - | --armeabi-v7a
| - | - | --liblive555.so
| - | - - | --libstlport_shared.so
| --res
Live555Ndk.java , live555. :
package com.company.android.myapp;
public class Live555Ndk {
static {
System.loadLibrary("live555");
}
}
, live555 , . - ?
.
02/15/2016
, ndk {} app\build.gradle mcwise.
, , , live555. Android . jniLibs armeabi\liblive555.so . Live555Ndk.java, SystemloadLibrary("live555");. public native boolean isThisMediaSession();. javah jni. .cpp . liblive555.so. , Android Studio, live555. , , #include <live555/MediaSession.hh>. ? Android- .so, . live555 jni?