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/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index fb97f854f..51063bd42 100644 --- a/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/adjust/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -49,6 +49,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 +76,18 @@ public SharedPreferencesManager(final Context context) { */ public synchronized void saveRawReferrer(final String rawReferrer, final long clickTime) { try { + if (getRawReferrer(rawReferrer, clickTime) != null) { + return; + } + JSONArray rawReferrerArray = getRawReferrerArray(); - if (getRawReferrer(rawReferrer, clickTime) != null) { + // There are exactly REFERRERS_COUNT saved referrers, do nothing. + if (rawReferrerArray.length() == REFERRERS_COUNT) { 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 +104,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 (Throwable t) { + remove(PREFS_KEY_RAW_REFERRERS); + } } /** @@ -160,13 +173,27 @@ 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) { + 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; + } - if (referrerQueueString != null) { return new JSONArray(referrerQueueString); + } catch (JSONException e) { + } catch (Throwable t) { } - } catch (JSONException e) { } return new JSONArray(); @@ -306,6 +333,11 @@ private synchronized String getString(final String key) { return this.sharedPreferences.getString(key, null); } catch (ClassCastException e) { return null; + } catch (Throwable t) { + if (key.equals(PREFS_KEY_RAW_REFERRERS)) { + remove(PREFS_KEY_RAW_REFERRERS); + } + return null; } } 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/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. 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: