iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0

當你拿到一個既有的專案,你會在 build.gradle(Module :app) 檔案看到許多依賴項。

build.gradle(Module :app)

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'

    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    testImplementation 'junit:junit:4.13.2'

    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation "androidx.appcompat:appcompat-resources:1.3.1"
    implementation 'androidx.fragment:fragment-ktx:1.5.6'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'

    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
    implementation "androidx.recyclerview:recyclerview:1.2.1"
    implementation "androidx.recyclerview:recyclerview-selection:1.1.0"
    implementation "androidx.cardview:cardview:1.0.0"

    implementation 'com.android.databinding:viewbinding:7.0.3'

    implementation 'com.google.android.gms:play-services-vision:20.1.3'
    implementation 'com.google.android.gms:play-services-maps:17.0.1'
    implementation 'com.google.android.gms:play-services-location:18.0.0'

    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:26.3.0')
    // Recommended: Add the Firebase SDK for Google Analytics.
    implementation 'com.google.firebase:firebase-analytics'
    // Add the Firebase Crashlytics SDK.
    implementation 'com.google.firebase:firebase-crashlytics'
    // Declare the dependencies for the Remote Config and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-config'

    // 修復錯誤: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE
    implementation 'com.onesignal:OneSignal:4.6.2'

    implementation 'com.android.support:multidex:1.0.3'
    implementation 'androidx.multidex:multidex:2.0.1'
    implementation 'org.jsoup:jsoup:1.14.2'

    // 修復錯誤: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE
    // Java
    implementation 'androidx.work:work-runtime:2.7.1'
    // Kotlin
    implementation 'androidx.work:work-runtime-ktx:2.7.1'

    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'
    implementation 'com.google.code.gson:gson:2.8.8'
    implementation "com.squareup.retrofit2:retrofit:2.9.0"
    implementation "com.squareup.retrofit2:converter-gson:2.9.0"
    implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2'
    implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2'

    implementation 'com.github.bumptech.glide:glide:4.12.0'

    implementation 'com.loopj.android:android-async-http:1.4.11'
    implementation 'com.appsflyer:af-android-sdk:6.3.2'
    implementation 'io.github.youth5201314:banner:2.2.2'
    implementation 'com.github.pinball83:masked-edittext:1.0.4'
    implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
    // PDF viewer
    implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'
}

但專案是不是真的有全部使用到這些依賴項、是不是有必要用到這些依頼項,應該是可以定期檢視的。

這時可以優先看看以下這些依賴項,是否有可以刪減的地方。

  • 單元測試
  • 處理構建上限的 multidex
  • 可用原生依賴項取代的其他依賴項

單元測試

搜尋一些資料後,發現 junit:junit:4.13.2 已廢棄,遷移至 org.junit:junit-bom:5.10.0

因為目前沒時間撰寫單元測試,考慮依賴項已被棄用,索性直接將這個依賴項從專案中移除。

處理構建上限的 multidex

官文文件指出:

如果您應用程式的 minSdk 為 API 20 以下,而且該應用程式和其參照的程式庫使用超過 65,536 個方法,就會發生建構錯誤,這表示應用程式已達 Android 建構架構的上限。

注意:如果 minSdkVersion 設為 21 以上,系統會預設啟用 Multidex,而且您不需使用 Multidex 程式庫。
不過,若 minSdkVersion 設為 20 以下,您就必須使用 Multidex 程式庫,並對應用程式專案做出修改。

因為這個專案的 minSdkVersion = 23,所以我把全部的 Multidex 都刪除。也不用特別開啟 Multidex 功能。示例如下:

build.gradle(Module :app) 檔案

android {
    ...
    defaultConfig {
        applicationId "com.my.work"
        minSdk 29
        targetSdk 33
        ...
        testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
        // 只有在 minSdkVersion < 21 時,設置 multiDexEnabled = true 才需要引入以下 2 個依賴項
        // 'com.android.support:multidex:1.0.3'
        // 'androidx.multidex:multidex:2.0.1'
//        multiDexEnabled true
    }
}

可用原生依賴項取代的其他依賴項

TBD


上一篇
[Day 25] 查詢依賴項版本紀錄
下一篇
[Day 27] 依賴項的去蕪存菁 - 續
系列文
[Android] 怎麼蓋地基?論 build.gradle 與它的快樂夥伴們30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言