2016-03-23 17 views
0

'u kullanarak Android Studio'daki deneysel toplama eklentisini (com.android.tools.build:gradle) kullanan yeni bir projeye 2. .so önceden oluşturulmuş kitaplıklar ekledim -Deneysel: 0.6.0-beta5).Android Studio'da java'dan önceden oluşturulmuş native .so kütüphanesini kullanarak, deneysel toplama eklentisi

apply plugin: 'com.android.model.application' 

model { 
    repositories { 
     prebuilt(PrebuiltLibraries) { 
      gstplayer { 
       binaries.withType(SharedLibraryBinary) { 
        sharedLibraryFile = file("libs/libgstplayer.so") 
        sharedLibraryFile = file("libs/libgstreamer_android.so") 
       } 
      } 
     } 
    } 
    android { 
     compileSdkVersion 23 
     buildToolsVersion "23.0.2" 

     defaultConfig { 
      applicationId "com.myexample.gstreamertest2" 
      minSdkVersion.apiLevel 19 
      targetSdkVersion.apiLevel 23 
      versionCode 1 
      versionName "1.0" 

      buildConfigFields { 
       create() { 
        type "int" 
        name "VALUE" 
        value "1" 
       } 
      } 
     } 
     buildTypes { 
      release { 
       minifyEnabled false 
       proguardFiles.add(file('proguard-rules.pro')) 
      } 
     } 

     ndk { 
      moduleName "gstplayer" 
     } 

     productFlavors { 
      create("flavor1") { 
       applicationId "com.app" 
      } 
     } 

     // Configures source set directory. 
     sources { 
      main { 
//    jni { 
//     source { 
//      srcDirs = ['src/main/jni'] 
//     } 
//    } 
       jniLibs { 
        dependencies { 
         library "gstplayer" 
        } 
       } 
      } 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
} 

Gradle inşa başarılı olduğunu, ancak her yerde bu kitaplıkları başvuru ile ilgili yönergeler bulamıyor:

Benim build.gradle dosyası bu gibi görünüyor. Java dosyanızda public native String getInfoFromJni() oluşturabileceğinizi ve jni klasörünüzde native .c dosyalarını referans gösterebileceğinizi biliyorum ve bu çalışmayı başarabiliyorum, ancak .so kütüphaneleriyle benzer bir şeyi nasıl yapacağımı bilmiyorum.

.so kitaplıklarındaki yöntemlere java'dan nasıl erişirim?

çatışmaları önlemek için modulename adını değiştirin 1.-:

cevap

0

Bir wraper c lib oluşturmalıdır 2.-

ndk { 
    moduleName "gstplayerwrapper" 
    } 

etkinlik içinde sarıcı lib yükleyin

static{ 

    System.loadLibrary("EcoLogSIL"); 

} 

3.- Projenizi hazırlayın

4.- Sarıcıyı çağıran bir işlev oluşturun ve alt + i tuşlarına basın. tro

enter image description here

5.- Sen gtsplayerwrapper.c içinde yeni bir işleve sahip olmalıdır ve burada Arayabileceğin libgstplayer.so

JNIEXPORT void JNICALL 
Java_your_activty_name_call_1wrapper(JNIEnv *env, jobject instance) { 

    // YOUR CODE HERE 

} 

gtsplayerwrapper.c içindeki kütüphane ithal etmeyi unutmayın

DÜZENLEME eklemek başlıkları

repositories { 
     prebuilt(PrebuiltLibraries) { 
      gstplayer { 
       headers.srcDir "src/main/jni/include" 
       binaries.withType(SharedLibraryBinary) { 
        sharedLibraryFile = file("libs/libgstplayer.so") 
        sharedLibraryFile = file("libs/libgstreamer_android.so") 
       } 
      } 
     } 
    } 

projenizde bu klasör oluşturun ve dosyaları orada .h kopya iyi geliyor, ama

+0

ben gstplayerwrapper.c içinde kütüphane ithal ve – MarkyDD

+0

görebildiğim ilk hata libgstplayer.so çağırıyor ile mücadele ediyorum parçası Kütüphanenizin başlıklarını gradle dosyasına eklememenizdir. –

+0

.so kütüphaneleri oldukça geniştir ve çok tanıdığım bir üçüncü parti kütüphanesidir. Hangi .h dosyalarını ihtiyacım olduğunu nasıl bilebilirim? Bu kütüphanede yüzlerce var. Üçüncü parti kitaplıktan "include" dizinini ekledim ve Android Studio'da yaptığımda tonlarca #include hatası var. Ne olursa olsun komut satırında ndk-build kullanarak başarıyla oluşturur, ancak bu .h dosyalarını jni'ime eklediğimde ve Android Studio'da oluşturduğumda '' klasörünün diğer dosyalarına başvuruyorlarsa bulunamazlar. – MarkyDD