fat-aar-android
fat-aar-android copied to clipboard
Instrumented tests that launch an activity always crash
Describe the issue
When the fatAar plugin is applied to any library project that uses AGP 4.2.0 or higher, instrumented tests that launch an activity always crash with the error given below.
I have forked and updated the example project help reproduce this issue. See fork-branch here.
Execute ./gradlew :lib-main:connectedCheck or run MainActivityTest test to reproduce this issue.
Note that this issue occurs when the plugin is applied even if there are no embed statements used in the module. Simply > applying the plugin causes this issue.
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/R$drawable;
at androidx.appcompat.widget.AppCompatDrawableManager$1.<init>(AppCompatDrawableManager.java:63)
at androidx.appcompat.widget.AppCompatDrawableManager.preload(AppCompatDrawableManager.java:57)
at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:336)
at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:286)
at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:230)
at androidx.appcompat.app.AppCompatActivity.getDelegate(AppCompatActivity.java:554)
at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:107)
at android.app.Activity.attach(Activity.java:7962)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3709)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3939)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2373)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8147)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.appcompat.R$drawable" on path: DexPathList[[zip file "/data/app/com.kezong.demo.lib.test-viroOK0hWdu4v_5EeulGiA==/base.apk"],nativeLibraryDirectories=[/data/app/com.kezong.demo.lib.test-viroOK0hWdu4v_5EeulGiA==/lib/arm64, /system/lib64, /system/product/lib64, /hw_product/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 20 more
Build Environment
- Operating System: MacOS
- Gradle Plugin Version: 4.2.0 (Same issue with 7.0.0,7.0.1,7.0.2)
- Gradle Version: 6.7.1
- Fat-aar Version: 1.3.6
@shavinda
I have also tested with the change in PR-#341, it does not fix this issue.
@kezong Do you have any thoughts on this issue? This is a prevalent issue and can be reproduced using the sample projects.
Has anyone else reported the same? Or could this be a configuration issue on my part?
I can confirm something similar is happening for me. I have a very simple test project that shows the issue so I can share. For me it fails with:
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/test/library/R$string;
at com.test.library.TestClass.test(TestClass.kt:5)
at com.test.library.ExampleInstrumentedTest.problem(ExampleInstrumentedTest.kt:11)
... 27 trimmed
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.test.library.R$string" on path: DexPathList[[zip file "/system/framework/android.test.mock.jar", zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.test.library.test-JnCsvVfZ5Hb8N7LiwyMOGQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.test.library.test-JnCsvVfZ5Hb8N7LiwyMOGQ==/lib/x86_64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 30 more
So it appears to be a problem with resource files in general. Problem also disappears when 'apply' section is removed. I don't even use 'embed'.
Just try to reference some resource file in your library and trigger a test that uses this part of library code.
@kezong can you please comment on that?
A different error, but basically the same issue, as if we have the fat-aar plugin then our instrumented tests fail with:
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/R$string; at com.google.android.gms.common.internal.StringResourceValueReader.<init>(com.google.android.gms:play-services-basement@@18.0.0:3) at com.google.firebase.FirebaseOptions.fromResource(FirebaseOptions.java:156) at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:243) at com.google.firebase.provider.FirebaseInitProvider.onCreate(FirebaseInitProvider.java:51) at android.content.ContentProvider.attachInfo(ContentProvider.java:2404) at android.content.ContentProvider.attachInfo(ContentProvider.java:2374) at com.google.firebase.provider.FirebaseInitProvider.attachInfo(FirebaseInitProvider.java:45) at android.app.ActivityThread.installProvider(ActivityThread.java:7422) at android.app.ActivityThread.installContentProviders(ActivityThread.java:6939) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6710) at android.app.ActivityThread.access$1500(ActivityThread.java:247) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2053) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7839) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.R$string" on path: DexPathList[[zip file "/data/app/~~Ful_BxmE6kTn8mrygdebEA==/com.navenio.sdk.test-yEmsqk2pb4S_tMf19Fcmzg==/base.apk"],nativeLibraryDirectories=[/data/app/~~Ful_BxmE6kTn8mrygdebEA==/com.navenio.sdk.test-yEmsqk2pb4S_tMf19Fcmzg==/lib/arm64, /data/app/~~Ful_BxmE6kTn8mrygdebEA==/com.navenio.sdk.test-yEmsqk2pb4S_tMf19Fcmzg==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64, /product/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.google.android.gms.common.internal.StringResourceValueReader.<init>(com.google.android.gms:play-services-basement@@18.0.0:3) at com.google.firebase.FirebaseOptions.fromResource(FirebaseOptions.java:156) at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:243) at com.google.firebase.provider.FirebaseInitProvider.onCreate(FirebaseInitProvider.java:51) at android.content.ContentProvider.attachInfo(ContentProvider.java:2404) at android.content.ContentProvider.attachInfo(ContentProvider.java:2374) at com.google.firebase.provider.FirebaseInitProvider.attachInfo(FirebaseInitProvider.java:45) at android.app.ActivityThread.installProvider(ActivityThread.java:7422) at android.app.ActivityThread.installContentProviders(ActivityThread.java:6939) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6710) at android.app.ActivityThread.access$1500(ActivityThread.java:247) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2053) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7839) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)