【问题标题】:No Class Def Found error android project to upload picturesNo Class Def Found错误android项目上传图片
【发布时间】:2015-06-29 01:34:17
【问题描述】:

我正在关注this tutorial 并进行了一些修改。我按照类中的说明进行操作,它的继承名为AndroidMultiPartEntity extends MultipartEntity

我添加了以下jar文件:

  • mime4j
  • httpclient-android-4.3.3
  • httpcore
  • httpmime

其中一些罐子是出于绝望而添加的,以消除错误,但我仍然在我的 logcat 中收到此错误:

由 java.lang.NoClassDefFoundError: package_name.AndroidMultiPartEntity 引起

logcat 的输出:

06-29 01:25:05.720: E/AndroidRuntime(1770): FATAL EXCEPTION: AsyncTask #2
06-29 01:25:05.720: E/AndroidRuntime(1770): java.lang.RuntimeException: An error occured while executing doInBackground()
06-29 01:25:05.720: E/AndroidRuntime(1770):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at java.lang.Thread.run(Thread.java:856)
06-29 01:25:05.720: E/AndroidRuntime(1770): Caused by: java.lang.NoClassDefFoundError: com.inc.automata.malawiscenery.util.AndroidMultiPartEntity
06-29 01:25:05.720: E/AndroidRuntime(1770):     at com.inc.automata.malawiscenery.UploadPictureActivity$UploadToServer.uploadFile(UploadPictureActivity.java:390)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at com.inc.automata.malawiscenery.UploadPictureActivity$UploadToServer.doInBackground(UploadPictureActivity.java:359)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at com.inc.automata.malawiscenery.UploadPictureActivity$UploadToServer.doInBackground(UploadPictureActivity.java:1)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-29 01:25:05.720: E/AndroidRuntime(1770):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

谁能帮我确定我做错了什么? UPDATE 来自 .classpath 文件的信息:
<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/> <classpathentry exported="true" kind="lib" path="libs/volley.jar"/> <classpathentry exported="true" kind="lib" path="libs/gson-2.2.4.jar"/> <classpathentry exported="true" kind="lib" path="libs/metadata-extractor-2.6.4.jar"/> <classpathentry exported="true" kind="lib" path="libs/android-support-v4.jar"/> <classpathentry kind="lib" path="libs/httpmime-4.1.1.jar"/> <classpathentry kind="lib" path="libs/httpclient-android-4.3.3.jar"/> <classpathentry kind="lib" path="libs/httpcore-4.0.1.jar"/> <classpathentry kind="lib" path="libs/mime4j-0.2.jar"/> <classpathentry kind="src" path="src"/> <classpathentry kind="src" path="gen"/> <classpathentry kind="output" path="bin/classes"/> </classpath>

【问题讨论】:

  • 如果您使用的是 Eclipse,请显示您的 .classpath,如果您使用的是 Studio,请显示 build.gradle
  • 添加了@HarishSridharan。这些文件的具体用途是什么?
  • .classpath 文件负责您的 ant 编译器,以提供有关您项目的整体信息。编译器在编译时使用这些信息来获取此处定义的源文件和依赖项。只有标记为exported=true 的库将与您的apk 一起打包,而其他引用将仅在编译时由编译器使用,编译器将假定这些库(未标记为exported=true)将由提供默认的 android 系统或运行时任何来自源的系统,并且不会与您的 apk 一起打包。

标签: java android eclipse


【解决方案1】:

为所有新添加的库添加exported="true",如下所示。您的应用程序只有对这些库的编译引用,但在运行时不可用,因为您没有将其标记为 exported=true。因此,这些库在运行时将不可用,从而导致您出现 NoClassDefFoundError。

<?xml version="1.0" encoding="UTF-8"?>
    <classpath>
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
        <classpathentry exported="true" kind="lib" path="libs/volley.jar"/>
        <classpathentry exported="true" kind="lib" path="libs/gson-2.2.4.jar"/>
        <classpathentry exported="true" kind="lib" path="libs/metadata-extractor-2.6.4.jar"/>
        <classpathentry exported="true" kind="lib" path="libs/android-support-v4.jar"/>
        <classpathentry exported="true" kind="lib" path="libs/httpmime-4.1.1.jar"/>
        <classpathentry exported="true" kind="lib" path="libs/httpclient-android-4.3.3.jar"/>
        <classpathentry exported="true" kind="lib" path="libs/httpcore-4.0.1.jar"/>
        <classpathentry exported="true" kind="lib" path="libs/mime4j-0.2.jar"/>
        <classpathentry kind="src" path="src"/>
        <classpathentry kind="src" path="gen"/>
        <classpathentry kind="output" path="bin/classes"/>
    </classpath>

【讨论】:

    猜你喜欢
    • 2023-01-15
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    相关资源
    最近更新 更多