Detailed explanation of the pit where android project switched from Gradle 2.2 to 3.0
- 2021-08-12 03:43:35
- OfStack
Problem 1. When running, 1 directly reports the following errors
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForApiTestDebug'.
> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
After checking a lot of information, I probably realized that it was a problem with referencing duplicate libraries or jar.
Then, after checking over and over again, it was found that there was no duplicate jar package referenced.
Finally, consider whether the third-party library references jar, and then check the third-party library one by one, and finally find that we use payment
compile 'com.pingxx:pingpp-alipay:2.1.9' // Add when using Alipay
Found that there are some problems in this library, and actually quoted two versions of Alipay's jar package, decisively changed the latest version, and checked one and quoted one jar package this time. The project under 1 was recompiled, and the operation was successful, and the problem was solved.
Special note: Reference to third-party libraries is more stringent in gralde 3.0 and should be paid special attention to.
Question 2,
AAPT2
AAPT2 will be enabled by default. If you encounter bizarre problems, you can try to disable it by adding:
android.enableAapt2=false
Others:
build. gradle under the application (app) directory (below implementation "com. android. support: design: 25.4.0" switches to the unified 1 configuration of project)
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'
}
}
build. gradle under the project (project) directory:
// 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'
}