2013-03-28 6 views
6

Dieser Fehler macht mich verrückt. Meine app stürzt beim Start heruntergeladen, wenn sie aus dem Google Play Store mit dem Fehler:java.lang.ClassNotFoundException in dalvik.system.BaseDexClassLoader.findClass

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

Meine app nicht abstürzt, wenn Build von Eclipse auf unseren beiden Geräten. Vor einem Monat nutzte ein Kunde jedoch sein Handy, um unsere App zu erstellen, und dann stürzte es auch beim Start ab. Ich ignorierte das Problem, weil es auf unseren Geräten funktionierte und feststellte, dass es etwas mit Google Map Keys oder Keystore zu tun hatte.

Jetzt stellt sich heraus, dass unsere App auf jedem Gerät abstürzt, wenn sie aus dem Play Store heruntergeladen wird. Ich verstehe, dass es keine einfache Möglichkeit gibt, dieses Problem zu lösen, aber ein Schub in die richtige Richtung wäre wünschenswert.

Ich finde es auch schwer, dieses Problem zu debuggen, weil die App gut funktioniert, wenn Sie von Eclipse auf unseren Geräten bauen!

Dies ist das komplette Fehlerprotokoll, das ich berichten:

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 

Wieder mich außer einer straight forward Antwort auf dieses Problem nicht, aber vielleicht kann jemand etwas Licht auf diesem Problem mit diesem Fehlerprotokoll vorgesehen vergießen.

EDIT

Hier ist die Manifest-Datei, wenn das ist hilfreich:

<?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> 

EDIT

Added das ausführliche Protokoll, wenn der App auf dem Gerät zu installieren

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

Wird ein Build mit ProGuard erstellt? Ich frage mich, ob ProGuard den Code entfernt, weil er denkt, dass er ungenutzt ist. – fadden

+0

Wenn die Klasse existiert (wird nicht ausgeführt), ist es möglich, dass dalvik die Klasse aus irgendeinem Grund ablehnt. Wenn dies der Fall ist, werden bei der Installation der App einige Fehlermeldungen von dalvik angezeigt. – JesusFreke

+0

Ich habe die Protokolle bei der Installation meiner App hinzugefügt. Ich werde jetzt direkt in ProGuard schauen. –

Antwort

7

Also war es in der Tat ProGuard, der Code von meinem Projekt entfernt hat.Ich benutze ActionBarSherlock und Facebook und das ist, was ich hinzugefügt, so würde es funktionieren:

# 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 

Diese für Facebook:

-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

Nun, ich schlage vor, dass Sie sich auf den Unterschied zwischen dem Build, den Sie aus Eclipse erstellen, und dem Build, den Sie dem Play Store zur Verfügung stellen, konzentrieren.

Wenn Sie den Fehler, den Sie aus dem Playstore sehen, reproduzieren können, während Sie ihn mit Eclipse erstellen und testen, werden Sie sicherlich die Antwort finden.

Was ich mir vorstellen kann, sind die Zertifikate, die die App signiert, aber es scheint nicht zu sein. Allerdings solltest du mehr darüber nachdenken, was der Unterschied zwischen den beiden .apk's ist - dem Entwickler-Build und dem Build für Playstore.

Da .apk im Grunde Archive sind, können Sie beide entzippen, Unterschiede zwischen ihnen sehen. Sie sollten einen Dedexer verwenden, um die beiden Instanzen von classes.dex zu versuchen und zu dekompilieren (siehe decompiling DEX into Java sourcecode). Es wird wahrscheinlich stark verschleierter Code sein, aber Sie sollten nach fehlenden Klassen oder ähnlichem Ausschau halten.

Hoffe, Sie bekommen es richtig.

+0

danke für diesen Tipp! Ich werde mich hier zurechtfinden, wenn ich zu Hause bin. –

0

Rechts auf Ihrem Projektordner klicken => Eigenschaften => Java Build Path => Bestellen und Exportieren => Aktivieren Sie das Kontrollkästchen "Android Private Libraries", falls nicht aktiviert. Und es funktioniert !