web-dev-qa-db-fra.com

NDK - problèmes après la suppression de GNUSTL du NDK (révision r18)

Aujourd'hui, j'ai mis à jour mon Android Studio NDK avec la version la plus récente, 18.0.5002713. Après le processus d’installation, j’ai tenté de réexécuter mon application, mais j’ai été incapable de le faire. L'erreur qui continue à apparaître est la suivante: org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'. 

Dans le passé, j'avais déjà des problèmes avec mon application après les mises à jour de NDK, mais je pouvais les résoudre en ajoutant arguments '-DANDROID_STL=gnustl_static' à la configuration externalNativeBuild du fichier app.gradle. 

Question originale: ( OpenCV - référence non définie à 'cv :: CascadeClassifier :: detectMultiScale () après la mise à jour de NDK )

En ajoutant cette ligne de code, j'ai réussi à éviter tout problème avec le NDK dans le reste de toutes les versions de NDK r17c.

Malheureusement, avec la révision r18, la prise en charge de GNUSTL a été supprimée parallèlement à gabi ++ et stlport. 

Voir l'historique de révision du NDK: https://developer.Android.com/ndk/downloads/revision_history

La suppression de la ligne de code maintenant obsolète génère l'erreur qui était à l'origine du motif de la question susmentionnée. La question qui se pose maintenant est de savoir quel est l'équivalent à jour de arguments '-DANDROID_STL=gnustl_static'?

edit: utiliser '-DANDROID_STL=c++_static' conduit à l'ancienne erreur

Merci d'avance.

3
c_steidl

Comme @Michael l'a déjà suggéré, vous pouvez reconstruire OpenCV avec libc ++.

Pour le faire:

cd $OPENCV_SRC
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=$Android_DIR/ndk-bundle/build/cmake/Android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_STL=c++_static  -DCMAKE_BUILD_TYPE=Release -DANDROID_NATIVE_API_LEVEL=Android-24 ..
make install
cd install #the sdk will be here...

NOTE: Testé avec "opencv-3.4.1" + ndk18


Edité par @shizhen

Vérifié sur macOS, doit ajouter .. après la commande cmake pour que l’erreur ci-dessous disparaisse. 

Erreur CMake: le répertoire source "/opencv-3.4.1/build" ne semble pas contenir CMakeLists.txt

Mis à jour comme ci-dessous: 

cd $OPENCV_SRC
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=$Android_DIR/ndk-bundle/build/cmake/Android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_STL=c++_static  -DCMAKE_BUILD_TYPE=Release -DANDROID_NATIVE_API_LEVEL=Android-24 
make install
cd install #the sdk will be here...
12
y30

La mise à jour d'OpenCV peut prendre un certain temps. En attendant, je recommanderais de revenir en arrière à NDK r16, utilisé pour créer les fichiers binaires OpenCV Android.

1
Alex Cohn

première réponse au commentaire de @Aqeel iqbal dans le premier commentaire, la raison pour laquelle vous ne trouvez pas de cmakelist est peut-être parce que vous n'utilisez pas de sources ouvertes, opencv fournit le paquet independet pour Android sdk. Le fichier suivant est la source originale des sources opencv opencv release , choisissez sources à télécharger, pas le pack Android.

Après avoir téléchargé les sources, cd dans le répertoire racine du fichier source, par exemple. opencv-2.4.13.6 puis exécutez la commande fournie par @ y30, et notez que $ Android_DIR n'est peut-être pas le chemin de fichier correct de votre ndk Android. Pour moi, je les utilise: 

... -DCMAKE_TOOLCHAIN_FILE =/Utilisateurs/ihandysoft/Bibliothèque/Android/sdk/ndk-bundle/build/cmake/Android.toolchain.cmake ...

voici armv8a j'avais généré https://github.com/2666fff/opencv-for-Android

0
Arthur