我正在尝试在Android中使用Byte Buddy库但我收到错误:
java.lang.IllegalStateException: This JVM’s version string does not
seem to be valid: 0
我还没有编码,只是:
ByteBuddy test = new ByteBuddy();
在我的App.java中
我已导入:
但它没有用,我尝试过:
但我仍然得到同样的错误.
编辑
在初始化ByteBuddy之前我已经把这行放了:
System.setProperty("java.version","1.7.0_51");
但现在我又得到了另一个错误:
Caused by: java.lang.UnsupportedOperationException: can’t load this
type of class file.
对于此代码:
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();
最佳答案
该错误是因为java.version在Android中返回0(请参阅系统属性here – Comparison of Java and Android API一节)
另外,如果你观察ByteBuddy ClassFileVersion
forCurrentJavaVersion():此方法检查versionString,它应该返回任何有效的Java / JDK版本,否则它
throws IllegalStateException("This JVM's version string does not seem to be valid: " + versionString);
&安培;因为java.version返回0,所以它抛出了IllegalStateException.
尝试记录此值:
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_VERSION_PROPERTY声明为:
private static final String JAVA_VERSION_PROPERTY = "java.version";
依赖使用是:
如果你使用工作室,你可以添加
compile 'net.bytebuddy:byte-buddy:0.7.7'
到您的app build.gradle.
希望这有助于解决您的问题.