2014-12-10 4 views
12

Я обновил Nexus 7 с помощью Android Lollipop, и теперь я не могу получить доступ к SQLite db от IntelliJ IDEA 14. Все отлично работало до обновления Lollipop, хотя Android не был укоренен i может получить доступ к db из IntelliJ (но не потянуть его через ADB). ошибка я получаю, когда я пытаюсь соединиться:Разрешение IntelliJ SQLite запрещено на Android Lollipop, работало до

Data Source Synchronization Error 
Cannot synchronize 'SQLite': run-as: exec failed for /data/local/tmp/intellij_native_tools/get_modification_time Error:Permission denied 

Я знаю, что SQLite был обновлен в леденец от 3,7 до 3,8. Что может вызвать такую ​​ошибку? Неверное создание БД, старые драйверы БД, что-то еще?

+0

Тот же вопрос здесь (идея 14,2/Ubuntu 14.4.64/Lollipop) –

ответ

4

adb root ничего не решает, в зависимости от окружающей среды существует множество проблем. Вот как я работал над эмулятором, где трачу много времени на разработку.

Сначала нам нужно устранить ошибку only position independent executables (PIE) are supported с двоичным кодом.

получить источник андроида окончательного инструмента плагина:

git clone https://android.googlesource.com/platform/tools/adt/idea 
cd idea/android/ultimate/get_modification_time/jni 

Применить следующий патч:

diff --git a/android/ultimate/get_modification_time/jni/Application.mk b/android/ultimate/get_modification_time/jni/Application.mk 
index a252a72..bdf815d 100644 
--- a/android/ultimate/get_modification_time/jni/Application.mk 
+++ b/android/ultimate/get_modification_time/jni/Application.mk 
@@ -1 +1,2 @@ 
APP_ABI := all 
+APP_PLATFORM := android-16 

Вам нужно установить последнюю версию NDK строить, я имел ndk- r10d уже установлен.

# ndk-r10d 
ndk-build 
cd .. 
cp -R libs native_tools 
# update the intellij plugin with whatever arch you plan to use 
# adjust the path here to where your copy of IntelliJ is located 
zip -u ~/local/apps/idea/plugins/android/lib/android-ultimate.jar native_tools/*/get_modification_time 

Обратите внимание, что вам необходимо обновить путь в этой последней строке, чтобы указать на локальную установку IntelliJ. Например, на MacOS это будет:

zip -u /Applications/IntelliJ\ IDEA\ 14.app/Contents/plugins/android/lib/android-ultimate.jar native_tools/*/get_modification_time 

Restart IntelliJ.

Далее мы будем заменять /system/bin/run-as на эмулятор. Создайте следующий сценарий локально и назовите его run-as.

#! /system/bin/sh 
INTELLIJ_NATIVE="/data/local/tmp/intellij_native_tools/get_modification_time" 
if [ "$2" = "$INTELLIJ_NATIVE" ]; then 
     cd /data/local/tmp/intellij_native_tools 
     ./get_modification_time "$3" 
else 
     /system/bin/run-as.org "[email protected]" 
fi 

Запустить эмулятор. После его загрузки обновите его.

# update run-as after start 
adb shell mount -o remount,rw /system 
adb shell mv /system/bin/run-as /system/bin/run-as.org 
adb push ./run-as /system/bin/run-as 

Теперь вы можете синхронизировать содержимое вашего сердца.

Обратите внимание, вы также можете следить за ходом на жука вверх по течению, который только что приоритет задеть после размещения этого: https://youtrack.jetbrains.com/issue/IDEA-137606

+0

Спасибо, я не пробовал это, так как я на kitkat, когда мне нужен доступ к SQLite, потому что это похоже на слишком много работы, и я надеюсь, что он будет исправлен в 5.1. Если он не исправлен в новом леденец, я попробую это, но я буду принимать это как ответ :) –

+0

Чтобы быть ясным, это не проблема, характерная для 5.0, ее проблема с инструментами с плагином android ultimate и когда плагин установлен, 5. + будет работать. Я согласен с тем, что это очень много, чтобы заставить его работать, но если вы планируете длительный отладочный сеанс в 5.0 и уже имеете настройку среды, чтобы сделать это, стоит немного дополнительного времени, чтобы это произошло. В противном случае, старая мода и вручную нажмите/вытащите файл sqlite. – dskinner

0

Если у вас есть корневое устройство, команда попробовать

adb root 

После того, как IDEA synhronization успешен.

+0

«ADB корень» не может запускать root в производственных сборках. Так что я сделал adb shell/su. Но я получаю такое же разрешение, что и ошибка. Что делает intellij актуальность в моем андроиде, чтобы иметь возможность читать db? –

+0

Согласитесь, это должно полностью работать без необходимости запуска устройства. –

Смежные вопросы