2017-09-29 1 views
0

Je tente de construire un projet Android (ndk-build). J'aimerais utiliser une bibliothèque précompilée dans mon projet. (Libdemo.so)Essayez de charger précompilé .so Android NDK (Exception java.lang.UnsatisfiedLinkError: dlopen failed: library)

Android.mk:

APP_STL := gnustl_static 
APP_CPPFLAGS := -fexceptions 
APP_ABI=armeabi armeabi-v7a 

Application.mk:

LOCAL_PATH := $(call my-dir) 
TARGET_ARCH_ABI := armeabi-v7a 

include $(CLEAR_VARS) 
LOCAL_MODULE := libdemo 
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libdemo.so 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := native-lib 
LOCAL_SRC_FILES := native-lib.cpp 
LOCAL_SHARED_LIBRARIES := libdemo 
include $(BUILD_SHARED_LIBRARY) 

MainActivity:

android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    // Used to load the 'native-lib' library on application startup. 
    static { 
     System.loadLibrary("demo"); 
     System.loadLibrary("native-lib"); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     TextView tv = (TextView) findViewById(R.id.sample_text); 
     Log.d("TAG", stringFromJNI()); 
    } 

    /** 
    * A native method that is implemented by the 'native-lib' native library, 
    * which is packaged with this application. 
    */ 
    public native String stringFromJNI(); 
} 

Mais je reçois l'exception suivante sur la construction:

java.lang.UnsatisfiedLinkError: dlopen failed: library "/Users/John/Documents/Apps/LibTest/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/libdemo.so" not found 

Le fichier existe sur le chemin fourni. Je pense que le chemin n'est pas correct du tout. Pourquoi y a-t-il le chemin depuis mon ordinateur de bureau? Il devrait y avoir un chemin de mon appareil ou?

Toute personne ici pour vous aider? Merci

Répondre

0

J'ai résolu la question par moi-même. Je ne savais pas que ndk-build n'est pas traité automatiquement. Je devais aller à mon dossier de projet (dossier où jni est présent) et fait ndk-build manuellement. Ensuite, les bibliothèques sont compilées et copiées automatiquement dans le dossier/libs.

Maintenant, il suffit de créer et d'exécuter l'application comme d'habitude et tout va bien.