昨天把K860i刷了机,刷到了最新的CyanogenMod
10.1,使用起来各种流畅舒服,不过却由于内外置SD卡的挂载点的改变,造成了一些困扰,现记录如下。









       
平时里由于极少把手机连接到电脑上传文件,除非文件特别多特别大,一般都是通过WIFI网络来把需要的文件传到手机里。原理很简单,就是在手机上建一个FTP服务器,电脑上通过FTP工具把文件传过来即可。如上图就是我经常用的一个小米文件管理器,很简单好用。

刷机之前用的是官方ROM,它把外置的SD卡挂载在了内置SD卡的某一个目录里,所以小米文件管理默认开启而且在其设置里面无法更新的/mnt/sdcard这个几乎100%的Android设备都存在的目录就在FTP上使用就完全没有问题,虽然麻烦些不过还是可以把文件传到外置SD卡上。

但是刷机之后问题出现了,这个ROM把内外置SD卡分别挂载到了/storage/sdcard0和/storage/sdcard1上,而默认符号链接/mnt/sdcard到了/storage/sdcard0也就是内置卡,这样一来,直接通过小米文件管理的FTP功能就无法传文件到外置SD卡上了。

要更改这个也很简单,都想的到直接把这个FTP的家目录更改一下不就得了,关键是这个软件的设置里面没有提供更改FTP家目录的设置。于是我就想到直接修改小米文件管理器的数据来修改FTP的家目录,当然这只是一个想法,尝试一下便知道可不可行,因为如果小米文件管理器没有使用生成的数据来控制FTP家目录而是直接强制指定/mnt/sdcard写在了软件的程序代码里面,那就无法了。后面的事实证明,其还是使用了用户数据写入数据库的方式来存储设置的,结果很完美。下面是解决的过程。

一些必要的前提知识补充:

       
Android系统对于每个安装的软件,都会分配空间,用于储存软件本身和软件数据,软件本身也就是apk文件了,所有用户安装的apk软件都位于/data/app目录,正常方法安装的apk都会在这里以包名显示,如com.tencent.qq.apk。而Android系统会给每个软件分配专用的文件夹用于存放软件运行所需要的数据,如软件设置,从internet上下载的用于显示的内容数据(如微博的内容)等等,每个软件的用户数据都是以包名为目录名,储存在/data/data目录里面。一般意义上的清除某个软件的数据,其实质也就是删除了对应的文件夹里面的内容。

Android系统的所有数据存储,都使用的是sqlite3数据库,这是一种单文件型的数据库,体积小,提供的API使用方法灵活,所以Android
在系统级集成了它,用于所有apk软件的数据存储。它完全符合SQL的ACID原则,一般的软件都会把设置项之类的东西存储在sqlite3数据库中,我们只要找到所需的键值,把它修改成我们所要值就算完成了。

同时,由于使用的Linux内核,Android系统的文件权限自然是用的Linux的那一套,rwxrwxrwx,以及用户和用户组。对于每个安装的apk软件,系统都会给其分配唯一的用户名和用户组,当然在Android里面这些东西对用户都是透明的,不像桌面Linux系统那样会被用户注意到,所以一般用户也不需要知道这些。

下面开始进行我们要的操作。



       
1、首先就是要找到这个小米文件管理器的包名,因为只有找到了包名我们才能找到它的数据存放在哪里,直接查看它的应用信息,4.2系统很方便地在app名称下面就显示了包名(我记得4.1是没有这个的)。如下图。









       
2、找到包名之后我们要进入到其用户数据目录里面,找到数据库文件。果然,在/data/data/com.android.mifileexplorer的database目录里面,我们找到了这个文件,就是它。如下图。









       
3、把这个mifileexplorer这个文件拷到/sdcard目录,传到电脑上,以方便我们对其进行操作。



       
4、去http://www.sqlite.org官网下载适合于Windows的sqlite3.exe,我们就会用它来对这个数据库文件进行修改。Windows并没有集成这个,Linux和Mac
OSX都已经自带了这个sqlite3的工具,不需要下载。



       
5、下面开始修改(下面会用到标准SQL语句和sqlite3的特殊操作命令)。

       
先看一下这个数据库里面有几个表:.tables。

       
再看一下所有的表结构是怎么样的:.schema。

       
再来看看表里面有没有我们想要的存储的FTP家目录的路径:select * from network。

       
果然,从输出的结果,我们看到了remote列有一个值是/storage/sdcard0,我们只要把这个值修改成/storage/,自然FTP的家目录就修改了,那么我们就可以在FTP工具里面直接读写内外置卡了。

尝试修改这个值:update network set remote='/storage/'。

       
再看一下修改成功了没有:select * from network。可以看到,值已经发生了变化。



       
到这里修改路径的工作已经完成了一大半了,当然我们看到了还有一个2121的值,这个是小米文件管理器的FTP的端口号,如果有需要的话也可以修改的。







       
6、现在我们把这个修改好的数据库文件再要放回原处,以验证是否修改成功。

       
这里要注意一个重要的地方,如果我们是直接用RE管理器把文件放回原处,一定要改权限和文件的所有者,特别是文件的所有者。上面说过,每个app都会有一个唯一的用户名和用户组,我们用RE管理器是必须在设备获取了ROOT权限之后,以root用户的身份把文件写回原路径的,这样肯定就会产生问题,最直接的表现就是app直接FC了。所以我们可以参照database目录里面其它文件的所有者和权限信息,用RE管理器改成一样的就可以了(图中是u0_a85用户和组)。如下图。









       
7、
把小米文件管理器从缓存的进程中清理掉,再重新打开它,开启FTP,会看到提示的信息已经变化了,这样就说明已经成功了,在FTP工具里面打开该FTP,可以看到已经可以正常读取到sdcard0和sdcard1了。如下图。

















 



       
至此,所有工作都已经完成。实际上还可以用一个更简单的方法,把手机连接到PC,用cmd里面的adb
shell进入到手机的终端,直接进入对应的目录便可以直接用sqlite3(Android也自带了这个)更新数据库文件,这样到底是更方便了还是更麻烦了,大家自己可以尝试一下。

本文仅做抛砖引玉,类似的直接修改数据库的还有很多方案,遇到有些问题实在无法解决时,可以尝试用这个来试试看。

直接修改Android软件数据库来改变软件设置实例一则的更多相关文章

  1. Android系统移植与调试之------->如何修改Android默认字体大小和设置里面字体大小比例

    因为我修改 ro.sf.lcd_density的值,将它从160修改 为120,所以导致整个系统的字体都变得很小.因此需要将整个字体变大,并且在设置-->显示-->字体大小的4个选项的值都 ...

  2. android开发之-软件设置保存-快速学会使用SharedPreferences篇-实测

    我们在设计软件的时候,需要记录软件设置的基本信息,那么怎么来保存他们呢?我们可以使用SharedPreferences.   SharedPreferences是一个xml文件,用来存储软件的常规设置 ...

  3. 修改Android中strings.xml文件, 动态改变数据

    有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...

  4. 【转】修改Android解锁界面

    背景      先说说背景吧,这是本人从WinCE系统转到Android之后,接到的第一个任务就是修改Android原生的解锁界面,之前看了两个星期的书和网络博客,Java的也有.Android应用开 ...

  5. Android ListView的item背景色设置以及item点击无响应等相关问题

    Android ListView的item背景色设置以及item点击无响应等相关问题 在Android开发中,listview控件是非常常用的控件,在大多数情况下,大家都会改掉listview的ite ...

  6. Android系统移植与调试之------->如何修改Android手机NFC模块,使黑屏时候能够使用NFC

    我们都知道在不修改源代码的情况下,只能是解锁之后才能使用NFC功能.而在锁屏和黑屏2个状态下是没办法用NFC的,但是最近有个客户要求手机在黑屏状态下能够使用NFC,因此我们需要去修改Android源代 ...

  7. iTOP4418开发板7寸屏幕Android系统下横竖屏设置

    Android系统屏幕旋转设置 平台: iTOP4418开发板+7寸屏幕 1. Androd4.4源码可以编译成手机模式和平板模式,讯为iTop4418 开发平台的Android系统默认编译为平板模式 ...

  8. 修改Android源码实现原生应用双开,应用多开

    1. 准备 把某系统双开的两个app的信息进行对比 1.1 目录的对比 1.1.1 data目录对比 原应用: /data/user/0/com.luoyesiqiu.crackme/files 被复 ...

  9. Android Studio(五):修改Android Studio项目包名

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

随机推荐

  1. 6.5.2 C# 中的函数组合

    6.5.2 C# 中的函数组合 C# 中的函数组合是可能的.但使用非常有限,这是部分是由于在 C# 中散应用不能非常easy使用.但更重要的是,由于大多数操作是用成员来写的.而不是函数.但我们至少能够 ...

  2. iOS开发 - 二维码的生成与读取

    二维码的生成 从iOS7開始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk眼下不支持64位处理器 生成二维码的步骤: 导入CoreImage框架 通过滤镜CIFilter生成二维码 二维 ...

  3. UE4 中的人工智能解析—ShooterGame为例

    在UE4编辑器中,打开内容浏览器,右击鼠标,创建传说中的行为树: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQTM2MzA2MjM=/font/5a6L ...

  4. hdu4089Activation 概率dp

    //一条队列对于第一个人的情况 //概率p1:队列保持不变 //p2:第一个人到队尾 //p3:第一个人出队 //p4:系统崩溃 //队列中有N个人,Tomato 在第M位置,求系统崩溃.Tomato ...

  5. 用jquery给select加选中事件

    select在前端开发过程中很常用,现在我们要实现一个效果,那就是选中select中的某一项,执行事件,本来自己没怎么接触过这些,最后网上找了一些资料,自己研究了一下,把方法分享给大家,大家如果有需要 ...

  6. Windows安装PHP MongoDB扩展

    本文将讲述一下在Wamp环境下安装MongoDB扩展的过程,大家可以略作参考 Linux 版本的可以参考之前发布的Linux安装PHP MongoDB扩展 安装环境 系统环境:Windows 7 64 ...

  7. fullpage中大的图片超过一屏怎么在手机端滑动显示?

    fullpage中大的图片超过一屏怎么在手机端滑动显示?(设置overflow电脑端是会出现滚动条的,但是在手机端不出现滚动条,图片也不可左右滑动显示) var $window = $(window) ...

  8. Webfont 的兼容性问题[持续更新]

    低版安卓手机的 webview 显示不了,另外黑莓手机显示出来是这样: 生成工具: 离线字体生成工具:webfont 在线字体生成平台:icomoon.io, iconfont.cn均有问题 其他一些 ...

  9. 重温前端基础之-css浮动之怪异现象

    其实,两种情况中box2的内容都是围绕着浮动元素box1来的. 因为:浮动元素会覆盖块元素,但块元素里的内容(内联盒)不会被覆盖,而是围绕着浮动盒. 将box1的背景色去掉,真相就大白了: 此时发现, ...

  10. HDU I Hate It(线段树单节点更新,求区间最值)

    http://acm.hdu.edu.cn/showproblem.php?pid=1754 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分 ...