【问题标题】:Jar library is not loaded DURING RUNTIME in Android Studio在 Android Studio 的运行时未加载 Jar 库
【发布时间】:2015-03-18 00:52:33
【问题描述】:

这太令人沮丧了...非常感谢任何帮助。

请不要以为我没有提到以前关于这个问题的帖子。我做了并尝试了这些帖子中提出的所有建议来解决这个问题几次,但无济于事,尽管其他人已经发布了它对他们有用。

这就是问题所在。

我添加了两个jar文件,它们是json-rpc2协议的实现。它们是从以下位置下载的。

http://software.dzhuvinov.com//download.html#download-jsonrpc2client

库文件是:

jsonrpc2-base-1.35.jar jsonrpc2-client-1.14.4.jar

我将它们添加到 libs 文件夹中,然后通过在工作室中右键单击它们来添加这些库。我在项目的 build.gradle 中添加了依赖项。我清理并构建了这个项目。请注意,库引用一直被编译器识别并且构建成功。现在问题来了......在编码和编译期间正确识别的相同库在运行时将不起作用。我收到以下 No Class Found 错误。请保留我头上剩余的头发。谢谢。

--------- beginning of crash

com.example.admin.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main
            Process: com.example.admin.myapplication, PID: 1877
            java.lang.NoClassDefFoundError: com.thetransactioncompany.jsonrpc2.JSONRPC2Request
                    at com.example.admin.myapplication.MainActivity.accessWebService(MainActivity.java:154)
                    at com.example.admin.myapplication.MainActivity$1.onClick(MainActivity.java:55)
                    at android.view.View.performClick(View.java:4756)
                    at android.view.View$PerformClick.run(View.java:19749)
                    at android.os.Handler.handleCallback(Handler.java:739)
                    at android.os.Handler.dispatchMessage(Handler.java:95)
                    at android.os.Looper.loop(Looper.java:135)
                    at android.app.ActivityThread.main(ActivityThread.java:5221)
                    at java.lang.reflect.Method.invoke(Native Method)
                    at java.lang.reflect.Method.invoke(Method.java:372)
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

下面是build.gradle文件的内容。

apply plugin: 'com.android.application'
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.admin.myapplication"
        minSdkVersion 5
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile files('libs/jsonrpc2-base-1.35.jar')
    compile files('libs/jsonrpc2-client-1.14.4.jar')
}

【问题讨论】:

  • 需要build.gradle文件内容。
  • 这里是 build.gradle 的内容:
  • 您是否验证了类 com.thetransactioncompany.jsonrpc2.JSONRPC2Request 在相关库中?这是你直接使用的类吗?
  • @mattm 当然,是的...我验证了 jar 文件的内容,并且所有必需的类都在其中。事实上,这就是编译没有错误的原因......你不觉得吗?
  • 我认为如果您在 jar 中使用 Class A,并且 Class A 需要另一个 jar 的 Class B,则可以进行无错误编译。但是,如果您使用的所有类都被验证在 ja​​r 中,那不是问题。

标签: android json jar android-studio


【解决方案1】:

@Jacky 感谢您提供分析我的代码。幸运的是,在我发布上一次回复和您发布后续报价之间,我煞费苦心地通过 Google 和 Stackoverflow 搜索并找到了解决方案。

需要对我上面发布的代码进行 3 次更新,以克服顽固的 NoClassDefFound 错误。

  1. 将“依赖项”脚本更改为以下内容:

    依赖{ 编译 fileTree(dir: 'libs', include: '*.jar')

关键区别,我认为是不起眼的“include”关键字。

  1. 在项目主目录的命令行中使用“gradlew clean”和“gradlew build”命令。

  2. 如果出现“lint”错误,请将以下代码添加到 build.gradle 中,然后重试第 2 步。

    lintOptions { 中止错误错误 }

当然,解决此问题的功劳归功于 Stackoverflow 之前的以下帖子:

android studio java.lang.NoClassDefFoundError:

gradle build fails on lint task

【讨论】:

    【解决方案2】:

    这个错误 java.lang.NoClassDefFoundError 不是 java.lang.ClassNotFoundException 因此它只发生在运行时,而不是像某些 cmets 怀疑的那样在构建时发生。

    主要原因可能是您的应用程序类路径已损坏。

    为简单起见,请使用 android studio 中的内置工具添加您的 jar 文件:

    1) 将jar文件放到libs目录下。

    2)文件>>项目结构...(或Ctrl+Alt+Shift+S)>>依赖项>>在库中添加两个jar文件>>确定

    【讨论】:

    • 在项目结构下,我检查了依赖项选项卡已经显示了所需的 jar 文件。正如您在上面的第 1 步和第 2 步中提到的那样,我不必在那里添加任何新内容......而且它们也用 lib/ 文件夹前缀指定......
    • 您介意将整个包裹压缩并发送给我吗?我试试看
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多