1. 程式人生 > >Android Gradle依賴管理、去除重複依賴、忽略

Android Gradle依賴管理、去除重複依賴、忽略

  • 常用依賴
	//1.直接依賴第三方開源庫,一般是託管在 jitpack 或者 jcenter
	implementation 'com.google.code.gson:gson:2.2.4'
	implementation 'com.android.support:cardview-v7:25.0.0'
	implementation 'com.android.support:design:25.0.0'
	//2.直接依賴本地的aar檔案,一般是在libs目錄下
	implementation(name: 'LiteAVSDK_Professional_5.1.5293', ext: 'aar')
	//3.直接依賴本地的jar檔案
	 implementation files('libs/bdasr_V3_20170801_60da871.jar')
	//4.依賴本地的model
	implementation project(':wavelibrary')
	implementation project(':android-ffmpeg')

  • 庫工程依賴傳遞問題

1、依賴常用的基本型別有:provided和compile,provided 只在編譯生效不會打包到 apk 或 aar 中;compile 是會打包到 apk或 aar 中的(如果是庫工程的話有特殊情況,參考下面3).
2、app 工程的當前(compile+) 的依賴都會打包到 app 中
3、庫工程中:
  1) jar 包:遠端依賴不會打包到 aar 中;本地依賴會;
  2) aar:遠端和本地都不不會打包到 aar中.
  3) 如果你要提供你的庫工程的 aar 給他人,你需要同時告訴他這個庫工程依賴的其他aar 和遠端 jar包(因為他們沒有打包到 aar 中)
  4) 如果通過工程依賴(即compile project(’:lib’)的方式), 依賴是可以傳遞的,所以不需要在宣告一次依賴.

  • 去掉重複依賴

1.第三方庫中同樣使用了implementation或者compile依賴相同的庫

    implementation('com.allenliu.versionchecklib:library:2.0.5') {
        exclude group: 'com.android.support', module: 'appcompat-v7'
        exclude group: 'com.android.support.constraint', module: 'constraint-layout'
        exclude group: 'org.greenrobot', module: 'eventbus'
        exclude group: 'com.squareup.okhttp3', module: 'okhttp'
    }

2.在不同的庫中出現相同的so檔案
pickFirst只會打包第一個遇到的衝突的so,merge(碰到衝突會合並)和exclude(直接排除匹配到的檔案,不建議使用)

 packagingOptions {
            pickFirst 'lib/arm64-v8a/libgnustl_shared.so'
            pickFirst 'lib/armeabi-v7a/libgnustl_shared.so'
        }

遇到這種錯誤可以通過上面方法嘗試解決
Error:Execution failed for task ‘:app:transformNativeLibsWithMergeJniLibsForDebug’. > More than one