Android 技巧: 命令行使用 sqlite3
很多人使用 SQLiteOpenHelper 操作数据库, 略显繁琐
以前用 mysql 开发, 在 unix shell 输入 mysql 进入 mysql 的 shell 就可以运行各种 sql 命令了.
unix 下的 sqlite3 功能相似, 如果在 Android 也可以使用就好了. 其实的确如此:
用 adb shell 登陆到 devices
打开db 文件
/system/xbin/sqlite3 /data/data/com.android.providers.settings/databases/settings.db
查看表
在 sqlite的 shell 中数据
.tables
进行 update
update Secure set value=1 where name = 'touch_exploration_enabled'
查新看数据是否改变
sqlite> select * from Secure
当然你也可以操作自己的数据库
create table IF NOT EXISTS my (_id INTEGER not null, name text not null, value INTEGER)
INSERT INTO my values(1,"touch_exploration_enabled",1)
drop table my
注意:
1) 你需要取得Android 系统的 root 权限.
2) 如果你是改 Secure 等这些保存设置的 table, 改完后请重启 Android, 因为 Setting 这些是会做 cache 的
你用Android 提供的接口就不用重启:
Settings.Secure.putInt(this.getContentResolver(), Settings.Secure.TOUCH_EXPLORATION_ENABLED, 1);
但为了编译它,你需要你需要 在 AndroidManifest.xml 声明
android:sharedUserId="android.uid.system
以及
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
并且把它作为 platform apps, 就是在 Android.mk 中声明
LOCAL_CERTIFICATE := platform
这显然不如直接用 sqlite3 命令简单
3) 另外就是你把 Android 中的 *.db 复制到 unix 中,想让 unix 下面的 sqlite3 打开时不行的, 可能 Android 对 sqlite3的 src 改动
如果把 unix 的 sqlite3 用 adb push /system/xbin/ 也是不能用的, 因为 unix 下的 sqlite3 是用 glibc 编译的, 而 Android 是基于bionic.