2013-10-23 104 views
0

這是我的代碼:安卓:java.lang.NoClassDefFoundError文件

public static void deleteFile(stPath){ 
    File yourDir = new File(stPath); **// Line 210 in MyUtil.java** 
    // 
    .... 
    /// 
} 

,我把它在AsynTask方法:

private class Backup extends AsyncTask<String, Void, Exception> { 
     @Override 
     protected void onPreExecute() { 
      showProgressDialog(StringUtil.getString(R.string.backucking)); 
     } 

     @Override 
     protected Exception doInBackground(String... params) { 
      deleteFile(stPath); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Exception result) { 
      showProgressDialog(StringUtil.getString(R.string.downloading)); 
     } 
    } 

當我運行時,它拋出一個錯誤的java.lang。 NoClassDefFoundError錯誤。 Android無法找到java.io.File? 我不明白。你能爲我解釋一下嗎?

這是我的logcat:

java.lang.RuntimeException: An error occured while executing doInBackground() 

--------- Stack trace --------- 

    android.os.AsyncTask$3.done(AsyncTask.java:299) 
    java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
    java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
    java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
    java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
    java.lang.Thread.run(Thread.java:856) 
------------------------------- 

--------- Cause --------- 

java.lang.NoClassDefFoundError: mypakage/d/a/b/d 
    com.mypakage.util.b.e(MyUtil.java:210) 
    com.mypakage.view.main.f.a(OneView.java:1046) 
    com.mypakage.view.main.f.doInBackground(OneView.java:1) 
    android.os.AsyncTask$2.call(AsyncTask.java:287) 
    java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
    java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
    java.lang.Thread.run(Thread.java:856) 
------------------------------- 
+0

後,當您運行或編譯程序的堆棧跟蹤 – SpringLearner

+0

的NoClassDefFoundError意味着,編譯器無法找到它需要運行/編譯一個類文件,但它無法找到它,並因此產生錯誤(這可發生各種原因)。堆棧跟蹤NoClassDefFoundError:某些東西應該告訴你缺少的類。我發佈了我們可能能夠更好地瞭解可能的原因。 – Levenal

+0

添加你的deleteFile()方法 –

回答

0

唯一的例外是不是失蹤java.io.File,而是來自自己的包丟失類 通話 - mypakage.d.a.b.d

這當然不是你的一個類的名字。您的代碼似乎被混淆了,I.E.您(或您的IDE)在編譯的代碼上運行Proguard,然後將其安裝到設備上。

Proguard對您的代碼進行了很多更改。其中兩項相關更改爲:

  1. 更改類名(因此爲.d.a.b.d)。

  2. 刪除Proguard的感覺是一個死代碼,I.E.從未被調用過的代碼。

Proguard的錯誤配置可能導致您使用的類仍然被刪除。

所以請:

  1. 禁用ProGuard,並將嘗試沒有混淆其上運行的應用程序,這樣我們就可以驗證Proguard的的確是罪魁禍首。

  2. Use ReTrace to deobfuscatemypakage.d.a.b.d,所以你會知道失蹤班的真實姓名。

  3. 粘貼我們MyUtil.java第210行的內容。

  4. 粘貼Proguard的配置文件(proguard.conf)。

+0

感謝Vaiden。我會嘗試! – Hikaru

+0

如果適用,請報告解決方案並標記解決方案 – Vaiden