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' } } module 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<mainpresenter, mainmodel> 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
android-apt是由一位开发者自己开发的apt框架,源代码托管在这里,随着android gradle 插件 2.2 版本的发布,android gradle 插件提供了名为 annotationprocessor 的功能来完全代替 android-apt ,自此android-apt 作者在官网发表声明最新的android gradle插件现在已经支持annotationprocessor,并警告和或阻止android-apt ,并推荐大家使用 android 官方插件annotationprocessor。
其他
新配置 | 对应的过时配置 | 描述 |
---|---|---|
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,希望对大家有所帮助
推荐阅读
-
Android Studio升级到3.0后遇到的坑
-
Android Studio 升级到3.0后输入法中文状态下无法选词的终极解决方案
-
Android studio初次安装启动时弹出unable to access android sdk add-on list提示的解决方法
-
升级到Android Studio3.0遇到的问题及解决方案
-
Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError的解决方法
-
Android Studio 提示“你的主机中的软件中止了一个已建立的连接”问题解决方法
-
Android studio初次安装启动时弹出unable to access android sdk add-on list提示的解决方法
-
升级到Android Studio3.0遇到的问题及解决方案
-
Android Studio 提示“你的主机中的软件中止了一个已建立的连接”问题解决方法
-
Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError的解决方法