在模块(android库)中使用改型2.4.0时出现NoClassDefFoundError

在模块(android库)中使用改型2.4.0时出现NoClassDefFoundError,android,module,retrofit2,proguard,android-library,Android,Module,Retrofit2,Proguard,Android Library,一直在为一个项目在android库中使用改型。然而,如果在应用程序的gradle中配置,或者如果库的源是应用程序项目的一部分,那么一切似乎都可以正常工作 但是,如果库项目是预先准备好的,并且作为@aar包含在应用程序中。似乎有一个淫秽问题 以下是我在安卓模块项目中的改进计划: -dontwarn retrofit2.** -keep class retrofit2.** { *; } -keepattributes Exceptions -keepattributes RuntimeVisibl

一直在为一个项目在android库中使用改型。然而,如果在应用程序的gradle中配置,或者如果库的源是应用程序项目的一部分,那么一切似乎都可以正常工作

但是,如果库项目是预先准备好的,并且作为@aar包含在应用程序中。似乎有一个淫秽问题

以下是我在安卓模块项目中的改进计划:

-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Exceptions
-keepattributes RuntimeVisibleAnnotations
-keepattributes RuntimeInvisibleAnnotations
-keepattributes RuntimeVisibleParameterAnnotations
-keepattributes RuntimeInvisibleParameterAnnotations

-keepattributes EnclosingMethod
-keepclasseswithmembers class * {
    @retrofit2.http.* <methods>;
}
-keepclasseswithmembers interface * {
    @retrofit2.* <methods>;
}

# Platform calls Class.forName on types which do not exist on Android to determine platform.
-dontnote retrofit2.Platform
# Platform used when running on RoboVM on iOS. Will not be used at runtime.
-dontnote retrofit2.Platform$IOS$MainThreadExecutor
# Platform used when running on Java 8 VMs. Will not be used at runtime.
-dontwarn retrofit2.Platform$Java8
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain declared checked exceptions for use by a Proxy instance.
-keepattributes Exceptions

# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain service method parameters.
-keepclassmembernames,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}
# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

-keep public interface com.mylibrary.interfaces.**
-keep public class com.mylibrary.rest.RetrofitClientInstance
-keep public class com.mylibrary.models.** {*;}

-dontwarn org.xmlpull.v1.**
-dontwarn javax.annotation.**


### OkHttp3
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
我得到的错误是:

java.lang.NoClassDefFoundError: Failed resolution of: Lretrofit2/Retrofit$Builder;
        at com.mylibrary.rest.RetrofitClientInstance.getRetrofitInstance(RetrofitClientInstance.java:15)
        at com.mylibrary.rest.LoginAPIHelper.<init>(LoginAPIHelper.java:29)
        at com.mylibrary.rest.LoginAPIHelper.getInstance(LoginAPIHelper.java:36)
        at com.view.LoginActivity.onCreate(LoginActivity.java:124)
        at android.app.Activity.performCreate(Activity.java:6772)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2715)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2823)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6349)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "retrofit2.Retrofit$Builder" on path: DexPathList[[zip file "/data/app/com.inventaapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com.inventaapp-2/lib/arm, /data/app/com.inventaapp-2/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.mylibrary.rest.RetrofitClientInstance.getRetrofitInstance(RetrofitClientInstance.java:15) 
        at com.mylibrary.rest.LoginAPIHelper.<init>(LoginAPIHelper.java:29) 
        at com.mylibrary.rest.LoginAPIHelper.getInstance(LoginAPIHelper.java:36) 
        at com.inventaapp.view.LoginActivity.onCreate(LoginActivity.java:124) 
        at android.app.Activity.performCreate(Activity.java:6772) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2715) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2823) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6349) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 
非常感谢您的帮助

提前感谢,,
Arnab的问题在改型2.9.0中得到了修复,只需更新到最新版本。

我想问题在于,当aar在本地生成时,它没有将所有依赖项打包在其中。那是故意的! 您需要将aar发布到一个maven repo和一个pom文件,其中列出了所有依赖项,然后gradle可以获得所需的所有依赖项


快速解决方法是将此依赖项添加到主应用程序项目构建中。gradle在android库模块项目中使用改型时面临此问题。尝试了各种方法,下面的方法对我有效

步骤1:我在app和library modules build.gradle文件中添加并更新了改装依赖项(2.9.0)

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.7.1'
implementation 'com.squareup.okhttp3:logging-interceptor:4.8.0'
步骤2:在应用程序的渐变中添加

compileOptions {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}

步骤3:使缓存无效并重新启动/清理构建和重建。

检查此答案Hi@Thunder谢谢,但我提到我已经尝试过了。没有帮助,据我所说,在android库中使用改型时,这似乎是一种特殊情况。但是,不知道如何在不将其重新导入应用程序的gradle下解决它。您是否使用此实现'com.squareup.Refught2:Refught2.3.0'是的,是在2.3.0上。目前正在2.4.0实现'com.squareup.Reformation2:Reformation:2.4.0'清理并重建您的项目,并让我进一步了解。链接到一些支持此备份的文档会更好谢谢您为我工作。我很久以前就面临这个问题了。我只在lib模块中添加了依赖项,它正在工作。
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.7.1'
implementation 'com.squareup.okhttp3:logging-interceptor:4.8.0'
compileOptions {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}