我正在开发android原生应用程序,我有一个包含这些应用程序所有常用工具的库项目。我用jfrog artifactory导入了我的库,运行良好;现在我想使用git和子模块把我的库放在我的项目中作为一个模块以便能够同时在应用程序和库上工作。但是现在(在我的项目中包含两个模块(应用程序和库)),构建失败...我以前尝试过很多方法来请求帮助...我认为问题来自于两个模块之间的重复依赖关系,因为没有库子模块的构建是可以的。
以下是堆栈跟踪的开始:
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.应用程序构建.gradle文件
顶层:
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
}
应用程序级别:
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.库构建.gradle文件
//最上层
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
}
//库级
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}"
}
7条答案
按热度按时间wnvonmuf1#
我的解决方案是在build.gradle的末尾添加以下行
得益于https://github.com/mockito/mockito/issues/2007
mnemlml82#
如果使用mockk,则可能发生此错误。
如果是,更换:
androidTestImplementation group: 'io.mockk', name: 'mockk', version: mockk_version
签署人:
androidTestImplementation group: 'io.mockk', name: 'mockk-android', version: mockk_version
请访问https://github.com/mockk/mockk/issues/281#issuecomment-642176970
nszi6y053#
我找到了解决办法:
使用命令
gradlew :app:dependencies
,我发现导致问题的依赖项(org.objenesis:objenesis:2.6)被我的一个依赖项使用:org.powermock:powermock-api-mockito 2:2.0.7.这是一个依赖项,我只在测试中使用过一次,而且它可以被另一个(我已经使用过的)替代来做同样的事情,所以我决定删除这个依赖项,现在它工作得很好!结论:使用此命令确定哪个库正在使用导致问题的.jar,并查看该库是否确实对您有用。
8hhllhi24#
只需将新版本的objenesis添加到您的build.gradle文件
laik7k3q5#
错误消息
是由使用其中一种方法(
MethodHandle.invoke
或MethodHandle.invokeExact
)的输入程序引起的。下面的代码演示了这一点:
如果项目
minSdkLevel
为26或更高,则此代码将构建良好。不可能在MIN_SDK
级别检查下使用此类代码,因为Android代码需要仅Android O支持的DEX代码版本。您将需要解决哪些输入使用
MethodHandle
的问题,如下所示。请注意,在Android Studio中进行调试时,* 如果 * 受攻击的调试设备运行Android O或更高版本,则此代码将正常工作。这是由于Android Studio为调试构建注入了附加调试设备的API级别,覆盖了为项目配置的
minSdkLevel
。rbpvctlc6#
只需将Maven依赖项更改为最新,即可修复此错误!
wbrvyc0a7#
导入解糖库时,不要忘记使用
coreLibraryDesugaring
而不是implementation
:coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.0.0"