【问题标题】:Cannot bind jar in xamarin, No packages found无法在 xamarin 中绑定 jar,找不到包
【发布时间】:2015-11-02 13:51:26
【问题描述】:

我正在尝试绑定到 xamarin android 项目中的一个非常简单的 jar 文件,但我收到了警告:

JARTOXML : warning J2X9001: Couldn't load class GetCerts : java.lang.UnsupportedClassVersionError: GetCerts : Unsupported major.minor version 52.0
BINDINGSGENERATOR : warning BG8601: No packages found.

如果我将 picasso-2.5.2.jar 添加到同一个绑定项目中,它可以完美访问,就像在从 xamarin (http://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/binding-a-java-library/binding-a-jar/) 绑定 jar 的文档中一样

jar 中的代码极其简单:

package com.mgw;

import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

class GetCerts {
    public static X509Certificate  GetCert(byte[] bytes) throws Exception
    {
        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
        InputStream in = new ByteArrayInputStream(bytes);
        X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in);
        return cert;
    }
}

【问题讨论】:

  • 仅限绑定项目
  • 这没有帮助。我现在尝试使用 jdk6 构建,并且错误已经改变。删除方法调用和所有导入语句,添加新方法 public static void DoSomething(){} 并重新打包后,我现在收到警告 warning J2X9001: Couldn't load class GetCerts : java.lang.NoClassDefFoundError: GetCerts (wrong name: com/mgw/GetCerts)
  • 现在已经删除了包定义,并大大简化了代码以使绑定工作,我有看起来像 class GetCerts { public static boolean DoSomething() { return true; } } 并使用 jdk6 编译的 java 源代码,我现在遇到了问题 @987654327 @ 带有前面的警告warning J2X9001: Couldn't load class GetCerts : java.lang.StringIndexOutOfBoundsException: String index out of range: -1

标签: java c# jar xamarin


【解决方案1】:

问题是课程不是公开的。我将代码更改为:

package com.sage;

import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

public class GetCerts {
     public static X509Certificate  GetCert(byte[] bytes) throws Exception
     {
         CertificateFactory certFactory =          CertificateFactory.getInstance("X.509");
         InputStream in = new ByteArrayInputStream(bytes);
         X509Certificate cert =  (X509Certificate)certFactory.generateCertificate(in);
         return cert;
     }

    public static boolean DoSomething()
    {
        return true;
    }
}

更改文件名以匹配类名,使用 JDK6 重建,一切正常。

请注意,用于构建库的 JDK 版本不应高于 Xamarin 使用的版本,否则您可能会遇到问题。

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 2016-02-19
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多