在Android Studio中的RUNTIME中未加载Jar库

时间:2015-03-18 00:52:33

标签: android json jar android-studio

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

请不要假设我没有提及此问题的先前帖子。我做过并尝试过在这些帖子中提出的所有建议多次解决这个问题,但无济于事,尽管其他人已发布它为他们工作。

这是问题所在。

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

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

库文件是:

jsonrpc2碱基1.35.jar jsonrpc2-客户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')
}

2 个答案:

答案 0 :(得分:1)

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

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

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

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

  2. 关键区别,我认为是不起眼的“包含”关键字。

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

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

      lintOptions {     abortOnError为false }

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

      android studio java.lang.NoClassDefFoundError:

      gradle build fails on lint task

答案 1 :(得分:0)

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

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

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

1)将jar文件放在libs目录中。

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