AndroidStudio升级到3.0提示java.lang.NoClassDefFoundError错误怎么办

这篇文章主要介绍了Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError错误怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

创新互联建站专注于企业网络营销推广、网站重做改版、准格尔网站定制设计、自适应品牌网站建设、H5网站设计电子商务商城网站建设、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为准格尔等各大城市提供网站开发制作服务。

解决方法

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

一般出现这个错都是使用的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 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。

其他

新配置对应的过时配置描述
implementationcompilemodule编译时可用,module的使用者运行时可用,对于大量使用library的项目,可以显著提高编译时间,因为它可以减少构建系统重新编译一些module.大多数app/test因为使用这种配置
apicompilemodule编译时可用,module的使用者编译和运行时可用,这个和过时的compile一样的。一般是library模块会使用它,如果app模块一定要使用它,必须是在它想暴露api给test模块使用
compileOnlyprovidedmodule 编译时可用,但是module的使用者,在编译和运行时均不可用。跟过时的provided一样的。
runtimeOnlyapkmodule和它的使用者,运行时可用.它跟过时的apk是一样.

感谢你能够认真阅读完这篇文章,希望小编分享的“Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError错误怎么办”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


本文题目:AndroidStudio升级到3.0提示java.lang.NoClassDefFoundError错误怎么办
文章起源:http://scyanting.com/article/pdigio.html