2013-03-28 13 views
6

यह त्रुटि मुझे पागल कर रही है।java.lang.ClassNotFoundException dalvik.system.BaseDexClassLoader.findClass

java.lang.ClassNotFoundException 
in dalvik.system.BaseDexClassLoader.findClass 

मेरा ऐप हमारे दो उपकरणों पर ग्रहण से जब निर्माण दुर्घटना नहीं करता है: जब डाउनलोड गूगल से त्रुटि साथ Play स्टोर मेरा ऐप स्टार्टअप पर दुर्घटनाओं। हालांकि एक महीने पहले एक ग्राहक ने अपने ऐप को बनाने के लिए अपने फोन का इस्तेमाल किया और फिर स्टार्टअप पर भी दुर्घटनाग्रस्त हो गया। मैंने समस्या को नजरअंदाज कर दिया क्योंकि यह हमारे उपकरणों पर काम कर रहा था और लगा कि इसे Google Map Key या Keystore के साथ कुछ करना था।

अब यह Play Store से डाउनलोड होने पर हर डिवाइस पर हमारे ऐप क्रैश हो जाता है। मैं समझता हूं कि इस समस्या को हल करने का कोई आसान तरीका नहीं है लेकिन सही दिशा में धक्का की सराहना की जाएगी।

मुझे इस समस्या को डीबग करना भी मुश्किल लगता है क्योंकि ऐप हमारे उपकरणों पर ग्रहण से निर्माण करते समय बहुत अच्छा काम करता है!

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.denederlandsewateren.winkeloord/com.denederlandsewateren.views.StartScreenActivity}: java.lang.ClassNotFoundException: com.denederlandsewateren.views.StartScreenActivity 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2099) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2210) 
at android.app.ActivityThread.access$600(ActivityThread.java:142) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4931) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassNotFoundException: com.denederlandsewateren.views.StartScreenActivity 
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
at android.app.Instrumentation.newActivity(Instrumentation.java:1053) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2090) 
... 11 more 

फिर मैं इस समस्या का सीधे आगे जवाब को छोड़कर न लेकिन शायद किसी को इस त्रुटि लॉग के साथ प्रदान की इस समस्या पर कुछ प्रकाश डाला कर सकते हैं:

यहाँ पूरा त्रुटि लॉग कि मैं सूचना दी है।

संपादित

यहाँ thats मददगार अगर मैनिफ़ेस्ट फ़ाइल है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.xxxx.xxxxx" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <permission 
     android:name="com.xxxxx.xxxxx.MAPS_RECEIVE" 
     android:protectionLevel="signature" /> 
    <permission 
     android:name="com.xxxxx.xxxxx.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="my_app_package.permission.C2D_MESSAGE" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.xxxxxx.xxxxx.MAPS_RECEIVE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true" /> 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/app_icon" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.Sherlock" > 
     <service android:name="com.xxxxxx.xxxxx.GCMIntentService" /> 

     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="xxxxxxxx" /> 

     <receiver 
      android:name="com.google.android.gcm.GCMBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

       <category android:name="com.xxxxxx.xxxxxxx" /> 
      </intent-filter> 
     </receiver> 

     <activity 
      android:name="com.xxxxx.xxxxx.MainActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait"> 
      <!--<intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> --> 
     </activity> 

     <meta-data 
      android:name="com.facebook.sdk.ApplicationId" 
      android:value="@string/app_id" /> 

     <activity android:name="com.facebook.LoginActivity" > 
     </activity> 
     <activity 
      android:name="com.xxxxxx.xxxxxx.StartScreenActivity" 
      android:label="@string/app_name" 
      android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

संपादित

जोड़ा गया वर्बोज़ लॉग जब डिवाइस पर ऐप्लिकेशन को इंस्टॉल

