我使用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。什么可能导致这种错误?错误的数据库创建,旧数据库驱动程序,还有其他什么?
答案 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同步成功。