diff --git a/src/Mono.Android/java/mono/android/Runtime.java b/src/Mono.Android/java/mono/android/Runtime.java
index ed0cbbf7103..16fcd441cf1 100644
--- a/src/Mono.Android/java/mono/android/Runtime.java
+++ b/src/Mono.Android/java/mono/android/Runtime.java
@@ -6,7 +6,7 @@ private Runtime ()
{
}
- public static native void init (String lang, String[] runtimeApks, String runtimeDataDir, String[] appDirs, ClassLoader loader, String externalStorageDir, String[] assemblies, String packageName);
+ public static native void init (String lang, String[] runtimeApks, String runtimeDataDir, String[] appDirs, ClassLoader loader, String[] externalStorageDirs, String[] assemblies, String packageName);
public static native void register (String managedType, java.lang.Class nativeClass, String methods);
public static native void notifyTimeZoneChanged ();
public static native int createNewContext (String[] runtimeApks, String[] assemblies, ClassLoader loader);
diff --git a/src/Xamarin.Android.Build.Tasks/Resources/MonoPackageManager.api4.java b/src/Xamarin.Android.Build.Tasks/Resources/MonoPackageManager.api4.java
index 9ec169cb914..ab92c6aa962 100644
--- a/src/Xamarin.Android.Build.Tasks/Resources/MonoPackageManager.api4.java
+++ b/src/Xamarin.Android.Build.Tasks/Resources/MonoPackageManager.api4.java
@@ -38,6 +38,13 @@ public static void LoadApplication (Context context, ApplicationInfo runtimePack
String cacheDir = context.getCacheDir ().getAbsolutePath ();
String dataDir = context.getApplicationInfo ().dataDir + "/lib";
ClassLoader loader = context.getClassLoader ();
+ java.io.File external0 = android.os.Environment.getExternalStorageDirectory ();
+ String externalDir = new java.io.File (
+ external0,
+ "Android/data/" + context.getPackageName () + "/files/.__override__").getAbsolutePath ();
+ String externalLegacyDir = new java.io.File (
+ external0,
+ "../legacy/Android/data/" + context.getPackageName () + "/files/.__override__").getAbsolutePath ();
Runtime.init (
language,
@@ -49,9 +56,10 @@ public static void LoadApplication (Context context, ApplicationInfo runtimePack
dataDir,
},
loader,
- new java.io.File (
- android.os.Environment.getExternalStorageDirectory (),
- "Android/data/" + context.getPackageName () + "/files/.__override__").getAbsolutePath (),
+ new String[] {
+ externalDir,
+ externalLegacyDir
+ },
MonoPackageManager_Resources.Assemblies,
context.getPackageName ());
diff --git a/src/Xamarin.Android.Build.Tasks/Resources/MonoPackageManager.java b/src/Xamarin.Android.Build.Tasks/Resources/MonoPackageManager.java
index dd4052bd739..d43792d46de 100644
--- a/src/Xamarin.Android.Build.Tasks/Resources/MonoPackageManager.java
+++ b/src/Xamarin.Android.Build.Tasks/Resources/MonoPackageManager.java
@@ -38,6 +38,13 @@ public static void LoadApplication (Context context, ApplicationInfo runtimePack
String cacheDir = context.getCacheDir ().getAbsolutePath ();
String dataDir = getNativeLibraryPath (context);
ClassLoader loader = context.getClassLoader ();
+ java.io.File external0 = android.os.Environment.getExternalStorageDirectory ();
+ String externalDir = new java.io.File (
+ external0,
+ "Android/data/" + context.getPackageName () + "/files/.__override__").getAbsolutePath ();
+ String externalLegacyDir = new java.io.File (
+ external0,
+ "../legacy/Android/data/" + context.getPackageName () + "/files/.__override__").getAbsolutePath ();
Runtime.init (
language,
@@ -49,9 +56,10 @@ public static void LoadApplication (Context context, ApplicationInfo runtimePack
dataDir,
},
loader,
- new java.io.File (
- android.os.Environment.getExternalStorageDirectory (),
- "Android/data/" + context.getPackageName () + "/files/.__override__").getAbsolutePath (),
+ new String[] {
+ externalDir,
+ externalLegacyDir
+ },
MonoPackageManager_Resources.Assemblies,
context.getPackageName ());
diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
index 2fa09a9523b..cc6803f1b56 100755
--- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
+++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
@@ -279,6 +279,11 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
True
+
+
+ True
+
+
False
diff --git a/src/monodroid/jni/mono_android_Runtime.h b/src/monodroid/jni/mono_android_Runtime.h
index 3aaaa966d01..8bd4ae1bf3c 100644
--- a/src/monodroid/jni/mono_android_Runtime.h
+++ b/src/monodroid/jni/mono_android_Runtime.h
@@ -10,10 +10,10 @@ extern "C" {
/*
* Class: mono_android_Runtime
* Method: init
- * Signature: (Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+ * Signature: (Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/ClassLoader;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_mono_android_Runtime_init
- (JNIEnv *, jclass, jstring, jobjectArray, jstring, jobjectArray, jobject, jstring, jobjectArray, jstring);
+ (JNIEnv *, jclass, jstring, jobjectArray, jstring, jobjectArray, jobject, jobjectArray, jobjectArray, jstring);
/*
* Class: mono_android_Runtime
diff --git a/src/monodroid/jni/monodroid-glue.c b/src/monodroid/jni/monodroid-glue.c
index 57183905b96..f610239f2bc 100644
--- a/src/monodroid/jni/monodroid-glue.c
+++ b/src/monodroid/jni/monodroid-glue.c
@@ -329,7 +329,7 @@ monodroid_get_system_property (const char *name, char **value)
#ifdef RELEASE
#define MAX_OVERRIDES 1
#else
-#define MAX_OVERRIDES 2
+#define MAX_OVERRIDES 3
#endif
static char* override_dirs [MAX_OVERRIDES];
@@ -410,6 +410,7 @@ get_primary_override_dir (JNIEnv *env, jstring home)
static char *primary_override_dir;
static char *external_override_dir;
+static char *external_legacy_override_dir;
static void
create_update_dir (char *override_dir)
@@ -651,6 +652,7 @@ get_libmonosgen_path ()
// external storage locations so we need to file copy the shared object to an internal
// storage location before loading it.
copy_monosgen_to_internal_location (primary_override_dir, external_override_dir);
+ copy_monosgen_to_internal_location (primary_override_dir, external_legacy_override_dir);
int i;
for (i = 0; i < MAX_OVERRIDES; ++i)
@@ -2512,6 +2514,7 @@ get_ds2_path ()
for (i = 0; i < sizeof (gdbservers)/sizeof (gdbservers [0]); ++i) {
file = monodroid_strdup_printf ("%s", gdbservers [i]);
copy_file_to_internal_location (primary_override_dir, external_override_dir, file);
+ copy_file_to_internal_location (primary_override_dir, external_legacy_override_dir, file);
free (file);
}
@@ -3893,7 +3896,7 @@ create_and_initialize_domain (JNIEnv* env, jobjectArray runtimeApks, jobjectArra
}
JNIEXPORT void JNICALL
-Java_mono_android_Runtime_init (JNIEnv *env, jclass klass, jstring lang, jobjectArray runtimeApks, jstring runtimeNativeLibDir, jobjectArray appDirs, jobject loader, jstring externalStorageDir, jobjectArray assemblies, jstring packageName)
+Java_mono_android_Runtime_init (JNIEnv *env, jclass klass, jstring lang, jobjectArray runtimeApks, jstring runtimeNativeLibDir, jobjectArray appDirs, jobject loader, jobjectArray externalStorageDirs, jobjectArray assemblies, jstring packageName)
{
char *runtime_args = NULL;
char *connect_args;
@@ -3923,9 +3926,13 @@ Java_mono_android_Runtime_init (JNIEnv *env, jclass klass, jstring lang, jobject
setup_environment (env, runtimeApks);
primary_override_dir = get_primary_override_dir (env, (*env)->GetObjectArrayElement (env, appDirs, 0));
- esd = (*env)->GetStringUTFChars (env, externalStorageDir, NULL);
+ esd = (*env)->GetStringUTFChars (env, (*env)->GetObjectArrayElement (env, externalStorageDirs, 0), NULL);
external_override_dir = monodroid_strdup_printf ("%s", esd);
- (*env)->ReleaseStringUTFChars (env, externalStorageDir, esd);
+ (*env)->ReleaseStringUTFChars (env, (*env)->GetObjectArrayElement (env, externalStorageDirs, 0), esd);
+
+ esd = (*env)->GetStringUTFChars (env, (*env)->GetObjectArrayElement (env, externalStorageDirs, 1), NULL);
+ external_legacy_override_dir = monodroid_strdup_printf ("%s", esd);
+ (*env)->ReleaseStringUTFChars (env, (*env)->GetObjectArrayElement (env, externalStorageDirs, 1), esd);
init_categories (primary_override_dir);
create_update_dir (primary_override_dir);
@@ -3937,6 +3944,7 @@ Java_mono_android_Runtime_init (JNIEnv *env, jclass klass, jstring lang, jobject
#ifndef RELEASE
override_dirs [1] = external_override_dir;
+ override_dirs [2] = external_legacy_override_dir;
for (i = 0; i < MAX_OVERRIDES; ++i) {
const char *p = override_dirs [i];
if (!directory_exists (p))