Issue
I'm developping android native applications and i have for them a library project containing all the common tools for these applications. I was importing my library with jfrog artifactory and it was working well ; now i want to use git and sub-module to have my library inside my project as a module to be able to work both on app and library at the same time. But now (in my projects containing two modules (app and library)), the build fails... I've tried a lot of things before to ask help here ... I think the problem comes from duplicated dependencies between the two modules because without the library submodule build is OK.
Here is the beginning of the stack trace :
C:\Users\sri\.gradle\caches\transforms-2\files-2.1\841047937c984e1ac263db2768d03619\jetified-objenesis-3.0.1.jar: D8: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)
Stack trace:
com.android.tools.r8.errors.a: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)
at com.android.tools.r8.errors.a.a(:7)
...........
//end
* What went wrong:
Execution failed for task ':app:dexBuilderDebug'.
> There was a failure while executing work items
> A failure occurred while executing com.android.build.gradle.internal.dexing.DexWorkAction
> Failed to process: C:\Users\sri\.gradle\caches\transforms-2\files-2.1\841047937c984e1ac263db2768d03619\jetified-objenesis-3.0.1.jar
1. Application build.gradle files
top-level :
buildscript {
ext.versions = [
'kotlin' : '1.4.0',
'powermock' : '2.0.7',
'constraintLayout' : '2.0.0',
'butterknife' : '10.2.3',
'jsonwebtoken' : '0.10.7',
'retrofit' : '2.9.0',
'supportLibrary' : '1.1.0',
'module' : '3.5.10',
'okhttp' : '4.8.1',
'mockito' : '3.3.3',
'lifecycleVersion' : '2.2.0',
'junit' : '4.13',
'eventBus' : '3.2.0',
'picasso' : '2.71828',
'swipeRefreshLayout': '1.1.0',
'cardView' : '1.0.0',
'viewPager' : '1.0.0',
'material' : '1.3.0-alpha02',
'rxjava' : '3.0.4',
'rxandroid' : '3.0.0',
'spoon' : '1.7.1'
]
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
classpath "io.realm:realm-gradle-plugin:7.0.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}"
classpath 'com.google.gms:google-services:4.3.3'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.2.0'
}
}
allprojects {
repositories {
jcenter()
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app-level :
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.firebase.crashlytics'
//.. signing removed ... //
android {
signingConfigs {
//........
}
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com......."
minSdkVersion 21
targetSdkVersion 29
versionCode 42
versionName versionProperties['versionName']
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk.abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
applicationIdSuffix ".debug"
versionNameSuffix '-debug'
}
}
lintOptions {
abortOnError false
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding true
dataBinding true
}
configurations {
all*.exclude group: 'xmlpull', module: 'xmlpull'
all*.exclude group: 'xpp3', module: 'xpp3_min'
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0-rc03', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation project(':mob-android-qualiacmodule:qualiac-module')
implementation "androidx.appcompat:appcompat:1.2.0"
implementation "com.google.android.material:material:${versions.material}"
implementation "androidx.constraintlayout:constraintlayout:${versions.constraintLayout}"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:${versions.swipeRefreshLayout}"
implementation "androidx.cardview:cardview:${versions.cardView}"
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'com.google.firebase:firebase-analytics:17.5.0'
implementation 'com.google.firebase:firebase-crashlytics:17.2.1'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.firebase:firebase-ml-vision:24.1.0'
implementation 'com.google.android.gms:play-services-vision-image-label:18.0.5'
implementation 'com.google.android.gms:play-services-vision-common:19.1.1'
implementation 'com.google.android.gms:play-services-vision:20.1.1'
kapt "com.jakewharton:butterknife-compiler:${versions.butterknife}"
implementation "com.jakewharton:butterknife:${versions.butterknife}"
implementation "com.squareup.retrofit2:retrofit:${versions.retrofit}"
implementation "com.squareup.retrofit2:converter-gson:${versions.retrofit}"
implementation "com.squareup.retrofit2:adapter-rxjava2:${versions.retrofit}"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${versions.kotlin}"
implementation "com.squareup.okhttp3:logging-interceptor:${versions.okhttp}"
implementation "com.squareup.okhttp3:mockwebserver:${versions.okhttp}"
implementation "com.squareup.okhttp3:okhttp:${versions.okhttp}"
implementation "org.greenrobot:eventbus:${versions.eventBus}"
implementation "io.reactivex.rxjava3:rxjava:${versions.rxjava}"
implementation "io.reactivex.rxjava3:rxandroid:${versions.rxandroid}"
implementation "com.squareup.picasso:picasso:${versions.picasso}"
implementation 'com.jakewharton.timber:timber:4.7.1'
implementation "androidx.core:core-ktx:1.3.1"
implementation "android.arch.lifecycle:extensions:1.1.1"
api 'com.google.guava:guava:29.0-jre'
implementation "androidx.viewpager2:viewpager2:${versions.viewPager}"
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${versions.lifecycleVersion}"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:${versions.lifecycleVersion}"
// alternately - if using Java8, use the following instead of lifecycle-compiler
implementation "androidx.lifecycle:lifecycle-common-java8:${versions.lifecycleVersion}"
testImplementation 'junit:junit:4.13'
androidTestImplementation "com.squareup.spoon:spoon-client:${versions.spoon}"
androidTestImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0-rc03'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.3.0-rc03'
}
kapt {
generateStubs = true
}
android.applicationVariants.all { variant ->
variant.outputs.all {
def appName = "jobs"
outputFileName = variant.name == "debug" ? "app-debug.apk" : "${appName}-${variant.name}-${variant.versionName}.apk"
}
}
apply plugin: 'com.google.gms.google-services'
2. Library build.gradle files
//top level
buildscript {
ext.versions = [
'kotlin' : '1.3.72',
......
]
repositories {
jcenter()
google()
mavenCentral()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:7.0.1"
classpath 'com.android.tools.build:gradle:4.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.android.support:support-v4:28.0.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}"
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.15.2"
}
}
allprojects {
repositories {
jcenter()
google()
mavenCentral()
maven {
url 'https://maven.fabric.io/public'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
//library level
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-android'
apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'
apply plugin: 'kotlin-android-extensions'
def libraryVersion = '3.5.10'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
ndk.abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
viewBinding {
enabled = true
}
dataBinding {
enabled = true
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0-rc03', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation "androidx.appcompat:appcompat:${versions.supportLibrary}"
implementation "com.google.android.material:material:${versions.material}"
implementation "androidx.constraintlayout:constraintlayout:${versions.constraintLayout}"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:${versions.swipeRefreshLayout}"
implementation 'com.google.firebase:firebase-ml-vision:24.0.3'
implementation 'com.google.android.gms:play-services-vision-image-label:18.0.5'
implementation 'com.google.android.gms:play-services-vision-common:19.1.1'
implementation 'com.google.android.gms:play-services-vision:20.1.1'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation "androidx.cardview:cardview:${versions.cardView}"
api 'com.google.firebase:firebase-core:17.4.4'
implementation "com.squareup.retrofit2:retrofit:${versions.retrofit}"
implementation "com.squareup.retrofit2:converter-gson:${versions.retrofit}"
implementation "com.squareup.retrofit2:adapter-rxjava2:${versions.retrofit}"
implementation "com.squareup.retrofit2:retrofit-mock:${versions.retrofit}"
implementation "org.greenrobot:eventbus:${versions.eventBus}"
api "com.squareup.okhttp3:logging-interceptor:${versions.okhttp}"
implementation "com.squareup.okhttp3:mockwebserver:${versions.okhttp}"
implementation "com.squareup.okhttp3:okhttp:${versions.okhttp}"
api "io.jsonwebtoken:jjwt-api:${versions.jsonwebtoken}"
runtimeOnly "io.jsonwebtoken:jjwt-impl:${versions.jsonwebtoken}"
runtimeOnly("io.jsonwebtoken:jjwt-orgjson:${versions.jsonwebtoken}") {
exclude group: 'org.json', module: 'json'
}
implementation "com.squareup.picasso:picasso:${versions.picasso}"
implementation "io.reactivex.rxjava3:rxjava:${versions.rxjava}"
implementation "io.reactivex.rxjava3:rxandroid:${versions.rxandroid}"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${versions.kotlin}"
implementation "androidx.core:core-ktx:1.3.1"
testImplementation "junit:junit:${versions.junit}"
implementation "org.powermock:powermock-module-junit4:${versions.powermock}"
implementation "org.powermock:powermock-module-junit4-rule:${versions.powermock}"
implementation "org.powermock:powermock-api-mockito2:${versions.powermock}"
implementation "org.powermock:powermock-classloading-xstream:${versions.powermock}"
testImplementation 'org.mockito:mockito-core:3.4.6'
implementation 'androidx.test:core:1.2.0'
implementation 'androidx.test.ext:junit:1.1.1'
implementation 'androidx.test:runner:1.2.0'
implementation 'androidx.test:rules:1.2.0'
implementation "androidx.test.espresso:espresso-core:${versions.espresso}"
implementation "androidx.test.espresso:espresso-contrib:${versions.espresso}"
implementation "com.squareup.spoon:spoon-client:${versions.spoon}"
implementation "androidx.viewpager2:viewpager2:${versions.viewPager}"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${versions.lifecycleVersion}"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:${versions.lifecycleVersion}"
// alternately - if using Java8, use the following instead of lifecycle-compiler
implementation "androidx.lifecycle:lifecycle-common-java8:${versions.lifecycleVersion}"
androidTestImplementation 'androidx.test:core:1.2.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
androidTestImplementation "androidx.test.espresso:espresso-contrib:${versions.espresso}"
api 'com.google.guava:guava:29.0-jre'
implementation "androidx.lifecycle:lifecycle-extensions:${versions.lifecycleVersion}"
}
Solution
I find a solution :
Using command gradlew :app:dependencies
i saw that the dependency which cause the problem ( org.objenesis:objenesis:2.6) was used by one of my dependency : org.powermock:powermock-api-mockito2:2.0.7. It's a dependency I only use one time for a test and moreover it could be replace by another one (that i already use) to do the same thing so I decided to remove this dependency and now it works good !
Conclusion : Use this command to identify which library is using the .jar that caused the problem and see if the library is really usefull for you or not.
gradlew :<yourmodule>:dependencies
Answered By - SebastienRieu
Answer Checked By - Candace Johnson (JavaFixing Volunteer)