中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android Gradle插件3.0的示例分析

發布時間:2021-08-11 10:22:16 來源:億速云 閱讀:149 作者:小新 欄目:移動開發

這篇文章主要為大家展示了“Android Gradle插件3.0的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Android Gradle插件3.0的示例分析”這篇文章吧。

為了提升編譯速度,這幾天用上了 AS 3.0 和 Gradle 3.0 插件,不得不說不論是 AS 3.0,還是 Gradle 3.0 都變化非常大,具體的更新日志參考下官網,其中 Gradle 3.0的配置和可能遇到的問題可以說是非常詳細了。

下面來列決下我遇到的坑和解決方法:

配置屬性的改動

Gradle 3.0 和之前有一點很大的不同就是配置屬性的變化,詳情可以參考上面列出的配置屬性鏈接,這里我再具體的把兩個關鍵字implementation和api解釋一下。這里我使用的插件版本為build:gradle:3.0.0-beta5

api

api你可以簡單的理解為之前的compile。舉個例子,你使用api在lib.A下的build.gradle引用一個本地lib包,這里假設名為lib.A,那么當lib.B有改動的時候,重新編譯不僅會編譯lib.B,還會編譯包括lib.A的所有通過api引用它的包。使用api進行引用,相當于把lib.B對外暴露了接口,這時候,假使有一個lib.C引用了lib.A,那么lib.C是可以直接使用lib.B的代碼的。簡單的畫個圖來解釋下。

Android Gradle插件3.0的示例分析

可以看到,通過api來引用實際上是和原來的compile一樣的,雖然可以讓lib.B的接口讓lib.C來使用,但當lib.B有代碼改動的時候,lib.A和lib.C都需要重新編譯,無疑編譯速度大大降低了。

implementation

如下圖所示。implementation 引用的 lib 不會對外暴露自己的接口,也就是說,當lib.A implementation lib.B,lib.C implementation lib.A 的時候,如果lib.B發生了改變,那么只有lib.A會重新編譯,lib.C將不會編譯!這將大大減少編譯時間。

Android Gradle插件3.0的示例分析

總而言之,更好的方式就是盡量使用implementation來進行依賴,這樣會大大改善工程的構建時間,除非你明確需要向外暴露當前 lib 依賴的接口時,才需要使用 api 依賴。

官方的 Maven 庫

之后很多官方庫的最新版本比如multidex等等,都會在官方的 Maven 庫中進行更新,所以,如果你需要引用這些最新版本的庫,你就需要配置官方的 Maven 地址

maven {
    url "https://maven.google.com"
}

如果你使用的是 4.0 版本以上的 gradle,那么可以直接使用 google() 來配置倉庫:

repositories {
  google()
}

一些報錯

1. Error:Could not get unknown property ‘apkVariantData' for object of type com.android.build.gradle.internal.api.ApplicationVariantImpl.

Gradle 3.0 的 api 有一些變化,所以如果你項目中引用了一些第三方 gradle 插件使用了一些舊的api,就會導致報錯,比如這里就是因為apkVariantData這個指令已經從 gradle 3.0 剔除了。

解決方法首先是看看你引用的包的最新版本有沒有適配3.0的。如果沒有,要么你去下載它的插件源碼,升級它的 gradle 插件到 3.0 ,再自己把過時的 api 換掉,要不就先暫時在項目中注釋掉相關插件代碼。

比如我這里就是因為AndResGuard使用了這個老 api 導致的報錯。

2. Error:The specified Android SDK Build Tools version (23.0.1) is ignored, as it is below the minimum supported version (25.0.0) for Android Gradle Plugin 3.0.0-beta5.Android SDK Build Tools 26.0.0 will be used.

Gradle 3.0 的最低支持 SDK Build Tools 版本為 25.0.0,所以如果你的項目中的 application 和 library 使用了比它低的版本,就會報這個錯誤。

3. Error:Removing unused resources requires unused code shrinking to be turned on. See http://d.android.com/r/tools/shrink-resources.html for more information.

官網的說明很清楚了:

資源壓縮只與代碼壓縮協同工作。代碼壓縮器移除所有未使用的代碼后,資源壓縮器便可確定應用仍然使用的資源。這在您添加包含資源的代碼庫時體現得尤為明顯 - 您必須移除未使用的庫代碼,使庫資源變為未引用資源,才能通過資源壓縮器將它們移除。

要啟用資源壓縮,請在 build.gradle 文件中將 shrinkResources 屬性設置為 true(在用于代碼壓縮的 minifyEnabled 旁邊)。例如:

android {
  ...
  buildTypes {
    release {
      shrinkResources true
      minifyEnabled true
      proguardFiles getDefaultProguardFile('proguard-android.txt'),
          'proguard-rules.pro'
    }
  }
}

加上這些代碼。問題即可解決。

4. Error:java.lang.RuntimeException: Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration.

這個問題是注解適配問題,新的 gradle 插件不再支持 annotation processors,如果需要使用需要顯式聲明:

defaultConfig{
  ...
  versionCode 1
  versionName 1.0
  javaCompileOptions {
      annotationProcessorOptions {
        includeCompileClasspath false
      }
    }
}

5.All flavors must now belong to named flavor dimension.

參考官網鏈接 : 官網解決鏈接

截個圖

Android Gradle插件3.0的示例分析

6. databinding

不僅需要

 dataBinding {
    enabled = true
 }

還需要

implementation 'com.android.databinding:library:1.3.1'
implementation 'com.android.databinding:adapters:1.3.1'

以上是“Android Gradle插件3.0的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沙河市| 栾川县| 英山县| 海阳市| 中西区| 读书| 宜昌市| 信阳市| 平阳县| 呼图壁县| 太康县| 乌拉特后旗| 泾阳县| 监利县| 关岭| 舒城县| 蕲春县| 田阳县| 玛沁县| 平谷区| 从江县| 富平县| 白水县| 呈贡县| 潞西市| 兴文县| 高尔夫| 同仁县| 海丰县| 偃师市| 交城县| 甘泉县| 宣城市| 泽普县| 通山县| 赞皇县| 昭通市| 永吉县| 巴青县| 河北省| 阿鲁科尔沁旗|