Как исправить несоответствие архитектуры процессора, неожиданное e_machine, из-за файла .so - PullRequest
0 голосов
/ 12 июня 2018

У меня есть проект Xamarin android, и в настоящее время я использую Visual Studio 2015.

Внутри моего MainActivity.cs у меня есть следующий код:

Com.Alk.Sdk.SharedLibraryLoader.LoadLibrary("alksdk", this);

который затем переходит к:

// Metadata.xml XPath method reference: path="/api/package[@name='com.alk.sdk']/class[@name='SharedLibraryLoader']/method[@name='loadLibrary' and count(parameter)=2 and parameter[1][@type='java.lang.String'] and parameter[2][@type='android.content.Context']]"
        [Register ("loadLibrary", "(Ljava/lang/String;Landroid/content/Context;)Z", "")]
        public static unsafe bool LoadLibrary (string p0, global::Android.Content.Context p1)
        {
            if (id_loadLibrary_Ljava_lang_String_Landroid_content_Context_ == IntPtr.Zero)
                id_loadLibrary_Ljava_lang_String_Landroid_content_Context_ = JNIEnv.GetStaticMethodID (class_ref, "loadLibrary", "(Ljava/lang/String;Landroid/content/Context;)Z");
            IntPtr native_p0 = JNIEnv.NewString (p0);
            try {
                JValue* __args = stackalloc JValue [2];
                __args [0] = new JValue (native_p0);
                __args [1] = new JValue (p1);
                bool __ret = JNIEnv.CallStaticBooleanMethod  (class_ref, id_loadLibrary_Ljava_lang_String_Landroid_content_Context_, __args);
                return __ret;
            } finally {
                JNIEnv.DeleteLocalRef (native_p0);
            }
        }

Проблема, с которой я сталкиваюсь, состоит в том, что когда он вызывает JNIEnv.CallStaticBooleanMethod , он выдает это исключение:

[ERROR] FATAL UNHANDLED EXCEPTION: Java.Lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.pai.rp/app_lib/libalksdk.so" has unexpected e_machine: 3
--- End of managed Java.Lang.UnsatisfiedLinkError stack trace ---
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.pai.rp/app_lib/libalksdk.so" has unexpected e_machine: 3
at java.lang.Runtime.load0(Runtime.java:908)
at java.lang.System.load(System.java:1542)
at com.alk.sdk.SharedLibraryLoader.loadLibrary(SharedLibraryLoader.java:44)
at com.pai.rp.MainActivity.n_onCreate(Native Method)
at com.pai.rp.MainActivity.onCreate(MainActivity.java:30)
at android.app.Activity.performCreate(Activity.java:6973)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3064)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1659)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6823)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1557)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)

Из того, что я смог исследовать, я обнаружил, что

  • e_machine: 3 означает, что ожидаемая арка - это Intel 80386 ( ELF Headers ).

  • При использовании эмулятора Google Nexus 10 он работает, однако, когда я использую Galaxy Tab E (ARM) через отладку USB, он вылетает и выдает мне эту ошибку.

Так вот вопрос, как мне это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...