2017-09-29 299 views
0

我嘗試構建一個Android項目(ndk-build)。嘗試加載預編譯.so Android NDK(Exception java.lang.UnsatisfiedLinkError:dlopen failed:library)

我想在我的項目中使用預編譯庫。 (libdemo.so)

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(); 
} 

但是我得到生成以下異常:

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

文件存在於提供的路徑中。我認爲這條道路是不正確的。 爲什麼從我的臺式電腦有路徑?應該有從我的設備路徑或?

任何人在這裏幫忙嗎? 謝謝

回答

0

我自己解決了這個問題。

我不知道ndk-build不會自動處理。 我已經到我的項目文件夾(jni所在的文件夾),並手動執行ndk-build。

之後,libs被自動編譯並複製到/ libs文件夾中。

現在只需像往常一樣構建和運行應用程序,一切都很好。