Java 在Android上使用Byte Buddy时出错

Java 在Android上使用Byte Buddy时出错,java,android,byte-buddy,Java,Android,Byte Buddy,我正在尝试在Android中使用库,但出现错误: java.lang.IllegalStateException:此JVM的版本字符串不存在 似乎有效:0 我还没有编码,只是: ByteBuddy test = new ByteBuddy(); 在我的App.java中 我已输入: <dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy</ar

我正在尝试在Android中使用库,但出现错误:

java.lang.IllegalStateException:此JVM的版本字符串不存在 似乎有效:0

我还没有编码,只是:

ByteBuddy test = new ByteBuddy();
在我的App.java中

我已输入:

<dependency>
    <groupId>net.bytebuddy</groupId>
    <artifactId>byte-buddy</artifactId>
    <version>0.7.7</version>
</dependency>
但现在我发现了另一个错误:

原因:java.lang.UnsupportedOperationException:无法加载此 类文件的类型

对于此代码:

Class<?> dynamicType = new ByteBuddy(ClassFileVersion.JAVA_V6)
            .subclass(Object.class)
            .method(ElementMatchers.named("toString"))
            .intercept(FixedValue.value("Hello World!"))
            .make()
            .load(getClass().getClassLoader(), AndroidClassLoadingStrategy.Default.WRAPPER)
            .getLoaded();
classdynamictype=newbytebuddy(ClassFileVersion.JAVA\uv6)
.subclass(Object.class)
.method(ElementMatchers.named(“toString”))
.intercept(FixedValue.value(“helloworld!”)
.make()
.load(getClass().getClassLoader(),AndroidClassLoadingStrategy.Default.WRAPPER)
.getLoaded();

错误是因为java.versionAndroid中返回0(请参阅系统属性部分)

另外,如果你观察到

forCurrentJavaVersion():此方法检查versionString,它将返回任何有效的Java/JDK版本

throws IllegalStateException("This JVM's version string does not seem to be valid: " + versionString);
&由于java.version正在返回0,它正在抛出非法状态异常

尝试记录此值:

String versionString = System.getProperty(JAVA_VERSION_PROPERTY);
Log.d(TAG, versionString);//retruns 0 here
因此,此问题的解决方法是添加

 System.setProperty(JAVA_VERSION_PROPERTY, "1.7.0_79");//add your jdk version here
打电话之前

ByteBuddy test = new ByteBuddy();
其中JAVA\u VERSION\u属性声明为:

 private static final String JAVA_VERSION_PROPERTY = "java.version";
另外,要使用的依赖项是:

<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>0.7.7</version>
</dependency>
到您的应用程序build.gradle


希望这有助于解决您的问题。

在Android上,尝试显式添加类文件版本:new ByteBuddy(ClassFileVersion.JAVA_6),Android依赖项包含一个特定于Android的类加载策略。我已将类加载策略更改为Android策略,并指定了ClassFileVersion,但仍然收到相同的错误。您没有使用Android类加载策略。默认策略在那里不起作用。使用“new”实例化一个。AndroidClassLoadingStrategy构造函数需要一个“privateDirectory”
文件
。我应该通过什么?它有效!!在AndroidClassLoadingStrategy中,我通过了
context.getDir(“dexgen”,context.MODE\u PRIVATE)
。谢谢
 private static final String JAVA_VERSION_PROPERTY = "java.version";
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>0.7.7</version>
</dependency>
compile 'net.bytebuddy:byte-buddy:0.7.7'