Java 在Android上使用Byte Buddy时出错
我正在尝试在Android中使用库,但出现错误: java.lang.IllegalStateException:此JVM的版本字符串不存在 似乎有效:0 我还没有编码,只是: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
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.version在Android中返回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'