您好,登錄后才能下訂單哦!
這篇文章主要介紹Android Gradle依賴管理、去除重復依賴、忽略的方式有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Android是一種基于Linux內核的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由美國Google公司和開放手機聯盟領導及開發。
常用依賴
//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
補充知識:Gradle依賴的統一管理,解決依賴沖突
看見別人在用implementation rootProject.ext.dependencies["xxxx"]不知道是什么意思,上網查了一下,原來是為了解決或者說預防gradle依賴沖突的問題。
在項目開發中我們會經常引入多個Module,然而每個Module中又包含了V4、V7,為了升級新版本依賴包只用更改一次,我們決定采用Gradle依賴的統一管理,避免重復繁瑣的勞動。
記錄get到的新知識,用法如下:
1.在Project目錄下新建config.gradle文件,文件名可自定義
具體內容如下:
ext { android = [ compileSdkVersion : 27, buildToolsVersion : "27.0.0", minSdkVersion : 21, targetSdkVersion : 27, versionCode : 6, versionName : "1.2.2", renderscriptTargetApi : 21 ] version = [ supportLibraryVersion : "26.1.1", okhttpVersion : "3.9.0", retrofitVersion : "2.3.0", glideVersion : "4.0.0", butterknifeVersion : "8.8.1", fragmentationVersion : "1.1.9", ] dependencies = [ //base "appcompat-v7" : "com.android.support:appcompat-v7:${version["supportLibraryVersion"]}", "cardview-v7" : "com.android.support:cardview-v7:${version["supportLibraryVersion"]}", "design" : "com.android.support:design:${version["supportLibraryVersion"]}", "constraint-layout" : "com.android.support.constraint:constraint-layout:1.0.2", //net "gson" : "com.google.code.gson:gson:2.8.2", "okhttp" : "com.squareup.okhttp3:okhttp:${version["okhttpVersion"]}", "logging-interceptor" : "com.squareup.okhttp3:logging-interceptor:${version["okhttpVersion"]}", "retrofit" : "com.squareup.retrofit2:retrofit:${version["retrofitVersion"]}", "converter-gson" : "com.squareup.retrofit2:converter-gson:${version["retrofitVersion"]}", "adapter-rxjava2" : "com.squareup.retrofit2:adapter-rxjava2:${version["retrofitVersion"]}", //dao "greendao" : "org.greenrobot:greendao:3.2.2", //rx "rxjava" : "io.reactivex.rxjava2:rxjava:2.1.5", "rxandroid" : "io.reactivex.rxjava2:rxandroid:2.0.1", "rxbinding" : "com.jakewharton.rxbinding2:rxbinding:2.1.0", "rxpermissions" : "com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar", //di "javax_annotation" : "org.glassfish:javax.annotation:10.0-b28", "butterknife" : "com.jakewharton:butterknife:${version["butterknifeVersion"]}", "butterknife-compiler" : "com.jakewharton:butterknife-compiler:${version["butterknifeVersion"]}", //multidex "multidex" : "com.android.support:multidex:1.0.3", //kotlin "kotlin-stdlib" : "org.jetbrains.kotlin:kotlin-stdlib:1.2.10", //ui test "espresso-core" : "com.android.support.test.espresso:espresso-core:3.0.2", "espresso-idling-resource" : "com.android.support.test.espresso:espresso-idling-resource:3.0.2", //unit test , 為了整合mockito和PowerMockito,mockito暫時最高只支持2.8.9 "junit" : "junit:junit:4.12", "mockito" : "org.mockito:mockito-core:2.8.9", "powermock-module-junit4" : "org.powermock:powermock-module-junit4:1.7.4" ] }
2.在Project的build.gradle中添加
apply from: "config.gradle"
3.在modle的build.gradle中添加引用
apply plugin: 'com.android.application' android { compileSdkVersion rootProject.ext.android["compileSdkVersion"] buildToolsVersion rootProject.ext.android["buildToolsVersion"] defaultConfig { applicationId "json.chao.com.wanandroid" minSdkVersion rootProject.ext.android["minSdkVersion"] targetSdkVersion rootProject.ext.android["targetSdkVersion"] versionCode rootProject.ext.android["versionCode"] versionName rootProject.ext.android["versionName"] //AndroidJunitRunner必須要顯示指定在defaultConfig中,使用Gradle依賴管理無法使其生效 testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' renderscriptTargetApi rootProject.ext.android["renderscriptTargetApi"] renderscriptSupportModeEnabled true // Enable RS support multiDexEnabled true vectorDrawables.useSupportLibrary = true } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //base implementation rootProject.ext.dependencies["appcompat-v7"] implementation rootProject.ext.dependencies["cardview-v7"] implementation rootProject.ext.dependencies["design"] implementation rootProject.ext.dependencies["constraint-layout"] //net implementation rootProject.ext.dependencies["gson"] implementation rootProject.ext.dependencies["okhttp"] implementation rootProject.ext.dependencies["retrofit"] implementation rootProject.ext.dependencies["converter-gson"] implementation rootProject.ext.dependencies["adapter-rxjava2"] //dao implementation rootProject.ext.dependencies["greendao"] //rx implementation rootProject.ext.dependencies["rxjava"] implementation rootProject.ext.dependencies["rxandroid"] implementation rootProject.ext.dependencies["rxbinding"] implementation rootProject.ext.dependencies["rxpermissions"] //UI測試 androidTestImplementation (rootProject.ext.dependencies["espresso-core"]) { exclude group: 'com.android.support', module: 'support-annotations' } implementation (rootProject.ext.dependencies["espresso-idling-resource"]) { exclude module: 'support-annotations' } }
以上是“Android Gradle依賴管理、去除重復依賴、忽略的方式有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。