fat-aar-android icon indicating copy to clipboard operation
fat-aar-android copied to clipboard

Instrumented tests that launch an activity always crash

Open shavinda-rabichandran-cko opened this issue 4 years ago • 4 comments
trafficstars

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?

shavinda avatar Oct 24 '21 16:10 shavinda

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?

fafaldo avatar Nov 05 '21 12:11 fafaldo

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)

meavydev avatar Dec 11 '21 15:12 meavydev