Android Studio 升級(jí)到3.0 提示 java.lang.NoClassDefFoundError的解決方法
解決方法
首先把方法寫出來,起因和經(jīng)過和原理寫在后面,時(shí)間倉促的直接看解決方法吧。
一般出現(xiàn)這個(gè)錯(cuò)都是使用的provided導(dǎo)致的
例如,我的舊配置如下:
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后即可成功運(yùn)行了。如果不能請往下看:
注意事項(xiàng):
上面的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 {
//....
}
補(bǔ)充相關(guān)知識(shí)
關(guān)于 apt 的介紹
1、什么是APT?
APT(Annotation Processing Tool)是一種處理注釋的工具,它對(duì)源代碼文件進(jìn)行檢測找出其中的Annotation,根據(jù)注釋自動(dòng)生成代碼。Annotation處理器在出來Annotation時(shí)可以根據(jù)源文件中的Annotation生成額外的源文件和其它的文件(文件具體內(nèi)容由Annotation處理器的編寫者決定),APT還會(huì)編譯生成的源文件和原來的源文件,將它們一起生成class文件。
2、annotationProcessor
annotationProcessor是APT工具中的一種,他是google開發(fā)的內(nèi)置框架,不需要引入,可以直接在build.gradle文件中使用
3、android-apt
android-apt是由一位開發(fā)者自己開發(fā)的apt框架,源代碼托管在這里,隨著Android Gradle 插件 2.2 版本的發(fā)布,Android Gradle 插件提供了名為 annotationProcessor 的功能來完全代替 android-apt ,自此android-apt 作者在官網(wǎng)發(fā)表聲明最新的Android Gradle插件現(xiàn)在已經(jīng)支持annotationProcessor,并警告和或阻止android-apt ,并推薦大家使用 Android 官方插件annotationProcessor。
其他
| 新配置 | 對(duì)應(yīng)的過時(shí)配置 | 描述 |
|---|---|---|
| implementation | compile | module編譯時(shí)可用,module的使用者運(yùn)行時(shí)可用,對(duì)于大量使用library的項(xiàng)目,可以顯著提高編譯時(shí)間,因?yàn)樗梢詼p少構(gòu)建系統(tǒng)重新編譯一些module.大多數(shù)app/test因?yàn)槭褂眠@種配置 |
| api | compile | module編譯時(shí)可用,module的使用者編譯和運(yùn)行時(shí)可用,這個(gè)和過時(shí)的compile一樣的。一般是library模塊會(huì)使用它,如果app模塊一定要使用它,必須是在它想暴露api給test模塊使用 |
| compileOnly | provided | module 編譯時(shí)可用,但是module的使用者,在編譯和運(yùn)行時(shí)均不可用。跟過時(shí)的provided一樣的。 |
| runtimeOnly | apk | module和它的使用者,運(yùn)行時(shí)可用.它跟過時(shí)的apk是一樣. |
總結(jié)
以上所述是小編給大家介紹的Android Studio 升級(jí)到3.0 提示 java.lang.NoClassDefFoundError,希望對(duì)大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 解決java.lang.NoClassDefFoundError錯(cuò)誤的問題
- java.lang.NoClassDefFoundError錯(cuò)誤的原因及解決方法
- maven引入本地jar包運(yùn)行報(bào)錯(cuò)java.lang.NoClassDefFoundError解決
- 解決java.lang.NoClassDefFoundError: android.support.v4.animation.AnimatorCompatHelper問題
- SpringBoot異常: nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext解決方案
- 解決java.lang.NoClassDefFoundError:lombok/Data報(bào)錯(cuò)問題
相關(guān)文章
Android集成GreenDao數(shù)據(jù)庫的操作步驟
這篇文章主要介紹了Android集成GreenDao數(shù)據(jù)庫,使用數(shù)據(jù)庫存儲(chǔ)時(shí)候,一般都會(huì)使用一些第三方ORM框架,比如GreenDao,本文分幾步給大家介紹Android集成GreenDao數(shù)據(jù)庫的方法,需要的朋友可以參考下2022-10-10
Android開發(fā)實(shí)現(xiàn)按鈕點(diǎn)擊切換背景并修改文字顏色的方法
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)按鈕點(diǎn)擊切換背景并修改文字顏色的方法,涉及Android界面布局與相關(guān)屬性設(shè)置技巧,需要的朋友可以參考下2018-01-01
Android擴(kuò)大View點(diǎn)擊區(qū)域方案示例
這篇文章主要為大家介紹了Android擴(kuò)大View點(diǎn)擊區(qū)域方案示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Android ListView隱藏右側(cè)滾動(dòng)條功能
這篇文章主要介紹了Android ListView隱藏右側(cè)滾動(dòng)條功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
Android中使用TabHost 與 Fragment 制作頁面切換效果
這篇文章主要介紹了Android中使用TabHost 與 Fragment 制作頁面切換效果的相關(guān)資料,需要的朋友可以參考下2016-03-03
C/C++在Java、Android和Objective-C三大平臺(tái)下實(shí)現(xiàn)混合編程
本文主要介紹C/C++在Java、Android和Objective-C三大平臺(tái)下實(shí)現(xiàn)混合編程,這里舉例說明實(shí)現(xiàn)不同平臺(tái)用C/C++實(shí)現(xiàn)編程的方法,有興趣的小伙伴可以參考下2016-08-08
android Launcher3設(shè)置默認(rèn)桌面應(yīng)用
這篇文章主要為大家詳細(xì)介紹了android Launcher3設(shè)置默認(rèn)桌面應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07

