From 8b34a123d951a0d33973b7d527ec9146b192cec8 Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 6 Mar 2018 16:15:23 +0100 Subject: [PATCH 1/8] Introduce referrer array storage limitations --- .../adjust/sdk/SharedPreferencesManager.java | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index fb97f854f..1e4210f34 100644 --- a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.SharedPreferences; +import android.util.Log; /** * Class used for shared preferences manipulation. @@ -49,6 +50,11 @@ public class SharedPreferencesManager { */ private static final int INDEX_IS_SENDING = 2; + /** + * Number of persisted referrers. + */ + private static final int REFERRERS_COUNT = 10; + /** * Shared preferences of the app. */ @@ -71,14 +77,27 @@ public SharedPreferencesManager(final Context context) { */ public synchronized void saveRawReferrer(final String rawReferrer, final long clickTime) { try { - JSONArray rawReferrerArray = getRawReferrerArray(); - if (getRawReferrer(rawReferrer, clickTime) != null) { return; } - JSONArray newRawReferrer = new JSONArray(); + JSONArray rawReferrerArray = getRawReferrerArray(); + if (rawReferrerArray.length() > REFERRERS_COUNT - 1) { + // Initial move for those who have more than REFERRERS_COUNT stored already. + // Cut the array and leave it with only REFERRERS_COUNT elements. + if (rawReferrerArray.length() > REFERRERS_COUNT) { + JSONArray tempReferrerArray = new JSONArray(); + for (int i = 0; i < REFERRERS_COUNT; i += 1) { + tempReferrerArray.put(rawReferrerArray.get(i)); + } + saveRawReferrerArray(tempReferrerArray); + return; + } + // There are exactly REFERRERS_COUNT saved referrers, do nothing. + return; + } + JSONArray newRawReferrer = new JSONArray(); newRawReferrer.put(INDEX_RAW_REFERRER, rawReferrer); newRawReferrer.put(INDEX_CLICK_TIME, clickTime); newRawReferrer.put(INDEX_IS_SENDING, 0); @@ -95,7 +114,11 @@ public synchronized void saveRawReferrer(final String rawReferrer, final long cl * @param rawReferrerArray Array of referrers to be saved */ public synchronized void saveRawReferrerArray(final JSONArray rawReferrerArray) { - saveString(PREFS_KEY_RAW_REFERRERS, rawReferrerArray.toString()); + try { + saveString(PREFS_KEY_RAW_REFERRERS, rawReferrerArray.toString()); + } catch (OutOfMemoryError e) { + remove(PREFS_KEY_RAW_REFERRERS); + } } /** @@ -306,6 +329,11 @@ private synchronized String getString(final String key) { return this.sharedPreferences.getString(key, null); } catch (ClassCastException e) { return null; + } catch (OutOfMemoryError e) { + if (key.equals(PREFS_KEY_RAW_REFERRERS)) { + remove(PREFS_KEY_RAW_REFERRERS); + } + return null; } } From 14db41366569bf46d793d313f06a9998720852b4 Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 6 Mar 2018 16:19:28 +0100 Subject: [PATCH 2/8] Remove unused imports --- .../src/main/java/com/adjust/sdk/SharedPreferencesManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index 1e4210f34..4aade54e8 100644 --- a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -5,7 +5,6 @@ import android.content.Context; import android.content.SharedPreferences; -import android.util.Log; /** * Class used for shared preferences manipulation. From 1c4070183b532eaa1dd4a4c777e2da8d1daf9f8d Mon Sep 17 00:00:00 2001 From: nonelse Date: Tue, 6 Mar 2018 16:30:13 +0100 Subject: [PATCH 3/8] Reorder length checks for readability --- .../adjust/sdk/SharedPreferencesManager.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index 4aade54e8..55fdfe005 100644 --- a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -81,18 +81,20 @@ public synchronized void saveRawReferrer(final String rawReferrer, final long cl } JSONArray rawReferrerArray = getRawReferrerArray(); - if (rawReferrerArray.length() > REFERRERS_COUNT - 1) { - // Initial move for those who have more than REFERRERS_COUNT stored already. - // Cut the array and leave it with only REFERRERS_COUNT elements. - if (rawReferrerArray.length() > REFERRERS_COUNT) { - JSONArray tempReferrerArray = new JSONArray(); - for (int i = 0; i < REFERRERS_COUNT; i += 1) { - tempReferrerArray.put(rawReferrerArray.get(i)); - } - saveRawReferrerArray(tempReferrerArray); - return; + + // Initial move for those who have more than REFERRERS_COUNT stored already. + // Cut the array and leave it with only REFERRERS_COUNT elements. + if (rawReferrerArray.length() > REFERRERS_COUNT) { + JSONArray tempReferrerArray = new JSONArray(); + for (int i = 0; i < REFERRERS_COUNT; i += 1) { + tempReferrerArray.put(rawReferrerArray.get(i)); } - // There are exactly REFERRERS_COUNT saved referrers, do nothing. + saveRawReferrerArray(tempReferrerArray); + return; + } + + // There are exactly REFERRERS_COUNT saved referrers, do nothing. + if (rawReferrerArray.length() == REFERRERS_COUNT) { return; } From ea68740709aea82a84e11f81051970ff6ad0d35b Mon Sep 17 00:00:00 2001 From: nonelse Date: Tue, 6 Mar 2018 16:30:53 +0100 Subject: [PATCH 4/8] Change error to more generic Throwable --- .../main/java/com/adjust/sdk/SharedPreferencesManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index 55fdfe005..83386b06b 100644 --- a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -117,7 +117,7 @@ public synchronized void saveRawReferrer(final String rawReferrer, final long cl public synchronized void saveRawReferrerArray(final JSONArray rawReferrerArray) { try { saveString(PREFS_KEY_RAW_REFERRERS, rawReferrerArray.toString()); - } catch (OutOfMemoryError e) { + } catch (Throwable t) { remove(PREFS_KEY_RAW_REFERRERS); } } @@ -330,7 +330,7 @@ private synchronized String getString(final String key) { return this.sharedPreferences.getString(key, null); } catch (ClassCastException e) { return null; - } catch (OutOfMemoryError e) { + } catch (Throwable t) { if (key.equals(PREFS_KEY_RAW_REFERRERS)) { remove(PREFS_KEY_RAW_REFERRERS); } From 6ec9f7dcee5cc997b16350420b46acd3f91127d0 Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 6 Mar 2018 18:18:10 +0100 Subject: [PATCH 5/8] Catch potential OutOfMemoryError when creating JSONArray object --- .../java/com/adjust/sdk/SharedPreferencesManager.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index 83386b06b..554316235 100644 --- a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -184,13 +184,14 @@ public synchronized JSONArray getRawReferrer(final String rawReferrer, final lon * @return JSONArray of saved referrers. Defaults to empty JSONArray if none found. */ public synchronized JSONArray getRawReferrerArray() { - try { - String referrerQueueString = getString(PREFS_KEY_RAW_REFERRERS); + String referrerQueueString = getString(PREFS_KEY_RAW_REFERRERS); - if (referrerQueueString != null) { + if (referrerQueueString != null) { + try { return new JSONArray(referrerQueueString); + } catch (JSONException e) { + } catch (Throwable t) { } - } catch (JSONException e) { } return new JSONArray(); From dfb8bf17a4a1f83b9966ae408557b04dc2309605 Mon Sep 17 00:00:00 2001 From: uerceg Date: Wed, 7 Mar 2018 11:15:34 +0100 Subject: [PATCH 6/8] Do potential trimming of JSONArray at earliest possible moment --- .../adjust/sdk/SharedPreferencesManager.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index 554316235..51063bd42 100644 --- a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -82,17 +82,6 @@ public synchronized void saveRawReferrer(final String rawReferrer, final long cl JSONArray rawReferrerArray = getRawReferrerArray(); - // Initial move for those who have more than REFERRERS_COUNT stored already. - // Cut the array and leave it with only REFERRERS_COUNT elements. - if (rawReferrerArray.length() > REFERRERS_COUNT) { - JSONArray tempReferrerArray = new JSONArray(); - for (int i = 0; i < REFERRERS_COUNT; i += 1) { - tempReferrerArray.put(rawReferrerArray.get(i)); - } - saveRawReferrerArray(tempReferrerArray); - return; - } - // There are exactly REFERRERS_COUNT saved referrers, do nothing. if (rawReferrerArray.length() == REFERRERS_COUNT) { return; @@ -188,6 +177,19 @@ public synchronized JSONArray getRawReferrerArray() { if (referrerQueueString != null) { try { + JSONArray rawReferrerArray = new JSONArray(referrerQueueString); + + // Initial move for those who have more than REFERRERS_COUNT stored already. + // Cut the array and leave it with only REFERRERS_COUNT elements. + if (rawReferrerArray.length() > REFERRERS_COUNT) { + JSONArray tempReferrerArray = new JSONArray(); + for (int i = 0; i < REFERRERS_COUNT; i += 1) { + tempReferrerArray.put(rawReferrerArray.get(i)); + } + saveRawReferrerArray(tempReferrerArray); + return tempReferrerArray; + } + return new JSONArray(referrerQueueString); } catch (JSONException e) { } catch (Throwable t) { From 745561b3e4e6df58c8fbcdf28054e3cf9f4e1de2 Mon Sep 17 00:00:00 2001 From: uerceg Date: Wed, 7 Mar 2018 12:33:59 +0100 Subject: [PATCH 7/8] New version 4.12.3 --- Adjust/adjust/build.gradle | 2 +- Adjust/adjust/src/main/java/com/adjust/sdk/Constants.java | 2 +- Adjust/example/build.gradle | 2 +- Adjust/pom.xml | 2 +- Adjust/pom_criteo.xml | 2 +- Adjust/pom_sociomantic.xml | 2 +- Adjust/pom_trademob.xml | 2 +- .../androidTest/java/com/adjust/sdk/TestActivityPackage.java | 2 +- .../src/main/java/com/adjust/testapp/MainActivity.java | 2 +- README.md | 4 ++-- VERSION | 2 +- doc/english/criteo_plugin.md | 2 +- doc/english/migrate.md | 2 +- doc/english/sociomantic_plugin.md | 2 +- doc/english/trademob_plugin.md | 2 +- 15 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Adjust/adjust/build.gradle b/Adjust/adjust/build.gradle index 8cfd981b1..1125e9bfd 100644 --- a/Adjust/adjust/build.gradle +++ b/Adjust/adjust/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.library' def getVersionName() { - return "4.12.2" + return "4.12.3" } android { diff --git a/Adjust/adjust/src/main/java/com/adjust/sdk/Constants.java b/Adjust/adjust/src/main/java/com/adjust/sdk/Constants.java index 4fc89df99..6e7556284 100644 --- a/Adjust/adjust/src/main/java/com/adjust/sdk/Constants.java +++ b/Adjust/adjust/src/main/java/com/adjust/sdk/Constants.java @@ -29,7 +29,7 @@ public interface Constants { String BASE_URL = "https://app.adjust.com"; String SCHEME = "https"; String AUTHORITY = "app.adjust.com"; - String CLIENT_SDK = "android4.12.2"; + String CLIENT_SDK = "android4.12.3"; String LOGTAG = "Adjust"; String REFTAG = "reftag"; String INSTALL_REFERRER = "install_referrer"; diff --git a/Adjust/example/build.gradle b/Adjust/example/build.gradle index b8dfa472c..8a398eee5 100644 --- a/Adjust/example/build.gradle +++ b/Adjust/example/build.gradle @@ -27,7 +27,7 @@ dependencies { // running mvn package //compile fileTree(dir: '../target', include: ['*.jar']) // using maven repository - //compile 'com.adjust.sdk:adjust-android:4.12.2' + //compile 'com.adjust.sdk:adjust-android:4.12.3' debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4' diff --git a/Adjust/pom.xml b/Adjust/pom.xml index f8c14ee17..359d22706 100644 --- a/Adjust/pom.xml +++ b/Adjust/pom.xml @@ -5,7 +5,7 @@ 4.0.0 adjust-android com.adjust.sdk - 4.12.2 + 4.12.3 jar Adjust Android SDK https://github.com/adjust/android_sdk diff --git a/Adjust/pom_criteo.xml b/Adjust/pom_criteo.xml index 208d25da1..b269eda2a 100644 --- a/Adjust/pom_criteo.xml +++ b/Adjust/pom_criteo.xml @@ -5,7 +5,7 @@ 4.0.0 adjust-android-criteo com.adjust.sdk - 4.12.2 + 4.12.3 jar Adjust Android SDK https://github.com/adjust/android_sdk diff --git a/Adjust/pom_sociomantic.xml b/Adjust/pom_sociomantic.xml index 09cbd13ef..41e0c2ec9 100644 --- a/Adjust/pom_sociomantic.xml +++ b/Adjust/pom_sociomantic.xml @@ -5,7 +5,7 @@ 4.0.0 adjust-android-sociomantic com.adjust.sdk - 4.12.2 + 4.12.3 jar Adjust Android SDK https://github.com/adjust/android_sdk diff --git a/Adjust/pom_trademob.xml b/Adjust/pom_trademob.xml index d71dd9300..e6d799f0b 100644 --- a/Adjust/pom_trademob.xml +++ b/Adjust/pom_trademob.xml @@ -5,7 +5,7 @@ 4.0.0 adjust-android-trademob com.adjust.sdk - 4.12.2 + 4.12.3 jar Adjust Android SDK https://github.com/adjust/android_sdk diff --git a/Adjust/test/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java b/Adjust/test/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java index 1256a9061..e22972873 100644 --- a/Adjust/test/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java +++ b/Adjust/test/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java @@ -53,7 +53,7 @@ public TestActivityPackage(ActivityPackage activityPackage) { // default values appToken = "123456789012"; environment = "sandbox"; - clientSdk = "android4.12.2"; + clientSdk = "android4.12.3"; suffix = ""; attribution = new AdjustAttribution(); playServices = true; diff --git a/Adjust/testapp/src/main/java/com/adjust/testapp/MainActivity.java b/Adjust/testapp/src/main/java/com/adjust/testapp/MainActivity.java index 5338971f2..ca4970b1c 100644 --- a/Adjust/testapp/src/main/java/com/adjust/testapp/MainActivity.java +++ b/Adjust/testapp/src/main/java/com/adjust/testapp/MainActivity.java @@ -34,6 +34,6 @@ private void startTestSession() { //testLibrary.addTestDirectory("current/sdkInfo"); //testLibrary.addTest("current/appSecret/Test_AppSecret_no_secret"); - testLibrary.startTestSession("android4.12.2"); + testLibrary.startTestSession("android4.12.3"); } } diff --git a/README.md b/README.md index 768a01c84..8512d0ecd 100644 --- a/README.md +++ b/README.md @@ -72,14 +72,14 @@ These are the minimal steps required to integrate the Adjust SDK into your Andro If you are using Maven, add the following to your `build.gradle` file: ``` -compile 'com.adjust.sdk:adjust-android:4.12.2' +compile 'com.adjust.sdk:adjust-android:4.12.3' compile 'com.android.installreferrer:installreferrer:1.0' ``` **Note**: If you are using `Gradle 3.0.0 or above`, make sure to use the `implementation` keyword instead of `compile` as follows: ``` -implementation 'com.adjust.sdk:adjust-android:4.12.2' +implementation 'com.adjust.sdk:adjust-android:4.12.3' implementation 'com.android.installreferrer:installreferrer:1.0' ``` diff --git a/VERSION b/VERSION index f1cd7de1d..d140ced1c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.12.2 +4.12.3 diff --git a/doc/english/criteo_plugin.md b/doc/english/criteo_plugin.md index c2dcf6698..fcac3842c 100644 --- a/doc/english/criteo_plugin.md +++ b/doc/english/criteo_plugin.md @@ -3,7 +3,7 @@ Add the dependency of the adjust sdk with the Criteo plugin: ``` -compile 'com.adjust.sdk:adjust-android-criteo:4.12.2' +compile 'com.adjust.sdk:adjust-android-criteo:4.12.3' ``` Or integrate adjust with Criteo events by following these steps: diff --git a/doc/english/migrate.md b/doc/english/migrate.md index 938086d7c..f1c97cf5f 100644 --- a/doc/english/migrate.md +++ b/doc/english/migrate.md @@ -1,4 +1,4 @@ -## Migrate your adjust SDK for Android to 4.12.2 from 3.6.2 +## Migrate your adjust SDK for Android to 4.12.3 from 3.6.2 ### The Application class diff --git a/doc/english/sociomantic_plugin.md b/doc/english/sociomantic_plugin.md index 8a3b54183..64eec721b 100644 --- a/doc/english/sociomantic_plugin.md +++ b/doc/english/sociomantic_plugin.md @@ -3,7 +3,7 @@ Add the dependency of the adjust sdk with the Sociomantic plugin: ``` -compile 'com.adjust.sdk:adjust-android-sociomantic:4.12.2' +compile 'com.adjust.sdk:adjust-android-sociomantic:4.12.3' ``` Or integrate adjust with Sociomantic events by following these steps: diff --git a/doc/english/trademob_plugin.md b/doc/english/trademob_plugin.md index d86bed4ac..e3847c980 100644 --- a/doc/english/trademob_plugin.md +++ b/doc/english/trademob_plugin.md @@ -3,7 +3,7 @@ Add the dependency of the adjust sdk with the Trademob plugin: ``` -compile 'com.adjust.sdk:adjust-android-trademob:4.12.2' +compile 'com.adjust.sdk:adjust-android-trademob:4.12.3' ``` Or integrate adjust with Trademob events by following these steps: From da32360378d7d6c311ee1b46491e8fd6eda1f130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Wed, 7 Mar 2018 12:35:41 +0100 Subject: [PATCH 8/8] Version 4.12.3 changes --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7d6f674e..cdd09d14d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +### Version 4.12.3 (7th March 2018) +#### Fixed +- Fixed random `OutOfMemoryError` occurrences when reading/writing referrers array. + +--- + ### Version 4.12.2 (28th February 2018) #### Changed - Capturing information about silently ignored runtime exceptions by scheduled executor.