summaryrefslogtreecommitdiff
path: root/android/ultimate
diff options
context:
space:
mode:
authorEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>2013-10-17 16:46:04 +0400
committerEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>2013-10-17 16:48:27 +0400
commit22e200556dd5cc2c8f856af574be14371cfc9f3f (patch)
tree9fe577b2841201d784ea647d3ee641c87b47283d /android/ultimate
parent069f2861023df160ef2ec5e0c63abe98aa1c8947 (diff)
downloadidea-22e200556dd5cc2c8f856af574be14371cfc9f3f.tar.gz
IDEA-114732 fix "permission denied" problem on Genymotion emulator
Diffstat (limited to 'android/ultimate')
-rw-r--r--android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java35
1 files changed, 31 insertions, 4 deletions
diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java
index 2cdd25ed7e6..4b7fdbcc614 100644
--- a/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java
+++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java
@@ -1,9 +1,6 @@
package org.jetbrains.android.database;
-import com.android.ddmlib.AndroidDebugBridge;
-import com.android.ddmlib.IDevice;
-import com.android.ddmlib.MultiLineReceiver;
-import com.android.ddmlib.SyncService;
+import com.android.ddmlib.*;
import com.android.tools.idea.ddms.DevicePropertyUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProgressIndicator;
@@ -62,6 +59,10 @@ class AndroidDbUtil {
errorReporter.reportError(output);
return false;
}
+ // recreating is needed for Genymotion emulator (IDEA-114732)
+ if (!recreateRemoteFile(device, packageName, remoteDbPath, errorReporter, progressIndicator)) {
+ return false;
+ }
outputReceiver = new MyShellOutputReceiver(progressIndicator);
device.executeShellCommand("run-as " + packageName + " cat " + TEMP_REMOTE_DB_PATH + " >" + remoteDbPath,
outputReceiver, DB_COPYING_TIMEOUT_SEC, TimeUnit.SECONDS);
@@ -80,6 +81,32 @@ class AndroidDbUtil {
return true;
}
+ private static boolean recreateRemoteFile(IDevice device,
+ String packageName,
+ String remotePath,
+ AndroidDbErrorReporter errorReporter,
+ ProgressIndicator progressIndicator) throws Exception {
+ MyShellOutputReceiver outputReceiver = new MyShellOutputReceiver(progressIndicator);
+ device.executeShellCommand("run-as " + packageName + " rm " + remotePath,
+ outputReceiver, DB_COPYING_TIMEOUT_SEC, TimeUnit.SECONDS);
+ String output = outputReceiver.getOutput();
+
+ if (!output.isEmpty() && !output.startsWith("rm failed")) {
+ errorReporter.reportError(output);
+ return false;
+ }
+ outputReceiver = new MyShellOutputReceiver(progressIndicator);
+ device.executeShellCommand("run-as " + packageName + " touch " + remotePath,
+ outputReceiver, DB_COPYING_TIMEOUT_SEC, TimeUnit.SECONDS);
+ output = outputReceiver.getOutput();
+
+ if (!output.isEmpty()) {
+ errorReporter.reportError(output);
+ return false;
+ }
+ return true;
+ }
+
public static boolean downloadDatabase(@NotNull IDevice device,
@NotNull String packageName,
@NotNull String dbName,