Puisque la bibliothèque précompilée est déjà construite, vous devez utiliser l'indicateur IMPORTED pour indiquer à CMake qu'il vous suffit de l'importer dans votre projet :
add_library( imported-lib SHARED IMPORTED )
Ensuite, vous devez utiliser la commandeset_target_properties()pour spécifier le chemin d'accès à la bibliothèque, comme le code ci-dessous.
set_target_properties( # Specifies the target library. imported-lib # Specifies the parameter you want to define. PROPERTIES IMPORTED_LOCATION # Provides the path to the library you want to import. imported-lib/src/${ANDROID_ABI}/libimported-lib.so )
Pour que CMake trouve votre fichier d'en-tête lors de la compilation, vous devez utiliser la commande include_directories() et transmettre l'adresse de votre fichier d'en-tête dans :
include_directories( imported-lib/include/ )
Utilisez la commandetarget_link_libraries()dans le script de build CMake pour associer la bibliothèque prédéfinie à votre bibliothèque locale :
Lorsque vous créez votre application, Gradle regroupera automatiquement les bibliothèques importées dans votre APK. Vous pouvez utiliser APK Analyzer pour vérifier.
Mais si vous pouvez obtenir le code source, je ne vous recommande pas de lier le .so, car il peut être incompatible avec des plateformes spécifiques. Par exemple, la bibliothèque dynamique .so compilée sur la plateforme Linux ne peut pas fonctionner sur la plateforme arm (comme Android).
Référence :
Amusez-vous à utiliser C/C++ dans Android Studio 2.2
Déplacements en ELF générique (EM : 62) Mauvaise solution
Prenons CMake comme exemple :
Puisque la bibliothèque précompilée est déjà construite, vous devez utiliser l'indicateur IMPORTED pour indiquer à CMake qu'il vous suffit de l'importer dans votre projet :
Ensuite, vous devez utiliser la commande
set_target_properties()
pour spécifier le chemin d'accès à la bibliothèque, comme le code ci-dessous.Pour que CMake trouve votre fichier d'en-tête lors de la compilation, vous devez utiliser la commande include_directories() et transmettre l'adresse de votre fichier d'en-tête dans :
Utilisez la commande
target_link_libraries()
dans le script de build CMake pour associer la bibliothèque prédéfinie à votre bibliothèque locale :Lorsque vous créez votre application, Gradle regroupera automatiquement les bibliothèques importées dans votre APK. Vous pouvez utiliser APK Analyzer pour vérifier.
Mais si vous pouvez obtenir le code source, je ne vous recommande pas de lier le .so, car il peut être incompatible avec des plateformes spécifiques. Par exemple, la bibliothèque dynamique .so compilée sur la plateforme Linux ne peut pas fonctionner sur la plateforme arm (comme Android).
Référence :
Amusez-vous à utiliser C/C++ dans Android Studio 2.2
Déplacements en ELF générique (EM : 62) Mauvaise solution