【问题标题】:NoClassDefFoundError after updating Gradle 2.1.0 to 2.2.1将 Gradle 2.1.0 更新到 2.2.1 后出现 NoClassDefFoundError
【发布时间】:2016-10-24 13:17:09
【问题描述】:

我的库是 aar 文件。将根 gradle 类路径 2.1.0 更改为 2.2.1 后,出现 NoClassDefFoundError 错误。

例如:我在我的 aar 库中创建了一个新类,之后我同步并且我的主应用程序看到了我的类,但是当我运行应用程序时,在运行时它给了我 NoClassDefFoundError。

Ps:更新后gradle下载的是2.14.1。

threadid=1: thread exiting with uncaught exception (group=0xa4ca8b20)
: java.lang.NoClassDefFoundError: com.gk.lib.ui.Utils
:     at com.example.activities.MainActivity.onCreate(MainActivity.java:78)
:     at android.app.Activity.performCreate(Activity.java:5231)
:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
:     at android.app.ActivityThread.access$800(ActivityThread.java:135)
:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
:     at android.os.Handler.dispatchMessage(Handler.java:102)
:     at android.os.Looper.loop(Looper.java:136)
:     at android.app.ActivityThread.main(ActivityThread.java:5001)
:     at java.lang.reflect.Method.invokeNative(Native Method)
:     at java.lang.reflect.Method.invoke(Method.java:515)
:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
:     at dalvik.system.NativeStart.main(Native Method)

在我的 MainActivity 类中,我使用这样的静态方法调用方法:

Utils.gkTestMethod();

我的 Utils 类:

import android.util.Log;

public class Utils {

    public static void gkTestMethod(){
        Log.v("Log","Log");
    }
}

不管我叫什么类。如果我创建新类,则会出现此错误。

谢谢。

【问题讨论】:

  • 添加完整的堆栈跟踪
  • 我更新了我的问题。你可以看到。@Jens
  • 你的 MainActivity.java 文件第 78 行有什么?
  • @AleksG 我添加了我的课程。
  • 这意味着编译器找不到类Utils

标签: android maven gradle android-gradle-plugin maven-plugin


【解决方案1】:

关于这个sn-p在主build.gradle:

dependencies {

    compile('com.gk.lib:common:1.0.0') {
        transitive = true
    }

    compile('com.gk.lib:ui:1.0.0') {
        transitive = true
        exclude module: 'common'
    }

    compile('com.gk.lib:components:1.0.0') {
        transitive = true
        exclude module: 'common'
        exclude module: 'ui'
    }

    // Other dependencies
}

似乎components 依赖于commonui,而ui 依赖于common。是否有充分的理由明确排除然后重新包含传递依赖项?我认为这应该可行:

dependencies {

    compile 'com.gk.lib:components:1.0.0'

    // Other dependencies
}

而且 IIRC common 不是可传递的。

【讨论】:

  • 我没有把编译调试和发布常见依赖。我改变了我的帖子,你可以看到新版本。我划分公共依赖项是因为我需要在调试或发布时包含一些 c 文件,这些文件是不同的。
  • @GörkemKaradoğan 请添加每个库的完整且未修改的build.gradle
  • 我改变了我的帖子,因为我说所有的图书馆 gradle 都是相似的。
【解决方案2】:

我不敢相信 multidex 支持解决了我的问题。为什么我以前不这么认为:/ 谢谢。

https://developer.android.com/studio/build/multidex.html

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 2016-03-11
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    相关资源
    最近更新 更多