Подтвердить что ты не робот

Разрешение IntelliJ SQLite, отклоненное на Android Lollipop, работало до

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

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. Что может вызвать такую ​​ошибку? Неверное создание БД, старые драйверы БД, что-то еще?

4b9b3361

Ответ 1

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

Перезапустите IntelliJ.

Затем мы заменим /system/bin/run-as на эмулятор. Создайте следующий script локально и назовите его 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

Ответ 2

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

adb root

После успешной синонизации IDEA.