2013-03-28 108 views
6

這個錯誤讓我發瘋了。拋出java.lang.ClassNotFoundException在dalvik.system.BaseDexClassLoader.findClass

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

我的應用程序不會生成當從日食在我們的兩個設備崩潰:當下載從谷歌Play商店與錯誤我的應用程序在啓動時崩潰。然而,一個月前,一位客戶使用他的手機來開發我們的應用程序,然後它在啓動時也崩潰了。我忽略了這個問題,因爲它在我們的設備上工作,並認爲它與Google Map鍵或Keystore有關。

現在事實證明,我們的每一個設備上的應用程序崩潰從Play商店下載的時候。我明白,解決這個問題並不是一個簡單的方法,但我們希望能夠朝着正確的方向前進。

我也覺得很難調試這個問題,因爲應用程序的偉大工程時,構建從我們的設備日食!

這裏是我報告的完整的錯誤日誌:

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 

再次,我不只是一個簡單的回答了這個問題,但也許有人可以提供與此錯誤日誌這個問題提供一些線索。

編輯

這裏是如果那是有幫助的清單文件:

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

如果這個類確實存在(沒有被排除),那麼dalvik可能因爲某種原因拒絕了這個類。如果是這種情況,當您安裝應用程序時,您會看到來自dalvik的一些錯誤消息。 – JesusFreke

+0

我在安裝我的應用程序時添加了日誌。現在就看看ProGuard。 –

回答

7

因此,確實ProGuard正在從我的項目中剝離代碼。我用ActionBarSherlock和Facebook這是我添加什麼,所以這是可行的:

# 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 

這對於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

那麼,我建議你關注一下你在eclipse上製作的版本和你提供給Play商店的版本之間的區別。

如果你能重現您從Play商店中看到,而用eclipse建立並測試它的錯誤,你一定會找到答案。

我能想到的是,應用程序被簽署的證書,但它似乎沒有吧。但是,您應該更多地考慮兩個.apk的區別 - 開發人員構建和playstore的構建。

由於apk文件基本上都是存檔,可以解壓他們兩個,看他們之間的差異。您應該使用dedexer來嘗試反編譯classes.dex的兩個實例(請參閱decompiling DEX into Java sourcecode)。它可能是高度混淆的代碼,但你應該尋找丟失的類或類似的東西。

希望你得到它的權利。

+0

感謝您的這個提示!當我回家的時候,我會很開心的。 –

0

右鍵單擊您的項目文件夾=>屬性=> Java構建路徑=>訂單和導出=>如果未選中,請選中「Android專用庫」框。它的工作原理!

相關問題