プロジェクトから appnext SDK を削除しました。しかし、appnext install 紹介レシーバーを削除するのを忘れていました。このバージョンは、ビルドに失敗するはずだったにもかかわらず、エラーや警告なしで gradle ビルドに合格しました! (プロジェクトの一部ではなくなった SDK を参照したため)。私の質問は、ビルド時に Android Studio/Gradle が少なくともそれについて警告しなかったのはなぜですか?
私のマニフェストファイルからの関連するコードスニペットは次のとおりです。
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>
以下の例外スタック トレースも確認できます (少し遅すぎます :( ):
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)
上記の例外スタック トレースは、私には明確であり、非常に論理的です。結局、私は自分のプロジェクトからアプリの次のライブラリを削除しましたが、それは私が忘れていた残り物でした。なぜそれが起こったのですか? デフォルトの lint プロパティは変更していません。さらに、Android Studio でマニフェスト ファイルを開くと、"android:name="com.appnext.appnextsdk.ReferralReceiver" という行がエラーとしてマークされますが、プロジェクトをビルドすると、それについて警告することさえありません。