使用dalvikvm加载类时拒绝先前失败的类错误的重新初始化 [英] Rejecting re-init on previously failed class error when loading a Class with dalvikvm
问题描述
我正在尝试在Lollipop 5.1.1上使用Terminal IDE。使用Samsung E7设备,XDA
上的某人在以下位置提供了终端IDE的修改版:
http://forum.xda-developers.com/showthread.php?t=1340852&page=7
我试图在该mod中使用javac脚本,但是它给出了一个不满意的链接错误,说:
$ javac
java.lang.UnsatisfiedLinkError:org.apache.harmony.security.fortress.Services
,位于org.apache.harmony.security.fortress.Engine.getServices(Engine.java:158 )org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:137)的
java.security.cert.CertificateFactory.getInstance(CertificateFactory.java:90)的
b在
上org.apache.harmony.security.utils.JarUtils.verifySignature(JarUtils.java:83)
在java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:294)
在java.util.jar.JarVerifier.readCertificates(JarVerifier.java:268)
在java.util.jar.JarFile.getInputStream(JarFile.java:380)
在libcore.net.url .JarURLConnectionImpl.getInputStream(JarURLConnectionImpl.java:222)
在java.net.URL.openStream(URL.java:470)
在java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:444)
在java.util.ResourceBundle.handleGetBundle(ResourceBundle.java:515)
在java.util.ResourceBundle.handleGetBundle(ResourceBundle.java:542)
在java.util.ResourceBundle.handleGetBundle( ResourceBundle.java:542)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:228)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:139)
at com .sun.tools.javac.main.JavaCompiler.version(JavaCompiler.java:112)
在com.sun.tools.javac.main.JavaCompiler.version(JavaCompiler.java:97)
在com.sun.tools.javac.main.Main.bugMessage(Main.java:434)
在com.sun.tools.javac.main.Main.compile(Main.java:421)
在com.sun.tools.javac.main.Main.compile(Main.java:308)
在com.sun.tools.javac.main.Main.compile(Main.java:299)
在com.sun.tools.javac.Main.compile(Main.java:82)
在com.spartacusrex.spartacuside.external.javac.main(javac.java:13)
$
奇怪的是,有一个 UnsatisfiedLinkError ,因为它没有说VM无法找到xyz.so库或找不到xyz方法。
我在Device上使用Terminal IDE的 javac
脚本后立即尝试使用 logcat
命令,这很奇怪从那里开始:
I / art(6558):拒绝对先前失败的类java.lang.Class< org.apache进行重新初始化.harmony.security.fortress.Services>
我不明白为什么会这样,
javac脚本使用android的 dalvikvm
命令加载
com.spartacusrex.spartacuside.external.javac
类。人们在sdk版本 20 +
上遇到了拒绝重新初始化
的问题,但是我不清楚为什么此信息消息
我复制了 /system/lib/libjavacrypto.so
到Terminal IDE的〜/ system / lib
文件夹,现在javac和dx工具正在运行。
看来Google弄乱了/ system / lib中的内容,导致了错误。
回答,所以其他人可能会觉得有用。
I am trying to use Terminal IDE on Lollipop 5.1.1. Using a Samsung E7 device, a mod version of Terminal IDE is provided by someone on XDA here: http://forum.xda-developers.com/showthread.php?t=1340852&page=7
I tried to use javac script in that mod but it gave an unsatisfied link error, saying that:
$ javac java.lang.UnsatisfiedLinkError: org.apache.harmony.security.fortress.Services at org.apache.harmony.security.fortress.Engine.getServices(Engine.java:158) at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:137) at java.security.cert.CertificateFactory.getInstance(CertificateFactory.java:90) at org.apache.harmony.security.utils.JarUtils.verifySignature(JarUtils.java:83) at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:294) at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:268) at java.util.jar.JarFile.getInputStream(JarFile.java:380) at libcore.net.url.JarURLConnectionImpl.getInputStream(JarURLConnectionImpl.java:222) at java.net.URL.openStream(URL.java:470) at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:444) at java.util.ResourceBundle.handleGetBundle(ResourceBundle.java:515) at java.util.ResourceBundle.handleGetBundle(ResourceBundle.java:542) at java.util.ResourceBundle.handleGetBundle(ResourceBundle.java:542) at java.util.ResourceBundle.getBundle(ResourceBundle.java:228) at java.util.ResourceBundle.getBundle(ResourceBundle.java:139) at com.sun.tools.javac.main.JavaCompiler.version(JavaCompiler.java:112) at com.sun.tools.javac.main.JavaCompiler.version(JavaCompiler.java:97) at com.sun.tools.javac.main.Main.bugMessage(Main.java:434) at com.sun.tools.javac.main.Main.compile(Main.java:421) at com.sun.tools.javac.main.Main.compile(Main.java:308) at com.sun.tools.javac.main.Main.compile(Main.java:299) at com.sun.tools.javac.Main.compile(Main.java:82) at com.spartacusrex.spartacuside.external.javac.main(javac.java:13) $
It is strange that there is a UnsatisfiedLinkError , because it doesn't say that VM cannot find xyz.so library or cannot find xyz method.
I tried using logcat
command right after using Terminal IDE's javac
script on Device, the odd thing I found from there is :
I/art ( 6558) : rejecting re-init on previously-failed class java.lang.Class<org.apache.harmony.security.fortress.Services>
I couldn't understand why this happened,
The javac script uses android's dalvikvm
command to load
com.spartacusrex.spartacuside.external.javac
class. People have faced this rejecting re-init
issue on sdk version 20+
but it's not clear to me why this info message uccurs and how to solve it.
I copied /system/lib/libjavacrypto.so
to Terminal IDE's ~/system/lib
folder and now javac and dx tools are working.
It seems like Google messed up with things in /system/lib which resulted in errors.
Answering so someone else might find it useful.
这篇关于使用dalvikvm加载类时拒绝先前失败的类错误的重新初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!