2010-03-18 19 views
5

में java.util.logging.LogManager लोड करने वाले क्लास प्रारंभिक समस्याएं। मैंने एंड्रॉइड मूल लाइब्रेरी में बदलाव किए हैं और एक नई system.img फ़ाइल स्थापित की है लेकिन अब स्टार्टअप पर एक असंबंधित त्रुटि प्राप्त हो रही है। मैं त्रुटि को निगल कर इसे प्राप्त कर सकता हूं लेकिन मैं जानना चाहता था कि कोई भी समस्या बता सकता है कि क्या समस्या है।एंड्रॉइड Dalvik VM

The Android implementation of Logger.java claims कि यह लॉगमैनेजर को प्रारंभ करने के लिए मजबूर कर रहा है क्योंकि इसके कक्षा init कोड आवश्यक एक बार सेटअप करता है। लेकिन इसने प्रारंभिक परिणामों को NoClassDefFoundError में मजबूर किया। मैं सोच रहा हूं कि क्लास के साथ ऐसा कुछ है जो अभी तक ज़ीगोट द्वारा प्रीलोड नहीं किया गया है, लेकिन पूरे वर्ग लोडर और वीएम व्यवसाय से परिचित नहीं है।

यदि किसी के पास कुछ अंतर्दृष्टि है तो इसकी सराहना की जाएगी। धन्यवाद।


I/Zygote (1253): Preloading classes... 

D/skia (1253): ------ build_power_table 1.4 

D/skia (1253): ------ build_power_table 0.714286 

W/dalvikvm(1253): Exception Ljava/lang/StackOverflowError; thrown during Ljava/util/logging/LogManager;.<clinit> 

W/dalvikvm(1253): Exception Ljava/lang/NoClassDefFoundError; thrown during Ljava/security/Security;.<clinit> 

W/dalvikvm(1253): Exception Ljava/lang/ExceptionInInitializerError; thrown during Landroid/net/http/HttpsConnection;.<clinit> 

E/Zygote (1253): Error preloading android.net.http.HttpsConnection. 

E/Zygote (1253): java.lang.ExceptionInInitializerError 

E/Zygote (1253): at java.lang.Class.classForName(Native Method) 

E/Zygote (1253): at java.lang.Class.forName(Class.java:237) 

E/Zygote (1253): at java.lang.Class.forName(Class.java:183) 

E/Zygote (1253): at com.android.internal.os.ZygoteInit.preloadClasses(ZygoteInit.java:295) 

E/Zygote (1253): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 

E/Zygote (1253): at dalvik.system.NativeStart.main(Native Method) 

E/Zygote (1253): Caused by: java.lang.ExceptionInInitializerError 

E/Zygote (1253): at javax.net.ssl.KeyManagerFactory$1.run(KeyManagerFactory.java:57) 

E/Zygote (1253): at javax.net.ssl.KeyManagerFactory$1.run(KeyManagerFactory.java:56) 

E/Zygote (1253): at java.security.AccessController.doPrivilegedImpl(AccessController.java:264) 

E/Zygote (1253): at java.security.AccessController.doPrivileged(AccessController.java:84) 

E/Zygote (1253): at javax.net.ssl.KeyManagerFactory.getDefaultAlgorithm(KeyManagerFactory.java:55) 

E/Zygote (1253): at org.apache.harmony.xnet.provider.jsse.SSLParameters.(SSLParameters.java:142) 

E/Zygote (1253): at org.apache.harmony.xnet.provider.jsse.SSLContextImpl.engineInit(SSLContextImpl.java:82) 

E/Zygote (1253): at android.net.http.HttpsConnection.initializeEngine(HttpsConnection.java:101) 

E/Zygote (1253): at android.net.http.HttpsConnection.(HttpsConnection.java:65) 

E/Zygote (1253): ... 6 more 

E/Zygote (1253): Caused by: java.lang.NoClassDefFoundError: java.util.logging.LogManager 

E/Zygote (1253): at java.util.logging.Logger.initHandler(Logger.java:419) 

E/Zygote (1253): at java.util.logging.Logger.log(Logger.java:1094) 

E/Zygote (1253): at java.util.logging.Logger.warning(Logger.java:906) 

E/Zygote (1253): at org.apache.harmony.luni.util.MsgHelp.loadBundle(MsgHelp.java:61) 

E/Zygote (1253): at org.apache.harmony.luni.util.Msg.getString(Msg.java:60) 

E/Zygote (1253): at java.io.BufferedInputStream.read(BufferedInputStream.java:316) 

E/Zygote (1253): at java.io.FilterInputStream.read(FilterInputStream.java:138) 

E/Zygote (1253): at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:157) 

E/Zygote (1253): at java.io.BufferedInputStream.read(BufferedInputStream.java:243) 

E/Zygote (1253): at java.util.Properties.load(Properties.java:302) 

E/Zygote (1253): at java.security.Security$1.run(Security.java:80) 

E/Zygote (1253): at java.security.Security$1.run(Security.java:67) 

E/Zygote (1253): at java.security.AccessController.doPrivilegedImpl(AccessController.java:264) 

E/Zygote (1253): at java.security.AccessController.doPrivileged(AccessController.java:84) 

E/Zygote (1253): at java.security.Security.(Security.java:66) 

E/Zygote (1253): ... 15 more 

W/dalvikvm(1253): threadid=3: thread exiting with uncaught exception (group=0x2aac6170) 

+0

