Android Studio 升級到3.0 提示 java.lang.NoClassDefFoundError

來源:互聯網
上載者:User

標籤:ima   發布   原理   com   options   strong   http   tab   end   

Android Studio 升級到3.0 提示 java.lang.NoClassDefFoundError

這個問題折騰了2個小時,最後解決了,Stack Overflow 上也有一次類似的問題,但是沒有人提供解答。
這個錯誤的意思是運行時沒有找到類,所以一般是你編譯通過了但是無法運行。
寫完這個就去解答,希望更多的人看到並避免,節省大家的精力。

解決方案

首先把方法寫出來,起因和經過和原理寫在後面,時間倉促的直接看解決方案吧。

一般出現這個錯都是使用的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 Abuild.gralde 檔案中。

@FyberSDKpublic 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的坑了

當你遇到坑時可以參考:
官方的升級3.0指南
填坑系列Android Studio 3.0配置更改

Android Studio 升級到3.0 提示 java.lang.NoClassDefFoundError

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.