From 34b3ff429c084524b76d8e0faa5d0a33435315a3 Mon Sep 17 00:00:00 2001 From: Shashank Suhane Date: Thu, 14 Nov 2019 14:36:35 +0100 Subject: [PATCH 1/5] Fixed extra unbind service calls causing exception --- .../sdk/oaid/OpenDeviceIdentifierClient.java | 9 +++++++++ .../sdk/oaid/OpenDeviceIdentifierConnector.java | 14 +++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierClient.java b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierClient.java index 81f4f0514..1f7b82ea3 100644 --- a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierClient.java +++ b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierClient.java @@ -71,6 +71,9 @@ private synchronized Info getOaidInfo() OpenDeviceIdentifierService service = serviceConnector.getOpenDeviceIdentifierService(maxWaitTime, TimeUnit.MILLISECONDS); if (service == null) { + // since service bind fails due to any reason (even timeout), its reasonable to + // unbind it rather than keeping it open + serviceConnector.unbindAndReset(); return null; } @@ -92,11 +95,17 @@ private OpenDeviceIdentifierConnector getServiceConnector(Context context) { boolean couldBind = false; try { + // letting the connector know that it should unbind in all possible failure cases + // also it should attempt to unbind only once after each bind attempt + connector.shouldUnbind(); + couldBind = context.bindService(intentForOaidService, connector, Context.BIND_AUTO_CREATE); if (couldBind) { return connector; } + } catch(Exception e) { + logger.error("Fail to bind service %s", e.getMessage()); } finally { if (!couldBind) { connector.unbindAndReset(); diff --git a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java index 8a8eaa2d3..314d1f05e 100644 --- a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java +++ b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java @@ -18,6 +18,7 @@ public class OpenDeviceIdentifierConnector implements ServiceConnection, IBinder private BlockingQueue binders = null; private Context context; private ILogger logger; + private boolean shouldUnbind = false; private OpenDeviceIdentifierConnector(Context context, ILogger logger) { binders = new LinkedBlockingQueue(1); @@ -91,10 +92,21 @@ public void binderDied() { } public void unbindAndReset() { - context.unbindService(this); + if (shouldUnbind) { + try { + shouldUnbind = false; + context.unbindService(this); + } catch (Exception e) { + logger.error("Fail to unbind %s", e.getMessage()); + } + } reset(); } + public void shouldUnbind() { + shouldUnbind = true; + } + private void reset() { synchronized (lockObject) { binders.clear(); From 82fc3a2a067ab2cd86f4e88b46edef0052ea76c1 Mon Sep 17 00:00:00 2001 From: Shashank Suhane Date: Thu, 14 Nov 2019 16:57:49 +0100 Subject: [PATCH 2/5] Add catching exception for each that gets called from service callback methods --- .../oaid/OpenDeviceIdentifierConnector.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java index 314d1f05e..33824a359 100644 --- a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java +++ b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java @@ -95,12 +95,12 @@ public void unbindAndReset() { if (shouldUnbind) { try { shouldUnbind = false; + reset(); context.unbindService(this); } catch (Exception e) { logger.error("Fail to unbind %s", e.getMessage()); } } - reset(); } public void shouldUnbind() { @@ -108,15 +108,23 @@ public void shouldUnbind() { } private void reset() { - synchronized (lockObject) { - binders.clear(); + try { + synchronized (lockObject) { + binders.clear(); + } + } catch (Exception e) { + logger.debug("Fail to reset queue %s", e.getMessage()); } } private void set(IBinder service) { - synchronized (lockObject) { - binders.clear(); - binders.add(service); + try { + synchronized (lockObject) { + binders.clear(); + binders.add(service); + } + } catch (Exception e) { + logger.debug("Fail to add in queue %s", e.getMessage()); } } } From b495ad749b9e8aef087daa064c53df99177de3f2 Mon Sep 17 00:00:00 2001 From: nonelse Date: Fri, 15 Nov 2019 10:41:16 +0100 Subject: [PATCH 3/5] Syncronize access to unbindAndReset --- .../java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java index 33824a359..5887fde5d 100644 --- a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java +++ b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/OpenDeviceIdentifierConnector.java @@ -91,7 +91,7 @@ public void binderDied() { unbindAndReset(); } - public void unbindAndReset() { + public synchronized void unbindAndReset() { if (shouldUnbind) { try { shouldUnbind = false; From c903ac8170827d9c3fbd3f892767369fd18bf964 Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 15 Nov 2019 11:12:20 +0100 Subject: [PATCH 4/5] New version 4.18.4 --- Adjust/build.gradle | 2 +- Adjust/example-app-java/build.gradle | 2 +- Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java | 2 +- Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java | 2 +- Adjust/sdk-plugin-criteo/build.gradle | 2 +- Adjust/sdk-plugin-imei/build.gradle | 2 +- Adjust/sdk-plugin-oaid/build.gradle | 2 +- Adjust/sdk-plugin-sociomantic/build.gradle | 2 +- Adjust/sdk-plugin-trademob/build.gradle | 2 +- Adjust/sdk-plugin-webbridge/build.gradle | 2 +- Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js | 2 +- .../androidTest/java/com/adjust/sdk/TestActivityPackage.java | 2 +- README.md | 4 ++-- VERSION | 2 +- doc/chinese/README.md | 4 ++-- doc/chinese/plugins/oaid.md | 4 ++-- doc/english/plugins/oaid.md | 4 ++-- doc/japanese/README.md | 4 ++-- doc/japanese/plugins/oaid.md | 4 ++-- doc/korean/README.md | 4 ++-- 20 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Adjust/build.gradle b/Adjust/build.gradle index d8337c551..4c5c0369c 100644 --- a/Adjust/build.gradle +++ b/Adjust/build.gradle @@ -9,7 +9,7 @@ ext { coreMinSdkVersion = 9 coreCompileSdkVersion = 28 coreTargetSdkVersion = 28 - coreVersionName = '4.18.3' //append -SNAPSHOT for snapshot version + coreVersionName = '4.18.4' //append -SNAPSHOT for snapshot version defaultVersionCode = 1 // POM. diff --git a/Adjust/example-app-java/build.gradle b/Adjust/example-app-java/build.gradle index 584103570..261f56e59 100644 --- a/Adjust/example-app-java/build.gradle +++ b/Adjust/example-app-java/build.gradle @@ -33,7 +33,7 @@ dependencies { // implementation project(':plugin-imei') // implementation project(":plugin-play") // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.18.3' + // implementation 'com.adjust.sdk:adjust-android:4.18.4' debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2' diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java index f4bc2f7f0..1a909f4b7 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java @@ -32,7 +32,7 @@ private Adjust() { */ public static synchronized AdjustInstance getDefaultInstance() { @SuppressWarnings("unused") - String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.18.3"; + String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.18.4"; if (defaultInstance == null) { defaultInstance = new AdjustInstance(); diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java index 2fda0fccb..3c0b5c3ed 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java @@ -30,7 +30,7 @@ public interface Constants { String GDPR_URL = "https://gdpr.adjust.com"; String SCHEME = "https"; String AUTHORITY = "app.adjust.com"; - String CLIENT_SDK = "android4.18.3"; + String CLIENT_SDK = "android4.18.4"; String LOGTAG = "Adjust"; String REFTAG = "reftag"; String INSTALL_REFERRER = "install_referrer"; diff --git a/Adjust/sdk-plugin-criteo/build.gradle b/Adjust/sdk-plugin-criteo/build.gradle index 296a88713..67b952a3d 100644 --- a/Adjust/sdk-plugin-criteo/build.gradle +++ b/Adjust/sdk-plugin-criteo/build.gradle @@ -25,7 +25,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.18.3' + // implementation 'com.adjust.sdk:adjust-android:4.18.4' } task adjustCriteoAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-imei/build.gradle b/Adjust/sdk-plugin-imei/build.gradle index d17e14e2e..96b513db0 100644 --- a/Adjust/sdk-plugin-imei/build.gradle +++ b/Adjust/sdk-plugin-imei/build.gradle @@ -24,7 +24,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.18.3' + // implementation 'com.adjust.sdk:adjust-android:4.18.4' } task adjustImeiAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-oaid/build.gradle b/Adjust/sdk-plugin-oaid/build.gradle index 3a3036b5f..e1e3afd4b 100644 --- a/Adjust/sdk-plugin-oaid/build.gradle +++ b/Adjust/sdk-plugin-oaid/build.gradle @@ -24,7 +24,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.18.3' + // implementation 'com.adjust.sdk:adjust-android:4.18.4' } task adjustOaidAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-sociomantic/build.gradle b/Adjust/sdk-plugin-sociomantic/build.gradle index 65e31c111..bd3223c3d 100644 --- a/Adjust/sdk-plugin-sociomantic/build.gradle +++ b/Adjust/sdk-plugin-sociomantic/build.gradle @@ -24,7 +24,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.18.3' + // implementation 'com.adjust.sdk:adjust-android:4.18.4' } task adjustSociomanticAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-trademob/build.gradle b/Adjust/sdk-plugin-trademob/build.gradle index d7fb797b1..84d54fda0 100644 --- a/Adjust/sdk-plugin-trademob/build.gradle +++ b/Adjust/sdk-plugin-trademob/build.gradle @@ -24,7 +24,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.18.3' + // implementation 'com.adjust.sdk:adjust-android:4.18.4' } task adjustTrademobAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-webbridge/build.gradle b/Adjust/sdk-plugin-webbridge/build.gradle index 76a3676d3..a38b1d0dd 100644 --- a/Adjust/sdk-plugin-webbridge/build.gradle +++ b/Adjust/sdk-plugin-webbridge/build.gradle @@ -24,7 +24,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.18.3' + // implementation 'com.adjust.sdk:adjust-android:4.18.4' } task adjustWebBridgeAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js b/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js index 4a917e6ed..3fd440b56 100644 --- a/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js +++ b/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js @@ -187,7 +187,7 @@ var Adjust = { if (this.adjustConfig) { return this.adjustConfig.getSdkPrefix(); } else { - return 'web-bridge4.18.3'; + return 'web-bridge4.18.4'; } }, diff --git a/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java b/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java index ab55b7446..416cae871 100644 --- a/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java +++ b/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java @@ -53,7 +53,7 @@ public TestActivityPackage(ActivityPackage activityPackage) { // default values appToken = "123456789012"; environment = "sandbox"; - clientSdk = "android4.18.3"; + clientSdk = "android4.18.4"; suffix = ""; attribution = new AdjustAttribution(); playServices = true; diff --git a/README.md b/README.md index 0a9568562..a1b918be0 100644 --- a/README.md +++ b/README.md @@ -96,14 +96,14 @@ These are the minimum required steps to integrate the Adjust SDK in your Android If you are using Maven, add the following to your `build.gradle` file: ```gradle -implementation 'com.adjust.sdk:adjust-android:4.18.3' +implementation 'com.adjust.sdk:adjust-android:4.18.4' implementation 'com.android.installreferrer:installreferrer:1.0' ``` If you would prefer to use the Adjust SDK inside web views in your app, please include this additional dependency as well: ```gradle -implementation 'com.adjust.sdk:adjust-android-webbridge:4.18.3' +implementation 'com.adjust.sdk:adjust-android-webbridge:4.18.4' ``` You can also add the Adjust SDK and web view extension as JAR files, which can be downloaded from our [releases page][releases]. diff --git a/VERSION b/VERSION index aa8271559..df66f9557 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.18.3 +4.18.4 diff --git a/doc/chinese/README.md b/doc/chinese/README.md index bc768ebee..39fe45786 100644 --- a/doc/chinese/README.md +++ b/doc/chinese/README.md @@ -95,14 +95,14 @@ Read this in other languages: [English][en-readme], [中文][zh-readme], [日本 如果您正在使用Maven,请添加下行至您的`build.gradle`文件: ```gradle -implementation 'com.adjust.sdk:adjust-android:4.18.3' +implementation 'com.adjust.sdk:adjust-android:4.18.4' implementation 'com.android.installreferrer:installreferrer:1.0' ``` 如果您希望在应用的web view中使用Adjust SDK,请同时包含以下附加依赖项: ```gradle -implementation 'com.adjust.sdk:adjust-android-webbridge:4.18.3' +implementation 'com.adjust.sdk:adjust-android-webbridge:4.18.4' ``` 您还可以将Adjust SDK和web view扩展名作为JAR文件来添加,这可从我们的[发布页面][releases]中下载。 diff --git a/doc/chinese/plugins/oaid.md b/doc/chinese/plugins/oaid.md index ab9793acd..5147a419b 100644 --- a/doc/chinese/plugins/oaid.md +++ b/doc/chinese/plugins/oaid.md @@ -13,8 +13,8 @@ OAID 插件支持 Adjust 安卓 SDK 读取设备的 OAID 值 *以及*其默认 如果您使用的是 Maven,请将以下 OAID 插件依赖项添加到现有 Adjust SDK 依赖项旁的 `build.gradle` 文件: ``` -implementation 'com.adjust.sdk:adjust-android:4.18.3' -implementation 'com.adjust.sdk:adjust-android-oaid:4.18.3' +implementation 'com.adjust.sdk:adjust-android:4.18.4' +implementation 'com.adjust.sdk:adjust-android-oaid:4.18.4' ``` 您还可以将 Adjust OAID 插件作为 JAR 文件进行添加,该文件可从我们的 [版本页面][releases] 下载。 diff --git a/doc/english/plugins/oaid.md b/doc/english/plugins/oaid.md index 83900b70d..0e5729df3 100644 --- a/doc/english/plugins/oaid.md +++ b/doc/english/plugins/oaid.md @@ -13,8 +13,8 @@ To enable the Adjust SDK to collect and track OAID, follow these steps. If you are using Maven, add the following OAID plugin dependency to your `build.gradle` file next to the existing Adjust SDK dependency: ``` -implementation 'com.adjust.sdk:adjust-android:4.18.3' -implementation 'com.adjust.sdk:adjust-android-oaid:4.18.3' +implementation 'com.adjust.sdk:adjust-android:4.18.4' +implementation 'com.adjust.sdk:adjust-android-oaid:4.18.4' ``` You can also add the Adjust OAID plugin as JAR file, which you can download from our [releases page][releases]. diff --git a/doc/japanese/README.md b/doc/japanese/README.md index bbbb438bd..28eee4e51 100644 --- a/doc/japanese/README.md +++ b/doc/japanese/README.md @@ -93,14 +93,14 @@ Adjust SDKをAndroidプロジェクトに実装する手順を説明します。 Mavenを使用している場合は、以下の内容を`build.gradle`ファイルに追加します。file: ```gradle -implementation 'com.adjust.sdk:adjust-android:4.18.3' +implementation 'com.adjust.sdk:adjust-android:4.18.4' implementation 'com.android.installreferrer:installreferrer:1.0' ``` アプリの WebView内で Adjust SDK を使用したい場合は、以下のdependencyを追加してください。 ```gradle -implementation 'com.adjust.sdk:adjust-android-webbridge:4.18.3' +implementation 'com.adjust.sdk:adjust-android-webbridge:4.18.4' ``` Adjust SDK およびWebView拡張機能をJAR ファイルとして追加し、Adjust [リリースページ][releases]からダウンロードすることもできます。 diff --git a/doc/japanese/plugins/oaid.md b/doc/japanese/plugins/oaid.md index 58bba4123..b83b15f56 100644 --- a/doc/japanese/plugins/oaid.md +++ b/doc/japanese/plugins/oaid.md @@ -13,8 +13,8 @@ Adjust SDKがOAIDを収集、および計測できるようにするために、 Mavenを使用している場合は、以下のOAIDプラグイン dependencyを、既存のAdjust SDKのdependencyの隣にあるbuild.gradle` file に追加します: ``` -implementation 'com.adjust.sdk:adjust-android:4.18.3' -implementation 'com.adjust.sdk:adjust-android-oaid:4.18.3' +implementation 'com.adjust.sdk:adjust-android:4.18.4' +implementation 'com.adjust.sdk:adjust-android-oaid:4.18.4' ``` Adjust OAIDプラグインを JARファイルとして追加することもできます。JARファイルは、[releases page][releases] からダウンロードすることができます。 diff --git a/doc/korean/README.md b/doc/korean/README.md index 8bccbe238..312a7d461 100644 --- a/doc/korean/README.md +++ b/doc/korean/README.md @@ -95,14 +95,14 @@ Maven을 사용하는 경우 `build.gradle` 파일에 다음 라인을 추가합니다. ```gradle -implementation 'com.adjust.sdk:adjust-android:4.18.3' +implementation 'com.adjust.sdk:adjust-android:4.18.4' implementation 'com.android.installreferrer:installreferrer:1.0' ``` 앱의 웹뷰 내에 있는 Adjust SDK를 사용하려면 다음과 같은 추가 종속성도 포함시키십시오. ```gradle -implementation 'com.adjust.sdk:adjust-android-webbridge:4.18.3' +implementation 'com.adjust.sdk:adjust-android-webbridge:4.18.4' ``` 또한 Adjust SDK 및 웹뷰 확장자를 JAR 파일로 추가할 수 있으며, 이 파일은 [릴리스 페이지][releases]에서 다운로드할 수 있습니다. From e424734f26f454709e4aee39d296eb8da799113f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Fri, 15 Nov 2019 11:19:43 +0100 Subject: [PATCH 5/5] Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2042c3e5d..dc1a81990 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +### Version 4.18.4 (15th November 2019) +#### Fixed +- Fixed occasional crash when attempting to unbind from OAID service (relevant only for OAID plugin users). + +--- + ### Version 4.18.3 (9th October 2019) #### Fixed - Fixed issue in v4.18.2 where released JAR in Maven was empty (thanks to @calvarez-ov).