从android P升级到android o终端不能正常工作。
这个问题本身是正常的。很多模块不支持 downgrade。恢复出厂设置即可。
比如没恢复前的telephone log报错:
AM load provider 失败, TelephonyProvider 不能downgrade to 1376264.
16020 04-09 10:32:05.880 6652 6652 D AndroidRuntime: Shutting down VM
16021 04-09 10:32:05.881 6652 6652 W System.err: Application uncaught exception in thread "main" java.lang.RuntimeException: Unable to get provider com.android.providers.telephony.TelephonyProvider: android.database.sqlite.SQLiteException: Can't downgrade database from version 1703944 to 1376264
设计时 telephony provider没有重载onDowngrade 函数.此函数抛出异常报错。 用户可以实现此函数。但是基本不建议这么做。
本篇文章关注qcril 模块的qcril db的报错。因为这次有点怪,是upgrade报错。下面分析为何走到upgrade,又为何upgrade失败。
项目比较老,android O和android P都是qcril而不是qcril-hal。
先上错误log:
10:31:49.875 RILQ : RIL[0][rild] qcril_db_upgrade_get_version: Unable to prepare query SELECT VALUE from main.qcril_properties_table where PROPERTY = 'qcrildb_version'
10:31:49.875 RILQ : RIL[0][rild] qcril_db_upgrade_get_version: Unable to prepare query SELECT VALUE from main.qcril_properties_table where PROPERTY = 'qcrildb_version'
10:31:49.875 RILQ : RIL[0][rild] qcril_db_upgrade: Unable to open /vendor/radio/qcril_database/upgrade as a folder: No such file or directory
终端读不到main.qcril_properties_table的qcrildb_version。 这个怀疑main.qcril_properties_table不存在的概率大一些。如果有这个table不可能没有qcrildb_version.
进入qcril_db.c的qcril_db_open函数看:
androidP所用库:
androidO所用库:
用户的qcril.db放置的目录变了. androidP放在data/vendor下,androidO在data/misc下找,自然找不到。(这个版本的anrdoidO太老了。其实后面的anroidO版本也是data/vendor目录下的。)
找不到,那么升级前的版本号认为是多少呢?是0!这样命名要走降级流程,结果终端走了升级流程!
接着还有一个问题打印:
Unable to open /vendor/radio/qcril_database/upgrade as a folder: No such file or directory
qcril_db_upgrade函数被调用时,需要从 /vendor/radio/qcril_database/upgrade获取升级数据库的脚本集。但是/vendor/radio/qcril_database/upgrade目录没有。这个androidO版本的version是1,是最低版本了,所以不会存在/vendor/radio/qcril_database/upgrade,自然就找不到了。
其他查阅链接 :
https://cloud.tencent.com/developer/section/1419799
http://www.runoob.com/cprogramming/c-function-sscanf.html
http://www.linuxguruz.com/man-pages/scandirat/
http://www.man7.org/linux/man-pages/man3/scandir.3.html
sql attach语句