03-30 17:56:28.554: D/dalvikvm(5150): GC_FOR_ALLOC freed 233K, 68% free 2639K/8195K, paused 13ms, total 13ms 
03-30 17:56:28.574: I/dalvikvm-heap(5150): Grow heap (frag case) to 26.682MB for 16777232-byte allocation 
03-30 17:56:28.594: D/dalvikvm(5150): GC_CONCURRENT freed <1K, 23% free 19022K/24647K, paused 2ms+9ms, total 21ms 
03-30 17:56:29.114: D/dalvikvm(5150): GC_FOR_ALLOC freed 0K, 23% free 19022K/24647K, paused 15ms, total 15ms 
03-30 17:56:29.129: I/dalvikvm-heap(5150): Grow heap (frag case) to 35.681MB for 9437200-byte allocation 
03-30 17:56:29.169: D/dalvikvm(5150): GC_CONCURRENT freed 0K, 17% free 28238K/33927K, paused 2ms+2ms, total 38ms 
03-30 17:56:29.254: D/libEGL(5150): loaded /system/lib/egl/libEGL_mali.so 
03-30 17:56:29.259: D/libEGL(5150): loaded /system/lib/egl/libGLESv1_CM_mali.so 
03-30 17:56:29.259: D/libEGL(5150): loaded /system/lib/egl/libGLESv2_mali.so 
03-30 17:56:29.284: D/OpenGLRenderer(5150): Enabling debug mode 0 
03-30 17:56:32.154: D/KEY(5150): UUID 
03-30 17:56:32.179: I/System.out(5150): UUID: xxxxxxxxxxxxxx 
03-30 17:56:32.179: E/SerializeObject(5150): FileNot Found in ReadSettings filename = xxxxx.dat 
03-30 17:56:32.184: D/GCMRegistrar(5150): resetting backoff for com.xxxxx.xxxxx 
03-30 17:56:32.214: V/GCMRegistrar(5150): Registering app com.xxxxx.xxxxx of senders 752727514714 
03-30 17:56:32.214: D/KEY(5150): pushEnabled 
03-30 17:56:32.324: V/SlidingMenu(5150): setting padding! 
03-30 17:56:32.394: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.394: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.394: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.409: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.414: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.414: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.424: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.424: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.429: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.434: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.434: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.434: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text 
03-30 17:56:32.459: V/CustomViewBehind(5150): behind INVISIBLE 
03-30 17:56:36.894: D/dalvikvm(5150): GC_CONCURRENT freed 20031K, 58% free 15574K/36551K, paused 4ms+7ms, total 49ms 
03-30 17:56:36.894: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 31ms 
03-30 17:56:37.504: I/System.out(5150): VaarApp ID: 5 
03-30 17:56:37.534: I/Choreographer(5150): Skipped 122 frames! The application may be doing too much work on its main thread. 
03-30 17:56:37.539: V/GCMBroadcastReceiver(5150): onReceive: com.google.android.c2dm.intent.REGISTRATION 
03-30 17:56:37.544: V/GCMBroadcastReceiver(5150): GCM IntentService class: com.xxxxx.xxxxx.GCMIntentService 
03-30 17:56:37.549: V/GCMBaseIntentService(5150): Acquiring wakelock 
03-30 17:56:37.794: V/GCMBaseIntentService(5150): Intent service name: GCMIntentService-DynamicSenderIds-1 
03-30 17:56:37.794: E/GCMRegistrar(5150): internal error: retry receiver class not set yet 
03-30 17:56:37.794: V/GCMRegistrar(5150): Registering receiver 
03-30 17:56:37.799: D/GCMBaseIntentService(5150): handleRegistration: registrationId = xxxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxx-xxxxx-xxxx, error = null, unregistered = null 
03-30 17:56:37.799: D/GCMRegistrar(5150): resetting backoff for com.xxxxx.xxxxx 
03-30 17:56:37.799: V/GCMRegistrar(5150): Saving regId on app version 1 
03-30 17:56:37.829: V/GCMBaseIntentService(5150): Releasing wakelock 
03-30 17:56:39.169: D/dalvikvm(5150): GC_CONCURRENT freed 2248K, 52% free 17830K/36551K, paused 6ms+12ms, total 95ms 
03-30 17:56:39.169: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 12ms 
03-30 17:56:39.174: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 48ms 
03-30 17:56:41.164: I/dalvikvm(5150): Jit: resizing JitTable from 4096 to 8192 
03-30 17:56:42.229: D/dalvikvm(5150): GC_CONCURRENT freed 4265K, 49% free 18778K/36551K, paused 3ms+6ms, total 58ms 
03-30 17:56:42.229: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 41ms 
03-30 17:56:42.234: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 46ms 
03-30 17:57:51.759: D/dalvikvm(5150): GC_CONCURRENT freed 5476K, 49% free 18775K/36551K, paused 21ms+6ms, total 196ms 
+2

