2016-08-29 15 views
6

Android Studio 2.2, cmake harici yapı sistemini tanıtıyor. Sorun şu ki, dokümantasyon gerçekten eksik ve üçüncü parti kütüphanelerini nasıl bağlamalıyım bilmiyorum? Ben cmake yönergesi target_link_libraries denedim:Üçüncü taraf kütüphanesini Android cmake harici derleme sistemine nasıl bağlarsınız?

target_link_libraries(native-lib libs/libSomething.so)

Ve bu uygulama derlerken de "eserler" ama sonra zamanında Dlopen hatası alıyorum libSomething.so uygulaması ile paketlenmiş edilmemiştir çünkü. bu bir şey değiştirir ve ben Android Studio 2.2 tarafından oluşturulan varsayılan JNI'yı projesi ile başladıysanız libs dizini ... "app" altında

[Güncelleme]

Ben app altında libSomething.so koyarak denedim/src/main/jniLibs/armeabi-v7a ancak şimdi "ana" (native-lib) kütüphanesi paketlenmemiş.

[Update2]

Ben cmake çıkış dir içerir ve bu işleri ama tilki gibi çirkin ve gerçekten kalıcı bir çözüm değildir kaynak seti yapılandırma ekledik

... Şimdilik

sourceSet 
{ 
    main 
    { 
     jniLibs.srcDirs = [ "libs", ".externalNativeBuild/cmake/debug/obj"] 
    } 
} 

cevap

9

Bir post build adımında kütüphane çıktı dizini için libSomething.so kopyalamak bitti. Bu, Android Studio'nun bu dizinde bulunan HER ŞEY, her şeyde bir kopya oluşturduğundan ortaya çıkar. cmake yılında

Komut şudur: Şimdilik

add_custom_command(TARGET native-lib POST_BUILD 
     COMMAND ${CMAKE_COMMAND} -E copy 
     ${CMAKE_CURRENT_SOURCE_DIR}/libs/${ANDROID_ABI}/libSomething.so 
     ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libSomething.so 
    ) 
1

, yapabilirsin ayrıca dizine paylaşılan kütüphanelerini koymak, ve bu paketi olacak, bu dizine işaret edecek jniLibs yapılandırın. Bir örnek burada: https://github.com/googlesamples/android-ndk/tree/master/hello-libs, gperf'in işe yarayıp yaramadığını görün. Bu şekilde, uygulama oluşturulan oluşturma klasörlerine bağlı değildir. Android studio paket libs eklediğinde, jniLibs geçici çözümü artık gerekli değildir

İlgili konular