Android:java.lang.NoClassDefFoundError文件

时间:2013-10-23 10:47:09

标签: java android

这是我的代码:

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

1 个答案:

答案 0 :(得分:0)

例外不是缺少java.io.File,而是关于缺少类的调用 来自您自己的包 - mypakage.d.a.b.d

这当然不是您的某个课程的名称。您的代码似乎是混淆的,I.E。你是(或你的IDE)在编译代码上运行Proguard之前将其安装在设备上。

Proguard对您的代码执行了很多更改。其中两个相关变化是:

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

  2. 删除Proguard的感觉是一个死代码,I.E。从未被调用的代码。

  3. Proguard的错误配置可能导致您使用的课​​程被删除。

    所以请:

    1. 禁用Proguard并尝试运行应用程序而不会混淆它,因此我们可以验证Proguard确实是罪魁祸首。

    2. Use ReTrace to deobfuscate mypakage.d.a.b.d,因此您可以知道遗失班级的真实姓名。

    3. 粘贴我们MyUtil.java第210行的内容。

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