Android Studio3.1.0升級問題記錄

來源:互聯網
上載者:User

標籤:pos   pac   ora   httpdns   family   neu   dup   miss   移除   

 

每次升級Android Studio時,一般情況下Gradle版本的也會相應的升級,我之前Android Studio 3.0.1、Gradle 是4.1升級後為:Android Studio 3.1.0、Gradle 為4.4。

升級完成後先是報一堆錯(每次都升級都是-。-)

第一個錯如下:
The SourceSet ‘instrumentTest‘ is not recognized by the Android Gradle Plugin. Perhaps you misspelled something?

翻譯過來就是:

“SourceSet” 的‘instrumentTest‘ 沒有被Android Gradle外掛程式識別。也許你拼錯嗎?

猜想可能Gradle移除了‘instrumentTest‘關鍵字,網上搜了一下,部落格地址如下:http://www.it1352.com/139247.html

新版本Gradle對其做了重新命名

即:

 舊版本 - > 新版本

instrumentTestCompile - > androidTestCompile

instrumentTest - > androidTest

然後查看了自己所有module的Gradle,發現有一個地方用到了 instrumentTest ,將其改為 androidTest ,然後繼續同步Gradle,然後編譯,這個錯誤不報了。

第二個錯誤如下:
Configuration ‘compile‘ is obsolete and has been replaced with ‘implementation‘.
It will be removed at the end of 2018

翻譯過來就是:

配置“編譯”已經過時,取而代之的是“實現”。它將在2018年底被移除。

我們知道,在Android Studio3.0開始的時候就將 compile 改為 implementation 關鍵字了,當時,項目中大部分的compile改為了implementation,但是還有一部分沒有改過來,但是仍然可以使用,但是現在呢?尼瑪直接給編譯就報錯!這不是強制性的讓使用 implementation 嗎?報的錯中提示2018年底才移除,這還沒到年底呢,就不能用了?

還是乖乖的改吧,由於是我們的依賴的library中使用了compile,相當於是library依賴了一個第三方庫,直接改為implementation就相當於屏蔽掉了app對library依賴的第三方庫api的存取權限,而我們的app剛好用到了library依賴的第三方庫的api,所以直接改為implementation是不行的,要想讓app能訪問到就將其改為 api就可以了,其實這不是一個好的解決辦法,最好的解決辦法是,library中封裝一層app訪問library依賴的第三方庫api的方法,這樣的話app是和library依賴的第三方庫是沒有任何關係的,這樣就降低了app與library依賴的第三方庫的耦合性,這樣也體現了“第三方庫隔離”的原則,如果以後依賴的庫變了,你只需要修改library中依賴的庫及app調用的方法即可,不用動app裡面的代碼了~

第三個錯誤如下
Duplicate zip entry [com/c/a/a/a/a.class == 69.jar:com/ta/utdid2/b/a/a.class]

翻譯過來如下:

重複的類,即類所在的包名和類名都相等

一般情況下不會寫包名和類名相同的類,我猜測一定是Jar包重了,仔細找了一下,發現兩個library中都使用了
阿里的httpdns的jar包,只不過是Jar包的版本不一樣,舊版本中其中一個library中使用了 provided 編譯,所以沒有報衝突,現在新版本推薦使用 compileOnly 關鍵字,替換為compileOnly關鍵字後還是報一樣的錯,哎呦!這就納悶了,compileOnly的意思不就是編譯時間依賴,不打緊包中的意思嗎?怎麼還衝突?仔細尋找了一下,發現其中一個library中多了一個混淆規則的jar包(utdid4all-1.1.5.3_proguard.jar),而另外一個沒有,但是舊版本是沒有問題的,我猜測可能是編譯混淆後發現兩個類是一樣的所以就報錯了…

解決辦法一:

兩個library中都添加 utdid4all-1.1.5.3_proguard.jar 使用 compileOnly 關鍵字編譯;

解決辦法二:

兩個library中都不添加 utdid4all-1.1.5.3_proguard.jar

解決辦法三:

在app中添加一個 utdid4all-1.1.5.3_proguard.jar 進行編譯即可;

至此,以上幾個錯誤都解決完了~

總結

我們應該理解implementation、api、compileOnly等幾個關鍵字的區別,具體見:

這裡寫圖片描述

最後附上幾個參考連結:

https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph

https://stackoverflow.com/questions/44413952/gradle-implementation-vs-api-configuration

Android Studio3.1.0升級問題記錄

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.