2017-10-05 2 views
2

Je viens d'hériter de l'ancien code, qui est actuellement en mesure de construire sur notre serveur de construction et j'essaye de le faire tourner sur Android Studio, et il a des problèmes où la construction échoue parce qu'elle essaie de pointer vers une version MIPS (inexistante) d'une bibliothèque préfabriquée.Android NDK - Construire Essayer de lier bibliothèque préchargée inexistante

je reçois l'erreur suivante:

libraryname: LOCAL_SRC_FILES points to a missing file. 
Check that .../libraryname/mips/libraryname.so exists. 

Ce fichier n'existe pas, mais je ne comprends pas pourquoi l'outil de construction est à la recherche pour elle.

Mon fichier Application.mk a cette entrée:

APP_ABI := armeabi armeabi-v7a x86 x86_64 

fichier Mon Android.mk a cette entrée (nom de la bibliothèque généralisée):

include $(CLEAR_VARS) 
LIBRARY_NAME_PATH := libraryname/$(TARGET_ARCH_ABI) 
LOCAL_MODULE := modulename 
LOCAL_SRC_FILES := $(LIBRARY_NAME_PATH)/mobulename.so 
include $(PREBUILT_SHARED_LIBRARY) 

Embrouillant, TARGET_ARCH_ABI ne semble pas être réglé n'importe où, donc je ne suis pas vraiment sûr de ce qui se passe là-bas.

D'autres notes, lorsque je compile ceci à partir de la ligne de commande avec NDK-build, ça marche très bien, en créant seulement les 4 architectures demandées.

Comme je l'ai mentionné, il ne devrait pas être nécessaire de modifier le code, car ce code est construit avec succès sur notre serveur de construction. Je suppose que j'ai juste quelque chose de mal configuré.

Répondre

0

Traditionnellement, NDK utilisait le paramètre APP_ABIS (généralement défini dans le fichier Application.mk) pour choisir la liste des architectures à construire. NDK supporte aujourd'hui les processeurs ARM, Intel et MIPS en mode 32 et 64 bits.

Le plugin gradle utilisé par Android studio ignores APP_ABIS et vous devez définir abiFilters dans votre build.gradle pour spécifier les architectures à construire.

Ceci est particulièrement important lorsque votre projet utilise des bibliothèques tierces prédéfinies, car très souvent, comme dans votre cas, ces bibliothèques ne sont disponibles que pour un sous-ensemble de toutes les architectures possibles.

NDK-construction appelle le script Android.mk dans une boucle, chaque fois que la mise à $(TARGET_ARCH_ABI) choisi architecture, l'un des arm64-v8a x86_64 mips64 armeabi-v7a armeabi x86 mips