Closed corbella83 closed 6 months ago
Hi @corbella83, thank you for reporting this!
To be honest, I am a little confused about this error. In case the installreferrer
library is not present in the project, the code should never reach line 72 of the InstallReferrerDetails.kt
file. It should stop at this condition on line 54 which checks for the presence of the InstallReferrerStateListener
class. Do you have any ideas how come that condition evaluates to true despite the library not being present?
Yes, I thought about that but indeed it reaches this line. I will download the library code and try to debug it to have more info. Also, I'll try to make a simple project that reproduces the crash
@matus-tomlein I have some news about this.
This happens when using an old version of installreferrer (1.0). When using this version, the condition on line 54 is letting the code pass through because really is included, but the function on line 72 was introduced in version 1.1 (according to the installreferrer changelog) and can't be found, throwing a NoSuchMethodError
That makes sense, thanks for investigating that! So we should detect the version of the package and only add that property if install referrer version 1.1 is used.
We're facing the same issue with an app using Facebook applinks which relies on InstallReferer 1.0
Is this still being implemented ?
Sorry for the delay! I've made a PR, this fix will be out in the next patch release, once one other bug report has been addressed
Describe the bug Currently The SnowPlow library is using this library as "compileOnly".
compileOnly "com.android.installreferrer:installreferrer:2.2"
compileOnly means that it's mandatory for the library, but is not shipped with the artifact. This currently means that the SnowPlow library cannot be used in a project that doesn't have the installreferrer. And currently makes a crash:
java.lang.NoSuchMethodError: No virtual method getGooglePlayInstantParam()Z in class Lcom/android/installreferrer/api/ReferrerDetails; or its super classes (declaration of 'com.android.installreferrer.api.ReferrerDetails' appears in /data/app/~~PHQ96RItx6M1UppnjKIAiQ==/com.inditex.zara-kj-XCASo7_iDxnet0B7pkw==/base.apk) at pj1.f.onInstallReferrerSetupFinished(InstallReferrerDetails.kt:88) at l8.a$a.onServiceConnected(InstallReferrerClientImpl.java:37) at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:2313) at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:2350) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:230) at android.os.Looper.loop(Looper.java:319) at android.app.ActivityThread.main(ActivityThread.java:8893) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
The crash happens in InstallReferrerDetails.kt line 72. There is a try/catch protecting it. But the catch is only handling RemoteException, while the system throws a NoSuchMethodError. NoSuchMethodError is not a subclass of RemoteException.
In order to allow using the library without installreferrer library, I would capture all possible exceptions (throwable: Throwable) in the try/catch.
To Reproduce Use the last version of SnowPlow library in a project that doesn't have installreferrer library. Then send some events.
Expected behavior Should not crash when the app using the SnowPlow library doesn't have the installreferrer library
Screenshots Not applicable
Device informatoin (please complete the following information):