當你拿到一個既有的專案,你會在 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