2016-08-29 11 views
6

Android Studio 2.2 wprowadza zewnętrzny system kompilacji cmake. Problem polega na tym, że naprawdę brakuje dokumentacji i nie wiem, jak powinienem połączyć biblioteki stron trzecich? Próbowałem różnych dyrektyw CUpewnij target_link_libraries:W jaki sposób łączysz bibliotekę zewnętrzną w systemie zewnętrznym Android cmake?

target_link_libraries(native-lib libs/libSomething.so)

i to „działa” w tym kompilacji aplikacji, ale potem dostać dlopen błąd przy starcie, ponieważ libSomething.so nie została zapakowana z aplikacji. Katalog libs jest pod „app”, czy to coś zmienia i zacząłem z domyślnego projektu JNI generowanego przez Android Studio 2.2 ...

[Aktualizacja]

Próbowałem oddanie libSomething.so ramach aplikacji/src/main/jniLibs/armeabi-v7a, ale teraz biblioteka "main" (native-lib) nie jest spakowana.

[Update2]

Dodałem źródłowy, który zawiera zestaw config wyjściowe CUpewnij dir i to działa, ale jest brzydki jak cholera i nie jest to trwałe rozwiązanie ...

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

Odpowiedz

9

Na razie Zakończyłem kopiowanie libSomething.so do katalogu wyjściowego biblioteki cmake w etapie kompilacji postu. Działa to, ponieważ okazuje się, że Android Studio kopiuje do pliku APK WSZYSTKO znajdującego się w tym katalogu.

poleceń w cmake jest następujący:

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

Do teraz, można również umieścić swoje udostępnionych bibliotekami do katalogu i skonfigurować jniLibs pkt do tego katalogu, który będzie go zapakować. Jedna próbka jest tutaj: https://github.com/googlesamples/android-ndk/tree/master/hello-libs, obserwuj gperf, czy to pomaga. W ten sposób aplikacja nie zależy od wygenerowanych folderów kompilacji. Gdy studio Android dodaje biblioteki pakietów, obejście jniLibs nie jest już konieczne