詳解android項(xiàng)目由Gradle 2.2 切換到 3.0的坑
問(wèn)題1、運(yùn)行的時(shí)候一直報(bào)如下錯(cuò)誤
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForApiTestDebug'.
> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
查了很多資料,大概意識(shí)是引用重復(fù)的庫(kù)或jar的問(wèn)題。
然后一遍一遍的檢查,發(fā)現(xiàn)并沒(méi)有引用重復(fù)的jar包。
最后考慮是不是第三方庫(kù)引用jar出現(xiàn)的問(wèn)題,然后就一個(gè)一個(gè)排查第三方庫(kù),最后發(fā)現(xiàn)我們用支付用的是
compile 'com.pingxx:pingpp-alipay:2.1.9' // 使用支付寶時(shí)添加
發(fā)現(xiàn)這個(gè)庫(kù)有些問(wèn)題,竟然在里面引用兩個(gè)版本的支付寶的jar包,果斷的換了最新版本,檢查了一個(gè)這次就引用了一個(gè)jar包。重新編譯了一下項(xiàng)目,運(yùn)行成功,問(wèn)題解決了。
特別注意:引用第三方庫(kù)在gralde3.0版本是更為嚴(yán)格,要特別注意。
問(wèn)題2、
AAPT2
AAPT2 將默認(rèn)啟用,如果遇到離奇的問(wèn)題,可以嘗試禁用,只要在 gradle.properties 中加入:
android.enableAapt2=false
其他:
應(yīng)用(app)目錄下build.gradle(下面 implementation "com.android.support:design:25.4.0" 切換為 project的統(tǒng)一配置)
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 25
buildToolsVersion "26.0.2"
defaultConfig {
multiDexEnabled true
applicationId "com.example"
minSdkVersion 21
targetSdkVersion 23
versionCode 1
versionName "1.0"
renderscriptTargetApi 23
renderscriptSupportModeEnabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {
quiet true
abortOnError false
ignoreWarnings true
disable 'InvalidPackage' //Some libraries have issues with this.
disable 'OldTargetApi'
//Lint gives this warning but SDK 20 would be Android L Beta.
disable 'IconDensities' //For testing purpose. This is safe to remove.
disable 'IconMissingDensityFolder' //For testing purpose. This is safe to remove.
}
dexOptions {
javaMaxHeapSize "8G"
}
packagingOptions {
exclude 'LICENSE.txt'
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/rxjava.properties'
}
sourceSets {
main.java.srcDirs += 'build/generated/source/apt'
}
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':library_api')
implementation project(':library_base')
implementation project(':library_blur_dialog')
implementation project(':library_countrycodepicker_dialog')
implementation project(':library_glow_decorator')
implementation project(':library_icons')
implementation project(':library_loopvideo')
implementation project(':library_section_adaper')
implementation project(':library_taptargetview')
implementation project(':library_ucrop')
implementation project(':library_utils')
implementation project(':library_utils_picasso')
implementation project(':library_vector_compat')
implementation project(':library_view_clock')
implementation project(':library_view_shimmer_recycler')
implementation "com.google.android.gms:play-services-cast-framework:11.4.2"
compileOnly 'com.google.android.wearable:wearable:2.0.3'
implementation 'com.google.android.support:wearable:2.0.3'
implementation 'com.google.android.exoplayer:exoplayer:r2.4.1'
implementation "com.android.support:mediarouter-v7:25.4.0"
implementation "com.android.support:leanback-v17:25.4.0"
implementation "com.android.support:design:25.4.0"
implementation "com.android.support:appcompat-v7:25.4.0"
implementation "com.android.support:support-v4:25.4.0"
implementation "com.android.support:gridlayout-v7:25.4.0"
implementation "com.android.support:cardview-v7:25.4.0"
implementation "com.android.support:recyclerview-v7:25.4.0"
implementation "com.android.support:preference-v14:25.4.0"
// rxjava
implementation 'io.reactivex:rxjava:1.2.9'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'com.github.davidmoten:rxjava-extras:0.8.0.6'
// square
implementation "com.squareup.retrofit2:retrofit:2.1.0",
implementation "com.squareup.retrofit2:converter-gson:2.1.0"
implementation "com.squareup.retrofit2:adapter-rxjava:2.1.0"
implementation "com.squareup.phrase:phrase:1.1.0"
implementation "com.squareup.okhttp3:okhttp:3.6.0"
implementation "com.squareup.okhttp3:logging-interceptor:3.6.0"
implementation "com.squareup.okhttp3:okhttp-urlconnection:3.6.0"
// picasso
implementation "com.squareup.picasso:picasso:2.5.2"
implementation 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'
// dagger
implementation "com.google.dagger:dagger:2.10"
annotationProcessor "com.google.dagger:dagger-compiler:2.10"
implementation "javax.annotation:jsr250-api:1.0"
implementation "javax.inject:javax.inject:1"
// jake ftw
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compileOnly 'org.projectlombok:lombok:1.16.16'
annotationProcessor 'org.projectlombok:lombok:1.16.16'
// FragmentWithArgs
implementation "com.hannesdorfmann.fragmentargs:annotation:3.0.2",
annotationProcessor "com.hannesdorfmann.fragmentargs:processor:3.0.2",
implementation "org.parceler:parceler-api:1.1.9",
annotationProcessor "org.parceler:parceler:1.1.9",
implementation 'com.hannesdorfmann.fragmentargs:bundler-parceler:3.0.2'
implementation "com.github.codekidX:storage-chooser:1.0.34"
implementation 'io.github.yavski:fab-speed-dial:1.0.6'
implementation('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
transitive = true;
}
// intent builder
implementation "com.github.marcinmoskala.activitystarter:activitystarter:1.00"
annotationProcessor "com.github.marcinmoskala.activitystarter:activitystarter-compiler:1.00"
implementation 'com.android.support.constraint:constraint-layout:1.0.2'//constraint-layout
implementation 'org.greenrobot:eventbus:3.0.0'
//font
implementation 'uk.co.chrisjenx:calligraphy:2.2.0'
implementation 'com.github.florent37:expectanim:1.0.6'
implementation 'com.romandanylyk:pageindicatorview:0.2.0@aar'
implementation 'com.github.rubensousa:gravitysnaphelper:1.2'
implementation 'com.flaviofaria:kenburnsview:1.0.7'
implementation 'com.github.florent37:arclayout:1.0.2'
implementation 'com.jakewharton.rxbinding:rxbinding:1.0.1'
implementation 'com.wang.avi:library:2.1.3'
implementation 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar'
implementation 'com.borax12.materialdaterangepicker:library:1.9'
implementation 'com.github.scottyab:showhidepasswordedittext:0.8'
//Location
implementation "com.google.android.gms:play-services-maps:11.4.2"
implementation 'pl.charmas.android:android-reactive-location:0.10@aar'
implementation "com.google.android.gms:play-services-location:11.4.2"
//you can use newer GMS version if you need
implementation "com.google.android.gms:play-services-places:11.4.2"
implementation 'com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar'
implementation 'commons-validator:commons-validator:1.4.1'
implementation 'com.balysv:material-ripple:1.0.2'
implementation 'com.googlecode.libphonenumber:libphonenumber:8.5.2'
implementation 'ru.egslava:MaskedEditText:1.0.5'
implementation 'com.futuremind.recyclerfastscroll:fastscroll:0.2.5'
implementation "com.google.firebase:firebase-core:11.4.2"
implementation 'com.labo.kaji:swipeawaydialog:0.1.1'
implementation 'io.supercharge:shimmerlayout:1.0.1'
implementation 'hanks.xyz:htextview-library:0.1.5'
implementation 'com.github.castorflex.smoothprogressbar:library:1.1.0'//progressbar for action bar
implementation 'io.reactivex:rxjava-math:1.0.0'
implementation 'jp.wasabeef:picasso-transformations:2.1.2'
implementation 'com.afollestad.material-dialogs:core:0.9.1.0'
implementation('com.github.ihsanbal:LoggingInterceptor:2.0.2') {
exclude group: 'org.json', module: 'json'
}
}
項(xiàng)目(project)目錄下build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven {
url 'https://maven.google.com/'
name 'Google'
}
jcenter()
// maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.meituan.android.walle:plugin:1.1.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
// maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url "https://jitpack.io" }
maven { url 'https://maven.google.com' }
maven { url "https://dl.google.com/dl/android/maven2/"}
jcenter()
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ext {
targetSdkVersion = 26
minSdkVersion = 14
compileSdk = 26
buildTools = "26.0.2"
junit = 'junit:junit:4.12'
recyclerview = 'com.android.support:recyclerview-v7:26.0.2'
appcompat = 'com.android.support:appcompat-v7:26.0.2'
design = 'com.android.support:design:26.0.2'
percent = 'com.android.support:percent:26.0.2'
glide = 'com.github.bumptech.glide:glide:3.7.0'
retrofit = 'com.squareup.retrofit:retrofit:1.9.0'
gson = 'com.google.code.gson:gson:2.8.0'
okhttp = 'com.squareup.okhttp3:okhttp:3.6.0'
// converterGson = 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
// converterJackson = 'com.squareup.retrofit:converter-jackson:1.9.0'
commonsio = 'commons-io:commons-io:2.4'
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android eclipse使用gradle打包的圖文教程
- 給Android初學(xué)者的Gradle知識(shí)普及
- 史上最全的Android build.gradle配置教程
- Android studio gradle環(huán)境變量配置教程
- 使用Android Studio Gradle實(shí)現(xiàn)友盟多渠道打包
- Android Studio 3.0 Gradle 配置變更
- android gradle如何修改生成的apk名字
- unity5.6 導(dǎo)出gradle工程 Android Studio 導(dǎo)入問(wèn)題及處理方法
- 詳解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅
- Android Studio 中的Gradle構(gòu)建系統(tǒng)示例
- Android Studio 3.0 gradle提示版本太老
- 優(yōu)化Gradle提升Gradle編譯速度
相關(guān)文章
在Android開(kāi)發(fā)中使用自定義組合控件的例子
這篇文章主要介紹了在Android開(kāi)發(fā)中使用自定義組合控件的例子,作者根據(jù)例子總結(jié)到了實(shí)現(xiàn)父類的構(gòu)造方法等基本要點(diǎn),具有一定參考價(jià)值,需要的朋友可以參考下2016-02-02
Android基于MLKit實(shí)現(xiàn)條形碼掃碼的代碼示例
這篇文章將借助開(kāi)源庫(kù)?MLKit?實(shí)現(xiàn)條形碼掃描,對(duì)于商品條形碼也可以很好地識(shí)別成功,該庫(kù)的使用內(nèi)容非常豐富,除了條碼識(shí)別,還有文字識(shí)別、圖像標(biāo)記、人臉檢測(cè)等等,本文篇文章就只介紹最基本的條形碼掃描使用,需要的朋友可以參考下2023-08-08
Android WebView使用方法詳解 附j(luò)s交互調(diào)用方法
這篇文章主要為大家詳細(xì)介紹了Android WebView使用方法詳解,文中附j(luò)s交互調(diào)用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
Android下錄制App操作生成Gif動(dòng)態(tài)圖的全過(guò)程
這篇文章主要為大家分享了Android下錄制App操作生成Gif動(dòng)態(tài)圖的全過(guò)程,感興趣的小伙伴們可以參考一下2016-01-01
Android中實(shí)現(xiàn)EditText密碼顯示隱藏的方法
這篇文章主要介紹了Android中實(shí)現(xiàn)EditText密碼顯示隱藏的方法,需要的朋友可以參考下2017-01-01
Android TextWatcher內(nèi)容監(jiān)聽(tīng)死循環(huán)案例詳解
這篇文章主要介紹了Android TextWatcher內(nèi)容監(jiān)聽(tīng)死循環(huán)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Android View滑動(dòng)的實(shí)現(xiàn)分析示例
View滑動(dòng)是Android實(shí)現(xiàn)自定義控件的基礎(chǔ),同時(shí)在開(kāi)發(fā)中難免會(huì)遇到View的滑動(dòng)處理,其實(shí)不管是那種滑動(dòng)方法,基本思路是類似的;當(dāng)點(diǎn)擊事件傳到View時(shí),系統(tǒng)記下觸摸點(diǎn)的坐標(biāo),手指移動(dòng)時(shí)系統(tǒng)記下移動(dòng)后的左邊并算出偏移量,通過(guò)偏移量來(lái)修改View的坐標(biāo)2022-08-08
Android中Activity生命周期和啟動(dòng)模式詳解
這篇文章主要介紹了Activity生命周期和啟動(dòng)模式詳解的相關(guān)資料,需要的朋友可以參考下2016-07-07
淺談android性能優(yōu)化之啟動(dòng)過(guò)程(冷啟動(dòng)和熱啟動(dòng))
本篇文章主要介紹了淺談android性能優(yōu)化之啟動(dòng)過(guò)程(冷啟動(dòng)和熱啟動(dòng)) ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-08-08

