2016-03-30 24 views
5

Provo ad importare jna.jar nel mio progetto dal JNA è uno strumento molto utile per chiamare la libreria nativa che è basata su JNI.Impostazione di JNA in Android Studio

SO: Windows 10

IDE: Android 1.5.1 Studio

JDK: 1.8.0_73

NDK: r10e

Quello che ho fatto (AS = Android Studio)

  1. Creare un nuovo progetto di AS con API18.
  2. scarica jna.jar dal proprio GitHub.

    https://github.com/java-native-access/jna

  3. copia jna.jar nella cartella del progetto.

    JNATest \ app \ libs \ jna.jar

  4. In AS, fare clic destro sull'icona del jna.jar, scegliere Aggiungi come Biblioteca
  5. Attendere pochi secondi, controllare la File-> Struttura del progetto-> app-> Dipendenze. Abbiamo il jna.jar. (Idem come app \ build.gradle) build gradle
  6. Implementare codice Java su JNA in MainActivity.java
  7. Run app sul dispositivo vero e proprio Sony Z3 (braccio)
  8. Crash di CLibrary.Instance.printf("Hello, JNA");

errore Messaggio sul monitor Android

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: i3d.jnatest, PID: 1068 
        java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-arm/libjnidispatch.so) not found in resource path (.) 
        at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:866) 
        at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:826) 
        at com.sun.jna.Native.<clinit>(Native.java:140) 
.. 
... so on 

codice Java

package i3d.jnatest; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

import com.sun.jna.Library; 
import com.sun.jna.Native; 

    public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     CLibrary.Instance.printf("Hello, JNA"); 
    } 

    public interface CLibrary extends Library 
    { 
     CLibrary Instance = (CLibrary) Native.loadLibrary("msvcrt", CLibrary.class); 
     void printf(String format, Object... args); 
    } 
} 

Domanda

Secondo messaggio di errore, mi manca /android-arm/libjnidispatch.so in fase di esecuzione.

  1. Ho posto il posto sbagliato per jna.jar?
  2. Come devo ottenere e utilizzare /android-arm/libjnidispatch.so?

Sono un principiante di Android Studio, quindi forse fraintendere qualcosa di fondamentale. Sentitevi liberi di darmi un suggerimento, grazie.

+0

quale file JNA.jar hai usato? Ho provato 4.1.0 e 4.2.2 ma ho ancora ottenuto errori di costruzione per Android –

+0

Anche io sto affrontando lo stesso problema .. hai qualche soluzione? – Parth

risposta

1

Ho trovato questo commento in un file nel repository biblioteca github - "If you're using Google's Eclipse plugin then you must manually remove libjnidispatch.so from jna.jar/lib/armeabi and add it into your project's libs/armeabi directory."

Dal momento che questo file è stato creato nel 2012 e Android Studio era ancora in fase molto precoce e non super popolare da quel momento, presumo potrebbe essere una nota valida per Eclipse e anche per Android Studio. Ti consiglio di provarlo.

+0

Grazie per questa informazione. Ma ho colpito il muro quando ho creato il codice sorgente JNA. http://imgur.com/VQbH1F9 Continuerò a provare. –

+0

Costruisco con successo cancellando alcuni caratteri che sono escape char UTF-8. Provare a fare il resto dei passi .. –

+0

Non è necessario ricostruire JNA; basta estrarre il file da jna.jar e inserirlo nella directory libs nativa del progetto. – technomage

3

messo il file .so nella seguente directory (quando si utilizza Android Studio): yourproject\app\src\main\jniLibs\armeabi-v7a\libjnidispatch.so

+0

Funziona. Grazie! – fireb86

+0

non funziona per me! lo stesso errore sta arrivando! puoi aiutarmi per favore !! – Parth

+0

Sfortunatamente non perché non hai fornito alcuna informazione sul tuo problema. Per favore apri un'altra domanda qui su SO e anche altri potrebbero aiutarti ... – Lonzak

Problemi correlati