2016-05-24 1 views
0

J'ai une structure de projet comme suit. Tout ce que je veux faire est de construire une bibliothèque statique avec la source SQLite, mais pour une raison quelconque lorsque j'exécute ndk-build, il construit aussi d'autres sources - comme s'il s'agissait de fichiers Android.mk dans d'autres emplacements.ndk-build de static lib - pourquoi construit-il d'autres fichiers?

jni/SQLite 
jni/SQLite/Android.mk (the only .mk file that I want to build) 
jni/TT 
jni/Application.mk 
jni/Android.mk (for building everything such as SDL2) 

TT est un lien symbolique pour/work/TT, qui contient un certain nombre de fichiers source multi-plateforme, y compris SQLite, SDL2 et d'autres sources.

/work/TT 
/work/TT/SQLite 
/work/TT/SQLite/sqlite3.c 
/work/TT/SDL2 
.. 

Voici JNI/SQLite/Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

TT_PATH := /work/TT 

SRC_SQLITE := $(TT_PATH)/SQLite/sqlite3.c 

LOCAL_C_INCLUDES += $(NDK_APP_PROJECT_PATH)/jni 
LOCAL_MODULE := SQLite 
LOCAL_SRC_FILES := $(SRC_SQLITE) 
include $(BUILD_STATIC_LIBRARY) 

Pourquoi d'autres fichiers en cours de construction? Que dois-je faire pour créer SQLite uniquement?

À l'invite de commande, je suis dans le dossier suivant: JNI/SQLite

Je lance NDK-build (même dossier que le contenu Android.mk ci-dessus)

Je me attends à sqlite3.c étant le seul fichier compilé. Mais non, je vois tous les fichiers du projet SDL2 en cours de construction ..

Une fois que tous les fichiers ont été compilés, si je lance NDK-rebâtis Je vois ceci:

MacbookPro:SQLite admin$ ndk-build 
[armeabi-v7a] Install  : libSDL2.so => libs/armeabi-v7a/libSDL2.so 
[armeabi-v7a] Install  : libmain.so => libs/armeabi-v7a/libmain.so 

Cela montre clairement les modules SDL2 et principal étant construit .. mais pourquoi?

Peut-être que je suis censé utiliser:

ndk-build -f Android.mk 

..pour construire mon seul et unique Android.mk au lieu d'avoir automatiquement désiré mon dossier JNI recherché/construit?

Quand je fais ce que je reçois l'erreur suivante, mais au moins il semble que si elle tente d'exécuter une Android.mk spécifique:

MacbookPro:SQLite admin$ ndk-build -f Android.mk 
Android NDK: Trying to define local module 'SQLite' in Android.mk.  
Android NDK: But this module was already defined by /Work/TT/android-TT/app/src/main/jni/SQLite/Android.mk.  
/Android/android-ndk-r9d/build/core/build-module.mk:34: *** Android NDK: Aborting. . Stop. 

Mon Application.mk est la suivante, mais ce n'est pas présent dans le dossier SQLite où je lance NDK-construction, c'est la JNI/Application.mk:

# Uncomment this if you're using STL in your project 
# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information 
APP_STL := gnustl_static 
APP_PLATFORM := android-14 
APP_ABI := armeabi-v7a 

MISE à JOUR: J'ai essayé:

ndk-build -d -f Android.mk 

..et la sortie de débogage montre que les fichiers SDL2/Android.mk et autres fichiers .mk sont toujours en cours d'appel. Comment puis-je arrêter ce comportement récursif afin qu'il ne construit que le Android.mk dans le dossier actuel?

C'est un extrait de la sortie de débogage que je vois:

Reading makefile `/Work/TT/android-TT/app/src/main/jni/SDL/Android.mk' (search path) (no ~ expansion)... 
Reading makefile `/Work/TT/android-TT/app/src/main/obj/local/armeabi-v7a/objs/main/SQLite/sqlite3.o.d' (search path) (don't care) (no ~ expansion)... 
+1

Quelle est votre application.mk? –

+0

lorsque vous ne passez pas d'arguments à ndk-build, il recherche le projet android et utilise le fichier mk qui se trouve directement dans le répertoire 'jni' –

+0

@RobertWang J'ai attaché le fichier Application.mk comme demandé. – SparkyNZ

Répondre

2

La réponse à mon problème est de le faire:

ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk 

Cela va construire le dossier en cours Android.mk comme Champs obligatoires.