Android中的sqlite3的安装和使用, /system/xbin/sqlite3[1]: syntax error: ‘(‘ unexpected问题解决,以及资sqlite3源下载

sqlite3简介:

Android系统采用了sqlite3数据库,这是一个关系型数据库,而且是一个轻量级的,广泛应用于嵌入式系统中。

最近,又在使用sqlite3了,遇到了下面的错误:

1). “/system/bin/sqlite3[1]: syntax error: '(' unexpected”;

2). error: only position independent executables (PIE) are supported;

3). CANNOT LINK EXECUTABLE: cannot locate symbol "uiter_setUTF8_51" referenced by "/system/lib/libsqlite.so"...
 

现将sqlite3的使用以及上述错误排除方法做一个总结。

sqlite3的安装条件:

sqlite3是一个可执行命令,在“adb shell“环境中使用。通常,位于/system/bin/  或者/system/xbin/目录下。

如果你在adb shell命令行中,有如下的运行结果,恭喜你,你的sqlite3可以使用。

./sqlite3                            

SQLite version 3.8.11.1 2015-07-29 20:00:57

Enter ".help" for usage hints.

Connected to a transient in-memory database.

Use ".open FILENAME" to reopen on a persistent database.

sqlite> 


但是,很多时候,设备中中并没有sqlite3命令,这就需要用户手动安装。然而, 安装sqlite3并非易事,因为/system目录是不可写的,无法将sqlite3写入到systemm目录下的bin(xbin)目录中。

这就需要获取到root权限,只有root权限才可以操作system目录。并且,需要将其属性改为可写属性。但是,正常的手机无法获取root权限。 这样,就形成了死锁。

这里,针对“可获取到root权限”的手机,进行sqlite3的安装(即将其copy到/system/xbin)目录下。

sqlite3安装步骤:

先准备sqlite3文件,可以从模拟器中copy。我这里是一个以前从一个root过的真机中copy出来的。

然后将其push到/sdcard/tmp目录下,如果没有tmp目录,可以直接copy到/sdcard目录下。

% adb push sqlite3 /sdcard/tmp/

% adb shell

shell@hammerhead:/ $ 

1|shell@hammerhead:/sdcard $ cd /sdcard/tmp

我们的目的是将这个sqlite3 copy到/system/xbin下面。
此时,/system还是不可写的,所以,先改变起属性为可写属性,通过mount命令。

1|shell@hammerhead:/sdcard/tmp $ mount -o remount,rw /system
mount: Permission denied

可见,普通用户无权修改mount。只能用root用户来操作(我的手机事先已经root过了)

255|shell@hammerhead:/sdcard/tmp $ su
root@hammerhead:/storage/emulated/0/tmp # mount -o remount,rw /system

1|root@hammerhead:/storage/emulated/0/tmp # cd /system/xbin

1|root@hammerhead:/system/xbin # cp /sdcard/tmp/sqlite3 .

//再修改sqlite3的权限:
1|root@hammerhead:/system/xbin # chmod 4755 sqlite3

 这样sqlite3就copy到/system/xbin/目录下了。

root@hammerhead:/system/xbin # ls
dexdump
sqlite3
wlutil

 新的错误出现了:

松了以口气,赶紧试一下,结果,直接打脸:
1|root@hammerhead:/system/xbin # sqlite3
/system/xbin/sqlite3[1]: syntax error: '(' unexpected

这是因为Android设备中的shell命令行下,无法识别sqlite3命令,这个设备不兼容我的sqlite3文件。

于是,从网上重新找了几个sqlite3命令,重复上面的过程,终于成功。

在我的这个手机上,最后只有sqlite3.armv7-pie可以用:

sqlite3

sqlite3.armv7  

sqlite3.armv7-pie  //成功

运行结果:(sqlite3.armv7-pie)

$ sqlite3.armv7-pie                                       
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .help
.backup ?DB? FILE      Backup DB (default "main") to FILE
.bail on|off           Stop after hitting an error.  Default OFF

如果运行“./sqlite3.armv7”,就会出现如下错误:

error: only position independent executables (PIE) are supported.

期间,也试过将libsqlite3.so等copy到/system/lib目录下的方式,发生如下错误:

shell@hammerhead:/system/xbin $ ./sqlite3
CANNOT LINK EXECUTABLE: cannot locate symbol "uiter_setUTF8_51" referenced by "/system/lib/libsqlite.so"...
 

sqlite3资源: 

最后,附上sqlite3资源链接:

Android-sqlite3命令-Android开发-sqlite3_armv7-Android文档类资源-CSDN下载包括如下版本:sqlite3,sqlite3_armv6,sqlite3_armv6-nofpu,更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/liranke/84998341


sqlite3,小巧玲珑

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值