Android Studio 中的运行时未加载 Jar 库

Jar library is not loaded DURING RUNTIME in Android Studio

这真是令人沮丧...非常感谢任何帮助。

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

问题来了。

我添加了两个 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.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')
}

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

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

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

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

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

@Jacky 感谢您愿意分析我的代码。幸运的是,在我发布上次回复和您发布后续报价之间,我煞费苦心地浏览了 Google 和 Whosebug 搜索热潮并找到了解决方案。

我上面发布的代码需要 3 次更新才能克服顽固的 NoClassDefFound 错误。

  1. 将 "dependencies" 脚本更改为以下内容:

    依赖项{ 编译文件树(目录:'libs',包括:'*.jar')

关键的区别,我相信是谦逊的"include"关键字。

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

  2. 如果出现 "lint" 错误,请将以下代码添加到 build.gradle 并重试第 2 步。

    lint选项{ abortOnError 错误 }

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

android studio java.lang.NoClassDefFoundError:

gradle build fails on lint task