I have removed the appnext SDK from my project. However, I forgot to remove the appnext install referral receiver. The version passed gradle build without any error or warning even though it should have failed the build! (Since I referenced an SDK that was no longer part of the project). My question is why Android Studio/Gradle didn't at least warned me about it at build time?
Here is the relevant code snippet from my manifest file:
The AppsFlyer Install Receiver is first and will broadcast to all receivers placed below it.
Although the library provides additional services, if you use ProGuard as part of your build process,
it has a light footprint. We only use the ads packages from Google Services.
If you want to optimize the size of your project you can exclude any other packages.
For more details see: https://support.appsflyer.com/hc/en-us/articles/207032126-AppsFlyer-SDK-Integration-Android
-->
<receiver
android:name="com.appsflyer.MultipleInstallBroadcastReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<!-- appnext install referral receiver -->
<receiver
android:name="com.appnext.appnextsdk.ReferralReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
You can also see the exception stack trace below (just a bit too late :( ):
Fatal Exception: java.lang.RuntimeException: Unable to instantiate receiver com.appnext.appnextsdk.ReferralReceiver: java.lang.ClassNotFoundException: Didn't find class "com.appnext.appnextsdk.ReferralReceiver" on path: DexPathList[[zip file "/data/app/com.infibond.infi-1/base.apk"],nativeLibraryDirectories=[/data/app/com.infibond.infi-1/lib/arm, /vendor/lib, /system/lib]]
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2992)
at android.app.ActivityThread.access$1800(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1507)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5910)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
Caused by java.lang.ClassNotFoundException: Didn't find class "com.appnext.appnextsdk.ReferralReceiver" on path: DexPathList[[zip file "/data/app/com.infibond.infi-1/base.apk"],nativeLibraryDirectories=[/data/app/com.infibond.infi-1/lib/arm, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2987)
at android.app.ActivityThread.access$1800(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1507)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5910)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
The exception stack trace above is clear to me and very logical. After all I have removed the app next library from my project and that was a left over I forgot. Why it happened is not my question, my question is why the Android Studio would let me compile & build my project without raising a single warning in the gradle console? I have not changed any default lint properties. Moreover, When I open the manifest file now Android Studio, would mark the line "android:name="com.appnext.appnextsdk.ReferralReceiver" as an error. But when I built the project is will not even warn me about that.