简体   繁体   English

如何修复 Xamarin.Android 绑定项目 (.aar) 中的“Java.Lang.NoClassDefFoundError”

[英]How to fix "Java.Lang.NoClassDefFoundError" in a Xamarin.Android Binding Project (.aar)

I'am currently writing a Plugin to use the Zendesk Support SDK ( https://developer.zendesk.com/embeddables/docs/android_support_sdk/nutshell ) in my Xamarin.Forms project.我目前正在编写一个插件以在我的 Xamarin.Forms 项目中使用 Zendesk 支持 SDK ( https://developer.zendesk.com/embeddables/docs/android_support_sdk/nutshell )。 I wrote and tested the Plugin in Android Studio with a small Activity/UI.我用一个小的 Activity/UI 在 Android Studio 中编写并测试了插件。 Now I created a Binding Project to use the .aar file inside of Xamarin.现在我创建了一个绑定项目来使用 Xamarin 中的 .aar 文件。 If I launch the application and access the first function I get an error code.如果我启动应用程序并访问第一个功能,我会收到一个错误代码。

I have already tried to add the .jar files that gradle downloads to ~/.gradle/caches/modules-2/files-2.1 to the binding project, as well as removing all parameters I pass to the plugin.我已经尝试将 gradle 下载到 ~/.gradle/caches/modules-2/files-2.1 的 .jar 文件添加到绑定项目,以及删除我传递给插件的所有参数。 The last test I did was changing the build action of the binding project, currently my .aar's build action is set to "LibraryProjectZip" as recommended by the Xamarin documentation.我所做的最后一个测试是更改绑定项目的构建操作,目前我的 .aar 的构建操作设置为 Xamarin 文档推荐的“LibraryProjectZip”。

Java

import android.app.Activity;
import android.util.Log;

import java.util.List;
import java.util.Locale;

import zendesk.commonui.UiConfig;
import zendesk.core.AnonymousIdentity;
import zendesk.core.Identity;
import zendesk.core.Zendesk;
import zendesk.support.Support;
import zendesk.support.guide.HelpCenterActivity;
import zendesk.support.guide.ViewArticleActivity;
import zendesk.support.request.RequestActivity;

    public void Init () {
        try {
            // Return if Zendesk is already initialized
            if (IsInitialized()) return;

            Zendesk.INSTANCE.init (MainActivity, zendeskCredentials.zendeskUrl,zendeskCredentials.applicationId,zendeskCredentials.oauthClientId);
            Support.INSTANCE.init(Zendesk.INSTANCE);

            Identity identity = new AnonymousIdentity.Builder().withNameIdentifier(zendeskCredentials.userName).withEmailIdentifier(zendeskCredentials.userEmail).build();
            Zendesk.INSTANCE.setIdentity(identity);

            Support.INSTANCE.setHelpCenterLocaleOverride(locale);
        }
        catch (Exception e) {
            Log.d("EXCEPTION: ", e.getMessage());
        }
    }

____________
Xamarin

public void Init() {
    ZendeskPlugin.Instance.Init();
}

This is what I get:这就是我得到的:

Java.Lang.NoClassDefFoundError: Failed resolution of: Lzendesk/core/Zendesk; Java.Lang.NoClassDefFoundError:解析失败:Lzendesk/core/Zendesk; ---> Java.Lang.ClassNotFoundException: Didn't find class "zendesk.core.Zendesk" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/de.foo.foo-25GgMgJo-hI1Hnw8TCqT-A==/base.apk"],nativeLibraryDirectories=[/data/app/de.foo.foo-25GgMgJo-hI1Hnw8TCqT-A==/lib/arm64, /data/app/de.foo.foo-25GgMgJo-hI1Hnw8TCqT-A==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]] --- End of inner exception stack trace --- at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <09821b4f44794452b7d6c054ac9447f5>:0 at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0002a] in <09821b4f44794452b7d6c054ac9447f5>:0 ---> Java.Lang.ClassNotFoundException:在路径上没有找到类“zendesk.core.Zendesk”:DexPathList[[zip file“/system/framework/org.apache.http.legacy.boot.jar”,zip文件 "/data/app/de.foo.foo-25GgMgJo-hI1Hnw8TCqT-A==/base.apk"],nativeLibraryDirectories=[/data/app/de.foo.foo-25GgMgJo-hI1Hnw8TCqT-A==/lib /arm64, /data/app/de.foo.foo-25GgMgJo-hI1Hnw8TCqT-A==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]] --- 结束内部异常堆栈跟踪 --- 在 Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod(Java.Interop.JniObjectReference 实例、Java.Interop.JniMethodInfo 方法、Java.Interop.JniArgumentValue* args)[0x00069] <09821b4f4479494507b75d>中在 Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodingMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* 参数) [0x0002a] 在 <09821b4f44794452b7d94002b7d6c6c

... ...

I know it is too late to answer this question, but I hope this will help others to solve their problem.我知道现在回答这个问题为时已晚,但我希望这会帮助其他人解决他们的问题。 Please try to install Xamarin.Kotlin.StdLib in your Xamarin Android project.请尝试在您的 Xamarin Android 项目中安装Xamarin.Kotlin.StdLib Installing the Kotlin package worked for me because I was using the .aar file which contains Kotlin code.安装 Kotlin 包对我.aar ,因为我使用的是包含 Kotlin 代码的.aar文件。

Install-Package Xamarin.Kotlin.StdLib -Version 1.3.50.1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM