0

这是我的代码:

 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?? 我不明白。你能给我解释一下吗?

这是我的日志:

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

1 回答 1

0

例外不是关于丢失java.io.File,而是关于从您自己的包中调用丢失的类 - mypakage.d.a.b.d.

这当然不是您的课程之一的名称。您的代码似乎被混淆了,即您(或您的 IDE)在将其安装到设备上之前在已编译代码上运行 Proguard。

Proguard 会对您的代码进行大量更改。其中两个相关的变化是:

  1. 更改类名(因此是 .dabd)。

  2. 删除 Proguard 感觉是死代码,从未被调用过的 IE 代码。

Proguard 的错误配置可能会导致您使用的类仍然被删除。

所以,请:

  1. 禁用 Proguard 并尝试在不混淆的情况下运行应用程序,这样我们就可以验证 Proguard 确实是罪魁祸首。

  2. 使用 ReTrace 去混淆 mypakage.d.a.b.d,所以你会知道缺失类的真实名称。

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

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

于 2013-10-24T10:00:32.897 回答