Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError的解决方法

网友投稿 410 2023-03-09


Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError的解决方法

解决方法

首先把方法写出来,起因和经过和原理写在后面,时间仓促的直接看解决方法吧。

一般出现这个错都是使用的provided导致的

例如,我的旧配置如下:

Project build.gradle文件:

buildscript {

dependencies {

classpath 'com.android.tools.build:gradle:3.0.1'

// need delete in gradle3.x version

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

}

}

Module build.gradle文件:

apply plugin: 'com.android.library'

apply plugin: 'android-apt'

android {

// ...

}

configurations {

provided

}

dependencies {

// ...

// Fyber Annotations

provided 'com.fyber:fyber-annotations:1.3.0'

apt 'com.fyber:fyber-annotations-compiler:1.4.0'

// ...

}

改为最新的build.gradle3.x 的配置:

Project build.gradle文件:

buildscript {

dependencies {

classpath 'com.android.tools.build:gradle:3.0.1'

}

}

ModuPUdXswYUuXle build.gradle文件:

apply plugin: 'com.android.library'

android {

// ...

// add this code to enable annotationProcessor

javaCompileOptions {

annotationProcessorOptions {

includeCompileClasspath = true

}

}

}

dependencies {

// ...

// Fyber Annotations

compileOnly 'com.fyber:fyber-annotations:1.3.0'

annotationProcessor 'com.fyber:fyber-annotations-compiler:1.4.0'

// ...

}

更改完以上配置在build Project后即可成功运行了。如果不能请往下看:

注意事项:

上面的Module build.gralde的配置必须写在使用注解所在的 Module 中!

例如我在 Module A中的 MainActivity 使用了 @FyberSDK的注解,那么我将上述配置写在Module A的build.gralde 文件中。

@FyberSDK

public class MainActivity extends BaseActivity implements

IBannerDelegate, IMainView,

View.OnClickListener {

//....

}

补充相关知识

关于 apt 的介绍

1、什么是APT?

APT(Annotation Processing Tool)是一种处理注释的工具,它对源代码文件进行检测找出其中的Annotation,根据注释自动生成代码。Annotation处理器在出来Annotation时可以根据源文件中的Annotation生成额外的源文件和其它的文件(文件具体内容由Annotation处理器的编写者决定),APT还会编译生成的源文件和原来的源文件,将它们一起生成class文件。

2、annotationProcessor

annotationProcessor是APT工具中的一种,他是google开发的内置框架,不需要引入,可以直接在build.gradle文件中使用

3、android-apt

其他

新配置

对应的过时配置

描述

implementation

compile

module编译时可用,module的使用者运行时可用,对于大量使用library的项目,可以显著提高编译时间,因为它可以减少构建系统重新编译一些module.大多数app/test因为使用这种配置

api

compile

module编译时可用,module的使用者编译和运行时可用,这个和过时的compile一样的。一般是library模块会使用它,如果app模块一定要使用它,必须是在它想暴露api给test模块使用

compileOnly

provided

module 编译时可用,但是module的使用者,在编译和运行时均不可用。跟过时的provided一样的。

runtimeOnly

apk

module和它的使用者,运行时可用.它跟过时的apk是一样.

总结

以上所述是给大家介绍的Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:api接口文档有谁写的(api接口技术)
下一篇:如何设计接口测试用例的(如何设计接口测试用例的模板)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~