+1 क्योंकि आपके एसओ पर और आपको उस ट्रेस में * स्टैक ओवरफ्लो एरर * मिला है :) – SyntaxT3rr0r

उत्तर

0

चौखटे/आधार/पहले से लोड वर्गों से अपमानजनक कक्षाएं निकालने का प्रयास करें, तो ढांचे के पुनर्निर्माण, और अपना डिवाइस फ़्लैश। यदि आप android.net.http से सभी लॉगिंग कक्षाओं और कक्षाओं को हटाते हैं तो आपके पास सफलता का सबसे अच्छा मौका होगा।

इसमें छोटे प्रदर्शन प्रभाव हो सकता है क्योंकि हटाए गए वर्ग एप्लिकेशन के बीच साझा नहीं किए जाएंगे।

1

मुझे लगता है कि कुंजी वास्तव में इस लाइन है:

डब्ल्यू/dalvikvm (-1253): अपवाद Ljava/लैंग/StackOverflowError; लाजावा/उपयोग/लॉगिंग/लॉगमैनेजर के दौरान फेंक दिया गया;

मेरा अनुमान है कि उस पंक्ति के अंत में <clinit> है जो HTML रूपांतरण निगल गया है। संदेश कह रहा है कि, LogManager वर्ग के वर्ग प्रारंभिकरण के दौरान, एक StackOverflowError था। इसने कक्षा को अनुपलब्ध कर दिया। बाद में, जब Logger.initHandler() को कॉल किया गया, सिस्टम NoClassDefFoundError लौटा।

तो यह पता लगाने के लिए कि क्या हो रहा है, आपको उस StackOverflowError पर एक हैंडल प्राप्त करने की आवश्यकता है।

+0

HTML रूपांतरण तब हुआ जब टेक्स्ट stackoverflow.com में चिपकाया गया था। अपवाद संदेश हमेशा class.method है, जहां कक्षा VM- आंतरिक "Lclassname;" में है प्रपत्र। तथ्य यह है कि यह "LogManager" कहता है। "LogManager। " के बजाय "इंगित करता है कि विधि का नाम गब्बल किया गया था। मेरा मतलब क्लिनिट था, न कि इनिट। – fadden

+0

मुझे लगता है कि आप HTML रूपांतरण में stackoverflow पाठ का मतलब है; मेरी गलती। –

0

चूंकि फ़ैडन संकेत दे रहा था, लॉगमेनगर के वर्ग प्रारंभिकरण के दौरान, क्लास लोडर ने कुछ अन्य कोड चलाया जिसमें स्टैक ओवरफ्लो था और इस प्रकार लॉगमैनेजर का क्लास प्रारंभिक विफल रहा।

मैं क्या उपकरण आपको एंड्रॉयड डिबग वातावरण में उपलब्ध है पता नहीं है, लेकिन मैं करूंगा:

  1. "जावा -verbose" के समकक्ष सेट (हाँ मुझे पता है कि वास्तव में dalvikvm नहीं है " "जावा। - लेकिन शायद यह एक ही तरह का झंडा है) आप LogManager क्लिनिट के हिस्से के रूप में अन्य वर्गों को लोड करने के लिए देख रहे हैं।
  2. लॉगमैनेजर क्लासलोडिंग पर एक ब्रेकपॉइंट सेट करें और कोड के माध्यम से कदम उठाएं।
  3. StackOverflowError पर ब्रेकपॉइंट सेट करें। ग्रहण में यह क्षमता है। ब्रेकपॉइंट व्यू पर एक [जे!] की तलाश करें - एक बार फिर यह नहीं पता कि एंड्रॉइड डीबग पर्यावरण में यह क्षमता है, लेकिन यह मूलभूत लगता है।
  4. logging.properties फ़ाइल में सूचीबद्ध कक्षाओं को देखें - समस्या उन वर्गों में से एक हो सकती है 'क्लिनिट
  5. खाली लॉगिंग.प्रोपर्टीज फ़ाइल आज़माएं।
  6. LogManager.readConfiguration() में ब्रेकपॉइंट सेट करें यह देखने के लिए कि क्या आप इसे दूर करते हैं या नहीं।
+0

दुर्भाग्य से, एक ब्रेकपाइंट की स्थापना संभव नहीं है यहाँ है - यह "युग्मनज" प्रारंभ, के दौरान हो रहा है जब वी एम एक विशेष एकल पिरोया मोड में है। इसका मतलब है कि डीबगर समर्थन थ्रेड नहीं चल रहा है, इसलिए कनेक्ट करने का कोई तरीका नहीं है। मैं एक बार हार्मनी त्रुटि संदेश अनुवाद सुविधा को खराब कर इस स्थिति में आया। यह त्रुटि की रिपोर्ट करने में असमर्थ होने के बारे में एक त्रुटि की रिपोर्ट करने की कोशिश कर रहे एक अनंत लूप में चला गया। आदर्श रूप से StackOverflowError NoClassDefFoundError के कारण में होगा, लेकिन एनसीडीएफई "कारण" नहीं लेता है। – fadden

+0

खैर निशान को देख - मेरी जंगली गधे अनुमान वहाँ एक वर्ग लॉगिंग विन्यास जो मौजूद नहीं है में संदर्भित है। लेकिन स्टैक ट्रेस मैं एक संदर्भ के लिए देखते हैं पर देख रहे हैं "org.apache.harmony.luni.util.MsgHelp.loadBundle (MsgHelp.java:61)" – Pat

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^