Couldn't load libPassword from loader:NDK開發中C檔案編譯成cpu的so類庫時,找不到類庫報錯的原因之一,libpasswordndk
LogCat輸出:
03-03 12:42:32.665: E/AndroidRuntime(32432): FATAL EXCEPTION: main
03-03 12:42:32.665: E/AndroidRuntime(32432): Process: com.toro.passwordencode, PID: 32432
03-03 12:42:32.665: E/AndroidRuntime(32432): java.lang.UnsatisfiedLinkError: Couldn't load libPassword from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.toro.passwordencode-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.toro.passwordencode-1, /vendor/lib, /system/lib]]]: findLibrary returned null
03-03 12:42:32.665: E/AndroidRuntime(32432): at java.lang.Runtime.loadLibrary(Runtime.java:358)
03-03 12:42:32.665: E/AndroidRuntime(32432): at java.lang.System.loadLibrary(System.java:526)
03-03 12:42:32.665: E/AndroidRuntime(32432): at com.toro.passwordencode.MainActivity.<clinit>(MainActivity.java:15)
03-03 12:42:32.665: E/AndroidRuntime(32432): at java.lang.Class.newInstanceImpl(Native Method)
03-03 12:42:32.665: E/AndroidRuntime(32432): at java.lang.Class.newInstance(Class.java:1208)
03-03 12:42:32.665: E/AndroidRuntime(32432): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
03-03 12:42:32.665: E/AndroidRuntime(32432): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2116)
03-03 12:42:32.665: E/AndroidRuntime(32432): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2258)
03-03 12:42:32.665: E/AndroidRuntime(32432): at android.app.ActivityThread.access$800(ActivityThread.java:147)
03-03 12:42:32.665: E/AndroidRuntime(32432): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1211)
03-03 12:42:32.665: E/AndroidRuntime(32432): at android.os.Handler.dispatchMessage(Handler.java:102)
03-03 12:42:32.665: E/AndroidRuntime(32432): at android.os.Looper.loop(Looper.java:136)
03-03 12:42:32.665: E/AndroidRuntime(32432): at android.app.ActivityThread.main(ActivityThread.java:5135)
03-03 12:42:32.665: E/AndroidRuntime(32432): at java.lang.reflect.Method.invokeNative(Native Method)
03-03 12:42:32.665: E/AndroidRuntime(32432): at java.lang.reflect.Method.invoke(Method.java:515)
03-03 12:42:32.665: E/AndroidRuntime(32432): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
03-03 12:42:32.665: E/AndroidRuntime(32432): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
03-03 12:42:32.665: E/AndroidRuntime(32432): at dalvik.system.NativeStart.main(Native Method)
Android.mk代碼如下:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)#LOCAL_MODULE := libEncodePassword #導致錯誤的行,此處so類庫名前不能以“lib”開頭。應該是編譯時間產生的so類庫檔案都以lib為首碼有衝突。此處打個問號,求解LOCAL_MODULE := EncodePassword #正確行#LOCAL_SRC_FILES := Password.cinclude $(BUILD_SHARED_LIBRARY)
MainActivity.java代碼如下:
//載入cpu架構對應so類庫 static{ //System.loadLibrary("libEncodePassword"); //導致錯誤的行,此處so類庫名前不能以“lib”開頭 System.loadLibrary("EncodePassword"); //正確 }