Come scrivere / eseguire il debug di Android.mk per la libreria statica NDK?

Sto cercando di build una libreria statica utilizzando l'ultima versione di Android NDK (r5) e non sto avuto alcuna fortuna. Sono stato in grado di build e gestire i campioni (ad esempio, HelloJni) senza alcun problema, ma avviare un nuovo progetto da "graffio" è stata una storia diversa.

Per questo esperimento, sto cercando di build libpng. La mia struttura di cartelle sembra così:

  • Imansible creare il gestore all'interno del thread che non ha chiamato Looper.prepare () all'interno di AsyncTask per ProgressDialog
  • Come controllare la visibilità della tastiera software in Android?
  • ImageView angoli arrotondati
  • Problema con il button di azione galleggiante quando si va ad un altro frammento
  • Immagini sfocate sul browser android di riserva
  • tempo di percorrenza tra due località in Google Map Android API V2
  • root | +--- jni | +---- Android.mk ( one line: "include $(call all-subdir-makefiles)" ) | +---- png | +---- Android.mk ( see below ) | +---- { a bunch of .c and .h files ) 

    Quindi ho due Android.mks. Uno per la costruzione di tutti i sottoprogetti e uno per il sottoprogetto libpng. root / jni / png / Android.mk ha il seguente aspetto:

     LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := png MODULE_PATH := $LOCAL_PATH LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.c) LOCAL_C_INCLUDES := $(wildcard $(LOCAL_PATH)/*.h) LOCAL_INTERMEDIATE_TARGETS += junk junk: echo $(LOCAL_SRC_FILES) include $(BUILD_STATIC_LIBRARY) 

    Questa configuration di build sembra non fare nulla (cioè eseguire ndk-build dalla cartella principale non fa nulla, anche dopo una ndk-build clean). Un run verboso (ndk-build V = 1) mostra alcune chiamate rm -f (cancellazione di cartelle non esistenti) ma nulla in relazione al progetto o al sottoprogetto.

    Sono abbastanza interessato al motivo per cui questo script di costruzione non è riuscito, ma il process dovrebbe essere stato banale, quindi sono sicuro che non sia niente di terribilmente interessante. Sono molto più interessato a come potrei iniziare a attaccare i bug da soli. La chiamata di eco nello script precedente non è mai stata colpita – non ho idea di come determinare quali valori sono o perché salti il ​​sottoprogetto. Qualcuno ha trovato un modo per sapere che cosa il sistema di compilazione sta cercando di fare?

    Mi piacerebbe anche essere interessato a sapere se ci sono documenti per questi strumenti o se è solo la manciata di file di text nella cartella docs di NDK? Ho cercato di risolvere questo problema copiando pezzi di Android.mk che ho trovato da googling, ma solo i pochi comandi utilizzati nei campioni semplici NDK sembrano essere documentati, quindi l'esperienza ha appena sollevato nuove domande.

  • Perché findViewById () restituisce null se non viene chiamata setcontentview ()?
  • È ansible grigio (non solo distriggersre) un MenuItem in Android?
  • Stile di divisione ActionBar
  • Come faccio a analizzare JSON da un HTTPResponse Java?
  • Come accedere alle viste dell'attività originale dal servizio di background nascosto
  • Imansible lanciare Action Provider per condividere il fornitore di azioni
  • 3 Solutions collect form web for “Come scrivere / eseguire il debug di Android.mk per la libreria statica NDK?”

    Mi raccommand di sbarazzarsi di MODULE_PATH e non di cercare di usare il carattere jolly: non ho veramente visto che il lavoro sia giusto.

     LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := png LOCAL_SRC_FILES := pngget.c pngread.c pngrutil.c pngtrans.c pngwtran.c png.c pngmem.c pngrio.c pngset.c pngwio.c pngwutil.c pngerror.c pngpread.c pngrtran.c pngwrite.c LOCAL_C_INCLUDES := png.h pngconf.h pngpriv.h include $(BUILD_STATIC_LIBRARY) 

    Inoltre, c'è una magia del path serio che non ho completamente decifrato: in qualche modo Eclipse fa la cosa giusta, ma portndola a saltare attraverso i giunti appropriati dalla row di command è ancora colpito o perdere per me.

    EDIT: così è stato moderatamente interessato a capire questo, come è stato un po 'da quando ho giocato con la NDK. Quando utilizzo il file originale non è stato compilato, ma quando ho inserito il codice sorgente png nella directory jni e quindi utilizzi questo file Android.mk:

     LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := png LOCAL_SRC_FILES := pngget.c pngread.c pngrutil.c pngtrans.c pngwtran.c png.c pngmem.c pngrio.c pngset.c pngwio.c pngwutil.c pngerror.c pngpread.c pngrtran.c pngwrite.c LOCAL_C_INCLUDES := png.h pngconf.h pngpriv.h include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := png2 LOCAL_STATIC_LIBRARIES := png include $(BUILD_SHARED_LIBRARY) 

    ha costruito sia libpng.a che libpng2.so nella cartella obj / local / armeabi. Lo indico semplicemente non costruirà una libreria statica se non c'è dipendenza.

    Mi sono battuto sopra la testa con questo problema per le ultime due ore, e questo post ha aiutato a risolverlo. Piuttosto che aggiungere una dipendenza fittizia, semplicemente invocare ndk-build (che è solo un sottile wrapper su make) come "ndk-build png".

    Ho scoperto che quando ho aggiunto una biblioteca condivisa "dummy" come descritto nella modifica, l'.a (che ho trovato in obj /, implicando che era un dettaglio interno) non conteneva nessuno dei file .o desiderati.

    Inoltre, il .so ha ricompilato tutti i file che sarebbero stati creati per la libreria statica. Così ha avuto senso che l'.a era vuota.

    Quello che mi ha aiutato è stato aggiungere una linea APP_MODULES alla mia applicazione.mk, come descritto in Non riesco a creare libreria statica con Android NDK R8 . Probabilmente vuoi comunque un Application.mk, in quanto contiene altre impostazioni importnti per il tuo lib statico, come APP_STL, APP_PLATFORM, APP_ABI ecc.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.