Android Lollipop上的IntelliJ SQLite权限被拒绝,之前有过工作

时间:2014-12-10 09:41:30

标签: android sqlite cordova intellij-idea

我使用Android Lollipop更新了Nexus 7,现在我无法从IntelliJ IDEA 14访问SQLite数据库。在Lollipop更新之前一切正常,即使Android没有root,我可以从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。什么可能导致这种错误?错误的数据库创建,旧数据库驱动程序,还有其他什么?

2 个答案:

答案 0 :(得分:4)

adb root无法解决任何问题,根据环境存在大量问题。以下是我在模拟器上工作的方式,我花了很多时间来开发它。

首先,我们需要使用二进制文件解决错误only position independent executables (PIE) are supported

获取android终极插件工具的来源:

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。在本地创建以下脚本并将其命名为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 "$@"
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

答案 1 :(得分:0)

如果你有root设备试试命令

adb root

之后IDEA同步成功。