Chiama i methods della libreria condivisa (.so) nei file di Android Studios C

Sto lottando con questo per diversi giorni. Attualmente sto solo testando con un semplice progetto C ++ (file 1 .h & 1 .cpp) e un'applicazione minimalistica incluso il codice di esempio ndk helloJNI (che ha funzionato perfettamente facilmente):

Target Import i file C / C ++ esistenti (progetto) in Android Studio

  • NavUtils.navigateUpTo () non inizia alcuna attività
  • Utilizzo di memory Android AdMob
  • Disegno del materiale di Android - Come modificare il colore di background della barra degli strumenti dopo che è stata crollata la compressione di CollapsingToolbarLayout
  • "Android.os.NetworkOnMainThreadException" quando si tenta di connettersi tramite WiFi utilizzando Calimero Java Library
  • Android: ritorna all'attività precedente senza terminare la chiamata ()
  • Come implementare query complesse utilizzando un provider di contenuti?
  • Approccio Dopo aver provato alcune delle (decine) di diverse possibilità, penso / pensavo che i seguenti passi sarebbero la soluzione migliore per il mio scopo:

    1. Crea la libreria condivisa (Calculator.so) da Visual Studios 2015 "Crea libreria condivisa per Android" (o qualcosa) [rioutput]
    2. Crea cartella jniLibs in src / main / con le sue sottocartelle (x86 il relativo nel mio caso)
    3. Aggiungere il file Android.mk in src / main / jniLibs che deve essere inserito lì (?)
    4. Includa istruzione: System.loadLibrary ("Calculator") senza "lib" e ".so" in MainActivity

    La libreria è elencata in Android Studio nella sua cartella jniLibs come l'Android.mk. Inoltre, se costruisco l'apk, la libreria viene confezionata con successo (verificata da unzipping) e non ottengo alcun errore. MA : come posso call i methods nella biblioteca? Ho provato le diverse soluzioni offerte in altri thread, ma credo di aver perso qualcosa nel mio .mk o nei miei passaggi descritti in precedenza.

    Provato

    • Diverse #include <myLib> in native-lib.cpp, come s
    • Diverse impostazioni di Android.mk (ma sono nuovo per fare i file in modo che anche i tutorial non mi hanno aiutato molto con il mio problema specifico: :))
    • Altre posizioni per libCalculator.so come nella sottocartella x86
    • e molti altri – semplicemente non ricordando atm (wasntme)

    Il tuo aiuto è altamente apprezzato!

    Android.mk

     LOCAL_PATH := $(call my-dir) APP_ABI := x86 # library info include $(CLEAR_VARS) LOCAL_MODULE := Calculator LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/Calculator.so LOCAL_EXPORT_C_INCLUDES := ..../Visual Studio 2015/Projects/SO_Library/SO_Library include $(BUILD_SHARED_LIBRARY) 

    One Solution collect form web for “Chiama i methods della libreria condivisa (.so) nei file di Android Studios C”

    Ci sono un sacco di cose che puoi fare in Android NDK. Ad esempio, l'hardware della camera è uno degli hardware più pesanti del sistema operativo Android. Individuare facce, cose, dare effetti e per migliaia di funzionalità di NDK è il migliore. Alcuni aiutarti per i tuoi passi:

    1. È inoltre ansible creare e predisporre librerie condivise (.so) e statiche (.a) anche in Android Studio. Non è necessario Visual Studio.
    2. Non creare la cartella jniLibs nella cartella principale. Quando costruisci il tuo progetto tramite gradle, crea già questa cartella e mette le tue librerie di destinazione. Se si desidera preinstallare tutte le librerie, inserire queste librerie nella cartella principale / jni / libs e preinstallare quindi con Android.mk.
    3. Non aggiungere il file Android.mk nella cartella jnilibs. Crea questo file nella cartella principale / jni. Anche il file Application.mk.
    4. Chiamate le vostre biblioteche, in qualsiasi attività, where ti serve, in modo statico. Come questo:

       static { System.loadLibrary("my_library") } 

      Senza estensioni "lib" e ".so".

    Quando si desidera call i methods nativi, è sufficiente utilizzare la parola chiave "nativo". Per esempio:

     private native int nGetNumberFromNativeSide(); 

    Basta call questo metodo, where vuoi, e get il risultato. Ma per build ndk in gradle, guardate questa risposta . Per la creazione di librerie in Android.mk, queste linee di esempio ti aiutano:

     include $(CLEAR_VARS) ifneq (,$(filter $(TARGET_ARCH_ABI), armeabi-v7a x86 arm64-v8a x86_64)) LOCAL_MODULE := my_library LOCAL_SRC_FILES := $(LOCAL_SRC_LOCATION)/native1.cpp native2.cpp include $(BUILD_SHARED_LIBRARY) 
    • Puoi inserire qualsiasi nome di nome, ma non aggiungere estensioni lib e .so. Ndk lo sta già facendo.
    • Ho già dato l'esempio di Android.mk.
    • Quando si crea il file Android.mk, individua le cartelle appropriate della libreria. Come principale / libs / x86 / libmy_library.so.

    Immagino che questa risposta ti aiuterà. Se hai altre domande, aggiungi commenti, modificherò la risposta e aggiungo le risposte.

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