How do you use .so shared library in Java Studio Studio Project

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?

+4
1

Android NDK, Google. .

hello-gl2 - .

gl_code.cpp , JNI, Java. , Java:

extern "C" {
  JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_init(JNIEnv * env,
    jobject obj,  jint width, jint height);
  JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_step(JNIEnv * env, 
    jobject obj);
};

JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_init(JNIEnv * env, jobject obj,  jint width, jint height)
{
  setupGraphics(width, height);
}

JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_step(JNIEnv * env, jobject obj)
{
  renderFrame();
}

GL2JNILib.java , , gl_code.cpp, Java.

public class GL2JNILib {

  static {
    System.loadLibrary("gl2jni");
   }

  /**
   * @param width the current view width
   * @param height the current view height
   */
   public static native void init(int width, int height);
   public static native void step();
}

UPDATE:

++, live555, Android.mk:

include $(CLEAR_VARS)
LOCAL_MODULE := your_module
LOCAL_SRC_FILES := your_module_file.cpp
LOCAL_SHARED_LIBRARIES := live555
include $(BUILD_SHARED_LIBRARY)

:

+3

Source: https://habr.com/ru/post/1628548/


All Articles