एक निर्माण ProGuard का उपयोग करके है? मैं सोच रहा हूं कि ProGuard कोड को अलग कर रहा है क्योंकि ऐसा लगता है कि यह अप्रयुक्त है। – fadden

+0

यदि वर्ग मौजूद है (प्रोजेक्ट नहीं किया गया है), तो संभव है कि दल्विक कुछ कारणों से कक्षा को अस्वीकार कर रहा है। यदि ऐसा है, तो आप ऐप इंस्टॉल करते समय दाल्विक से कुछ त्रुटि संदेश देखेंगे। – JesusFreke

+0

मैंने अपना ऐप इंस्टॉल करते समय लॉग जोड़ा। अभी ProGuard में देखेंगे। –

उत्तर

7

तो यह वास्तव में प्रोगार्ड था जो मेरी परियोजना से कोड अलग कर रहा था।मैं ActionBarSherlock और फेसबुक का उपयोग करें और यह मैं क्या जोड़ा तो यह काम करेगा है:

फेसबुक के लिए
# ActionBarSherlock 

-keep class android.support.** { *; } 

-keep interface android.support.** { *; } 

-keep class com.actionbarsherlock.** { *; } 

-keep interface com.actionbarsherlock.** { *; } 




# Keep line numbers to alleviate debugging stack traces 

-renamesourcefileattribute SourceFile 

-keepattributes SourceFile,LineNumberTable 

यह:

-keepclassmembers class * implements java.io.Serializable 
{ 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 
0

खैर, मैं सुझाव दूंगा कि आप ग्रहण से किए गए निर्माण और बिल्ड स्टोर के निर्माण के बीच के अंतर के बीच के अंतर पर ध्यान केंद्रित करें।

यदि आप प्लेस्टोर से देखे गए त्रुटि को पुन: उत्पन्न कर सकते हैं, इसे ग्रहण के साथ बनाकर और इसका परीक्षण करते समय, आपको निश्चित रूप से उत्तर मिल जाएगा।

मैं क्या सोच सकता हूं कि ऐप पर हस्ताक्षर किए जाने वाले प्रमाण पत्र हैं, लेकिन ऐसा प्रतीत नहीं होता है। हालांकि आपको दो .apk के बीच अंतर क्या है - डेवलपर बिल्ड और प्लेस्टोर के लिए निर्माण के बारे में और अधिक सोचना चाहिए।

जैसे। एपीके मूल रूप से अभिलेखागार हैं, आप उन्हें दोनों को अनजिप कर सकते हैं, उनके बीच मतभेद देख सकते हैं। Class.dex के दो उदाहरणों को देखने और डिकंपाइल करने के लिए आपको एक dedexer का उपयोग करना चाहिए (decompiling DEX into Java sourcecode देखें)। यह संभवतः अत्यधिक obfuscated कोड होगा, लेकिन आप गायब कक्षाओं या उस तरह कुछ के लिए देखना चाहिए।

आशा है कि आप इसे सही मान लें।

+0

इस टिप के लिए धन्यवाद! आईएम घर जब मैं इस पर सही हो। –

0

सही अपनी परियोजना फ़ोल्डर => गुण => जावा बिल्ड पथ पर क्लिक करें => आदेश और निर्यात => यदि चेक नहीं किया गया है तो "एंड्रॉइड प्राइवेट लाइब्रेरीज़" बॉक्स को चेक करें। और यह काम करता है!

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