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: