• 警告:本教程具有一定的危险性,不熟悉Android和Linux系统请勿使用,否则可能会导致手机变砖。

    提示:本操作基于HTC Desire(Oxygen 2.3,Android 2.3.7)进行,同时需要ROOT权限和ADB开发环境,不能保证所有手机都能适用。

    注意:使用该方法后,手机自带的Wifi热点会失效!

    首先,将手机设置为开发模式,然后通过数据线接入电脑。

    本站提供了2个模板文件和一个修改版的dnsmasq,请先下载该压缩包:

    http://www.chenshaoju.com/downloads/blogbus/dnsmasq.zip

    下在回来后,解压,会看到三个文件,分别是 dnsmasq , dnsmasq.conf , resolv.conf 。

    首先,需要对域名解析进行基本配置。

    用高级文本编辑器(比如PSPad)打开 dnsmasq.conf 文件。

    注意:请勿使用Windows自带的记事本打开,该文件使用的是Linux的换行符,不兼容Windows的换行符,用记事本打开可能会都堆在一起没有换行。

    找到:#address=/double-click.net/127.0.0.1 ,并新起一行,然后添加内容,比如:

    address=/www.baidu.com/119.75.218.45

    address=/www.sina.com.cn/202.102.75.147

    如果,有域名需要泛域名解析,那么可以这样:

    address=/vnet.cn/127.0.0.1

    如果如上配置,所有以 .vnet.cn 结尾的域名都会解析到127.0.0.1上。

    请按照自己所需的实际情况一行行的添加解析。

    当所需要映射的服务器配置完成后,再往下翻或按Ctrl + F,找到 #no-hosts ,并删掉前面的#号。

    这样做是为了避免dnsmasq去读取本机的Hosts文件。

    配置完成后,保存文件,然后打开 resolv.conf 。

    打开 resolv.conf 文件后,可以看到有四行内容,这四行是中国骨干网的DNS,一般情况下不用修改,如果你在国外,或者使用的是特殊的网络,可以删掉原有的IP地址,设置为你所在地的DNS。

    当都配置完成后,保存文件,然后退出。

    启动adb shell,然后运行:

    mount -t yaffs2 -o rw,remount /dev/block/mtdblock3 /system

    注意:不同的手机和系统可能会不一定,该命令是将 system分区挂载为读写,也许你的手机可能不是这个分区和类型,请注意判断并按照实际情况填写。

    运行结束后,输入 exit 退出 adb shell,然后用 adb push 命令将 dnsmasq.conf 和 resolv.conf 推送到 /etc/ 目录下:

    adb push D:\dnsmasq.conf /etc/dnsmasq.conf

    adb push D:\resolv.conf /etc/resolv.conf

    注意:路径可能不一样,请按照实际情况填写。

    当文件都推送完成后,请注意,以下步骤是用于判断你手机内置的DNSMasq是否存在并且工作正常。

    开启两个 adb shell 窗口,其中一个运行 top –m 9 命令,该命令会检测当前手机的负载情况。

    然后在第二个 adb shell 窗口运行:

    dnsmasq --pid-file=/cache/dnsmasq.pid

    注意,按下回车后请留意运行 top –m 9 命令的窗口,看是否有一个名为 dnsmasq 的进程占用了超过90%的CPU资源,如果没有,则继续,如果是,请再启动一个 adb shell ,然后运行:

    killall  dnsmasq

    并继续往后看。

    如果没有出现CPU爆满的情况,请回到第二个运行dnsmasq的窗口,然后按下Ctrl + C,并回到运行 top-m 9 命令的窗口,看是否有一个名为 dnsmasq 的进程占用了超过90%的CPU资源,如果没有,则继续,如果是,请再启动一个 adb shell ,然后运行:

    killall dnsmasq

    并继续往后看。

    如果出现了以上CPU爆满的情况,则说明手机内置的dnsmasq存在问题,需要更换。在本篇文章上方提供的压缩包下载里有一个修改版的dnsmasq,解决了该问题。

    用 adb push 将该 dnsmasq 推送到 /system/bin/ 目录下:

    adb push d:\dnsmasq /system/bin/dnsmasq

    然后启动一个 adb shell ,并设置其权限为751:

    cd /system/bin/

    chmod 751 dnsmasq

    推送完成后,回到 adb shell ,然后创建开机启动项:

    cd /etc/init.d/

    echo dnsmasq –pid-file=/cache/dnsmasq.pid >>89dnsmasq

    chmod 750 89dnsmasq

    输入完毕后,就创建了开机启动项,这样在系统启动的时候,会自动启动dnsmasq。

    最后,我们需要用第三方的软件来开机自动配置DNS,将DNS指向127.0.0.1:

    访问安卓电子市场,并安装 DNS Changer:

    https://market.android.com/details?id=com.eddypcz.dnschanger

    安装后,在界面上可以看到配置主要DNS的地方,我们将其输入为127.0.0.1,第二个输入框保持空白,然后点击SET按钮。

    然后,按下Menu键,点击Setting,选中Auto apply for WIFI 和 Auto apply for 3G,并且点击Set Primary DNS,输入127.0.0.1,然后选中Auto set primary DNS。最后,按返回键返回。

    现在,你的手机就按照内置的DNSMasq进行工作了。

     

    补充:

    默认情况,该配置文件会使得dnsmasq绑定在 0.0.0.0 的IP上,也就是说手机所在的Wifi局域网里都能使用该手机作为DNS服务器(一般情况),如果你不希望这样,可以在修改 dnsmasq.conf 文件的时候,搜索:

    # server=10.1.2.3@eth1

    并新起一行,输入:

    server=127.0.0.1

    那么DNSMasq就只会监听127.0.0.1,不会让其他人访问到了。

     

    参考资料:

    修改版DNSMasq: http://forum.xda-developers.com/showpost.php?p=17744219&postcount=2

    DNSMasq默认配置文件: http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq.conf.example

  • 最近安装了Ubuntu 11.04,笔记本自带的蓝牙+WLAN模块在系统进入休眠后,再次唤醒蓝牙会处于一种奇怪的状态:

    err

    如上图,点击蓝牙后,只有一个关闭蓝牙,蓝牙状态也是开,但是在这种状态下,无法连接其他蓝牙设备,其他蓝牙设备也无法发现笔记本。

    在网上搜索后,发现有两种解决方案:

    1.硬件关闭蓝牙,然后再开启。

    2.重启蓝牙服务。

    很明显,后者具有优势,但是每次唤醒后就得输入命令,的确很麻烦,因此,如果要彻底解决该问题,则最好通过休眠进程的脚本来解决该问题。

    以下是修复步骤:

    1.启动终端,输入:

    cd \etc\pm\sleep.d

    确认进入 sleep.d 目录后,输入:

    sudo vi 18_rstbt.sh

    会要求输入管理员密码,输入完管理员密码后,会进入 vi 编辑器界面,先按一下 Ins 键,进入编辑-插入模式。

    然后,输入以下内容:

    #!/bin/sh
    case "$1" in
        thaw|resume)
    /etc/init.d/bluetooth restart
    esac

    输入完成后,按一下ESC键,然后按下 :wq 回车,编辑器会保存该文件。

    最后,我们还得修改一下权限,让其成为可运行的脚本:

    chmod +x 18_rstbt.sh

    最后,就可以试一下看看是否生效了。如果不生效,则说明可能存在输入问题,必须仔细检查。

     

    参考资料:

    1.Ubuntu Suspend / Wake

    2.[分享]解决休眠后没声音的问题

  • 注意:对于普通用户,如果完成了Google提供的步骤后,将没有必要执行下列操作,以下步骤仅针对高级用户。

    注意:本例中的入侵者真实存在,但是该IP地址和最后管理者的联系方式并不一定适用于其他入侵者的IP地址。请按照自身实际情况进行操作。

     

    1.打开GMail底部的登录日志,记录入侵者的IP地址(如下图是117.18.99.171):

    0

     

    2.访问 http://news.nic.com/cgi-bin/whois ,搜索该IP地址所属的管理机构:

    1

    在本例中,搜出来的IP地址范围 117.0.0.0 – 117.255.255.255 属于APNIC管理,而说明里说如果要查询具体IP地址的管理机构,则需要访问 http://www.apnic.net/apnic-info/whois_search2/abuse-and-spamming ,我们直接访问此网址即可。

     

    3.打开了上面的网址后,在页面中部有一个名为“APNIC Whois Database”的链接,点击它(如下图):

    2

    在新出现的页面的 Search for 输入框中输入需要查询的IP地址,也就是入侵者的IP。

     

    4.搜索结果显示后,则会显示出该IP地址所属的具体机构(如图),入侵我的GMail邮箱的IP是属于IXTech Limited公司的,页面中还会提供该公司的管理员联系方式,比如电子邮箱和电话。

    3

     

    5.最后,我们就可以写信给管理者的电子邮箱,要求对这个IP采取限制措施。

    4

    一般情况,管理者会在24小时内(如上图)处理邮件请求,并且封掉入侵者所使用的IP地址。

    而通常,该IP地址仅仅是一个跳板(比如入侵者远程桌面到该IP地址的服务器上进行的入侵GMail操作等。

    至此,就完成了对该IP地址的具体措施,至于是否会追查到该IP的使用者,则取决于托管商的具体行为。

  • 警告:该操作非常危险,错误的操作可能会引起手机变砖,在开始前,请确认手机至少具备50%以上的电力。

    部分第三方的手机ROM已经具备该功能,在执行本文中的命令前,请检查 /sd-ext/ 目录中是否已经存在dalvik-cache目录。如果有,则无需进行以下操作。

    提示:本操作已忽略先决条件,基于Oxygen 2.1.2进行(HTC Desire,S-OFF),请自行检查是否具备Android SDK开发环境,ADB Shell,以及busybox。

    上一篇博文中,叙述了我的手机内置存储紧缺的问题,当时采取了删除部分应用的办法来解决。

    不过,由于Android实际上是基于Linux系统的,在安装了Busybox,并且对存储卡进行ext2/3/4分区后,可以通过创建一个链接将data分区中的dalvik-cache连接到sd-ext分区上,并将data分区中的dalvik-cache移动到sd-ext上。

    在开始前,需要将手机引导到Recovery环境下,然后执行以下步骤:

    1.检查/data和/sd-ext是否已经挂载:

    df –h

    Filesystem                Size      Used Available Use% Mounted on
    /dev/block/mtdblock3     90.0M     88.1M      1.9M  98% /system
    /dev/block/mtdblock5    337.6M    299.5M     38.2M  89% /data
    /dev/block/mtdblock4     10.0M      1.1M      8.9M  11% /cache
    /dev/block/mmcblk0p2    629.9M    437.6M    160.3M  73% /sd-ext

    如果没有看到 /data 或 /sd-ext ,则说明需要手动挂载,一般情况下,在Recovery里可以直接挂载。

    如果看到了 /data 和 /sd-ext 目录,则可以继续。

    2.检查sd-ext分区空间是否够用:

    首先,先查询 dalvik-cache 目录大小:

    cd /data

    du -s * | sort –n

    1       app
    1       app-private
    2       dontpanic
    2       lost+found
    4       local
    4       property
    4       secure
    15      backup
    42      anr
    46      misc
    505     system
    135462  dalvik-cache
    161988  data

    结果显示dalvik-cache占用了135462KB的空间(约为132MB左右)

    对比第一步命令所得出的空间,目前sd-ext分区还有160MB左右的空间,因此足够稍后的操作了。

    警告:如果空间不足,请不要继续,否则会引起灾难性故障!如果坚持继续,请关机并取出存储卡,备份所有数据后对存储卡进行重新分区。

    3.复制dalvik-cache到sd-ext分区:

    cp -a /data/dalvik-cache /sd-ext/

    警告:该复制过程不会有提示,请勿按Ctrl+C终止复制或拔出数据线,否则可能会变砖!

    执行该命令后没有提示,完成后会回到提示符,但是可以运行该命令来检查是否复制完成:

    ls /sd-ext/

    app           app-private   dalvik-cache

    如果已经存在dalvik-cache目录,则说明复制成功,下面,需要删除手机内存原有的dalvik-cache,并创建链接:

    4.删除原有dalvik-cache并创建到/sd-ext/的dalvik-cache链接:

    首先是删除:

    rm –r /data/dalvik-cache

    删除过程也不会有任何提示,耐心等待。回到提示符后,就可以创建链接了:

    ln -s /sd-ext/dalvik-cache /data/dalvik-cache

    切记不要弄错顺序,第一个是 /sd-ext/ 目录的,第二个才是 /data/ 目录的。

    命令运行后,也不会有任何提示,执行以下命令检查是否已经创建成功:

    ls /data/ –l

    drwxrwxr-x    1 system   system        2048 May 14 16:26 anr
    lrwxrwxrwx    1 root     root            11 May 14 15:50 app -> /sd-ext/app
    lrwxrwxrwx    1 root     root            19 May 14 15:50 app-private -> /sd-ext/app-private
    drwx------    1 system   system        2048 May 15 12:55 backup
    lrwxrwxrwx    1 root     root            20 May 15 12:53 dalvik-cache -> /sd-ext/dalvik-cache
    drwxrwx--x    1 system   system        2048 May 14 22:42 data
    drwxr-x---    1 root     log           2048 May 14 15:50 dontpanic
    drwxrwx--x    1 shell    shell         2048 May 14 15:50 local
    drwxrwx---    1 root     root          2048 May 14 15:50 lost+found
    drwxrwx--t    1 system   misc          2048 May 15 12:54 misc
    drwx------    1 root     root          2048 May 15 09:24 property
    drwx------    1 system   system        2048 May 14 15:50 secure
    drwxrwxr-x    1 system   system        2048 May 15 13:02 system

    如上面的内容,如果是 dalvik-cache –> /sd-ext/dalvik-cache ,就说明创建成功了。

    我们可以用df命令检查一下/data/分区是否多出了空余空间:

    df -h
    Filesystem                Size      Used Available Use% Mounted on
    /dev/block/mtdblock3     90.0M     88.1M      1.9M  98% /system
    /dev/block/mtdblock5    337.6M    168.5M    169.2M  50% /data
    /dev/block/mtdblock4     10.0M      1.1M      8.9M  11% /cache
    /dev/block/mmcblk0p2    629.9M    571.3M     26.7M  96% /sd-ext

    现在 /data/ 分区已经有50%的剩余空间了,而存储卡则缩减到了4%,不过还有26MB的可用空间,应该没什么问题。

    最后,重启手机即可完成全部操作。

  • 在开始前,如果你是初级用户,推荐使用系统自带的应用程序管理功能进行排序查看。不正确的命令或操作可能会引起手机变砖。

    本教程已经忽略先决条件,请具备Android SDK环境,具备adb shell命令行,以及Busybox。

    首先,需要先查看全局空间占用情况,很简单:

    df –h

    该命令会列出每个分区所占用的空间情况,如下表:

    # df -h
    df -h
    Filesystem                Size      Used Available Use% Mounted on
    /dev/block/mtdblock3     90.0M     88.1M      1.9M  98% /system
    /dev/block/mtdblock5    337.6M    299.5M     38.2M  89% /data
    /dev/block/mtdblock4     10.0M      1.1M      8.9M  11% /cache
    /dev/block/mmcblk0p2    629.9M    437.6M    160.3M  73% /sd-ext

    对于用户来说,主要就是这三个分区。本例中, /data 分区要满了,所以我们还可以分析一下 /data 空间中什么占用最多。现在,需要用du命令:

    du -s * | sort -n
    1       app
    1       app-private
    2       dontpanic
    2       lost+found
    4       local
    4       property
    4       secure
    15      backup
    42      anr
    46      misc
    505     system
    135462  dalvik-cache
    161988  data

    按照字节来进行排序。

    目前发现 data 目录占用最大,其次是dalvik-cache,所以从data目录下手。

    进入data目录后再次运行du命令:
    du -s * | sort -n
    4       android.tts
    4       aws.apps.networkInfoIi
    4       com.android.calculator2
    4       com.android.calendar
    4       com.android.camera
    ……
    9167    com.jupiterapps.phoneusage
    10145   com.opera.browser
    11185   sts.pl
    12027   com.gameloft.android.GAND.GloftAsp6.asphalt6
    15195   com.google.earth
    #

    最大的会列在最后,谷歌地球,Asphalt6(一款赛车游戏)等占用了大量的空间。

    因此,我们就可以评估一下软件的必要性,然后给予删除。