Pages:  1 2 ... 10 11 12 13 14 ... 21 22
lytsing – Page 12 – lytsing's Blog

Author: lytsing

  • Android Market 之 deviceId

    有时候我们在market上无法下载软件,总停留在 downloading… 界面,有时候恢复出厂设置又可以下载了,这是为什么呢?

    在market上下载一个应用程序发出的URL请求,可以参考Tim Strazzere的博文 Downloading market applications without the vending app

    其中涉及到一个参数手机设备号,与Android_ID有关,这个Android_ID可以参看官方文档

    http://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID

    “A 64-bit number (as a hex string) that is randomly generated on the device’s first boot and should remain constant for the lifetime of the device. (The value may change if a factory reset is performed on the device.) ”

    AndroidId,通常用做识别唯一设备。可以通过下面的函数获取:
    String androidId = Settings.System.getString(getContentResolver(),
    Settings.Secure.ANDROID_ID);

    具体的函数实现与系统环境变量”ro.serialno”有关,大概过程是:

    /system/core/init/init.c 读取kernel启动参数 /proc/cmdline 获取 androidboot.serialno, 然后是设置系统变量

    property_set(“ro.serialno”, serialno[0] ? serialno : “”);

    下面是 HTC G1的kernel启动参数:

    ~ # cat /proc/cmdline
    board_trout.disable_uart3=0 board_trout.usb_h2w_sw=0 board_trout.disable_sdcard=0 smisize=64 androidboot.baseband=2.22.19.26I androidboot.cid=T-MOB010 androidboot.carrier=TMUS androidboot.keycaps=qwerty androidboot.mode=normal androidboot.serialno=HT839GZ04643 androidboot.bootloader=1.33.2005 no_console_suspend=1 console=null
    ~ # getprop |grep serialno
    [ro.serialno]: [HT839GZ04643]

    adb shell devices
    列出的就是ro.serialno , 如果为空,用默认的值: “1234567890ABCDEF”.
    注意,有些机器总是显示 9774d56d682e549c,说明系统环境变量”ro.serialno”没有设置,最近的Android 2.2代码已经修改这个bug.

    strazzere的博文提到,可以用 tcpdump与wireshark工具观察数据包,可以得到手机的deviceId。其实也不需要那么麻烦,Android Market依赖于Downloads这个provider,那么查看sqlite数据库也是一目了然的:

    $ adb pull /data/data/com.android.providers.downloads/databases/downloads.db .
    $ strings downloads.db

    或者可以这样找

    $ adb pull /data/data/com.android.providers.settings/databases/settings.db .
    $ sqlite3 settings.db
    $ .tables
    $ select * from secure

    据观察,deviceId跟ANDROID_ID有一定的关系,deviceId是Google服务器自动生成的。 在Android 2.2之前的版本,可以为伪造一个地址蒙蔽过关,SDK上提供的是16个0。而在android 2.2之后的market,这个值与email帐号挂钩起来了,如果不一致,会收到HTTP 400 的错误码,这样只好把手机恢复出厂设置,重新生成deviceId。

  • 2011.1.2 随记

    昨天的事。

    柏成到深圳一个月了,昨天我才有时间去坂田走走。先去逛一下华为单身公寓,美曰其名“百草园”,外号“里欧外非”——里面很漂亮,欧洲式的建筑风格,而百草园外面的情景,就像是非洲一样,天壤之别。在里面打了一个小时的桌球,然后看他的闺室,在马蹄山后面的禾坪村,住10楼,没有电梯。进去后,家徒四壁,只有一张床,一个热水壶,没有其他家具。跟我刚在新屋村住下来一样,床还是房东阿婆给我的。刚到深圳找工作时,在国贸见了漂飘学姐,她说:”在深圳,不需要太多的东西,一张床就够了。累了就睡,睡后继续上班工作“。

    中午突然收到谢星的短信,说到我住的地方碰头,开始是说晚上,只好放他鸽子了。德哥1号晚通宵,到下午了才醒来,跟我们去打一个小时的斯诺克,他有事,晚饭就我跟柏成去吃烤鱼。聊了很多事,感叹社会的黑暗,做技术的艰辛,生活的无奈,也在探讨未来之路。最近去华为的还有沈晓奇,李伟,他们那天都没空。华平去年十月份也跑到华为了,怎么大学同学都一窝尔的跑进去,有如当年奔向延安的进步青年一样。吃完饭又继续在路边打两个小时的桌球,很便宜,一小时4块钱,很适合像我这样打球靠狗屎运的新手练习。一下子玩到10点,334晚上最后一趟车是10点,还好可以坐317到梅林关。快到梅林关,有一个站是滢水山庄,很熟悉,突然想起findya师兄,好人啊,曾经到他住过的书香门第蹭住两个星期。07年末那里附近还是很荒凉,现在都是一排排整齐的楼了。到梅林关才发现没公车回来, 打的走南坪快线直接就到桃源村了,原来可以这么快!

  • Bluehost安装svn

    环境:

    Bluehost: 64位主机,可以通过 uname -a 命令查询,含有 x86_64 的就是64位系统了。
    svn: 目前最新稳定版本1.6.15。

    Bluehost用户目录下有个.local 目录,显然是为用户装自己的软件而提供的,那么以后我们要装的软件,都应该放在 $HOME/.local 目录下(来源:http://helpdesk.bluehost.com/index.php/kb/article/000530)。

    整个过程如下:

    mkdir ~/src
    cd ~/src
    
    wget http://subversion.tigris.org/downloads/subversion-1.6.15.tar.gz
    wget http://subversion.tigris.org/downloads/subversion-deps-1.6.15.tar.gz
    
    tar xvf subversion-deps-1.6.15.tar.gz
    cd subversion-1.6.15
    cd apr
    ./configure -prefix=$HOME/.local
    make; make install
    
    cd ..
    cd apr-util/
    ./configure -prefix=$HOME/.local --with-apr=$HOME./local
    make; make install
    
    cd ..
    cd neon/
    ./configure -enable-shared -prefix=$HOME/.local
    make; make install
    cd ..
    rm subversion-1.6.15 -rf
    
    
    tar xvf subversion-1.6.15.tar.gz 
    cd subversion-1.6.15
    wget http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz
    tar xvf sqlite-amalgamation-3.6.13.tar.gz 
    mkdir sqlite-amalgamation
    cp sqlite-3.6.13/sqlite3.c sqlite-amalgamation
    
    ./configure --prefix=$HOME/.local --without-berkeley-db --with-zlib=/usr/ --with-ssl LDFLAGS="-L/lib64"
    make; make install 

    后面报错:

    cp .libs/mod_dav_svn.soT /usr/lib64/httpd/modules/mod_dav_svn.so
    cp: cannot create regular file `/usr/lib64/httpd/modules/mod_dav_svn.so’: Read-only file system

    没关系,我只是用来做svn client就行了。

    最后,
    vi ~/.bashrc
    export PATH=$HOME/.local/bin:$PATH

  • Android SMS 写入UIM卡

    Smart Phone跟Featrue Phone不一样,短信不会放在ICC卡上,毕竟卡的存储空间是有限的。最近一网友很纠结,老在问我如何把短信写到UIM卡上?有没有办法写个通用的程序?这个主要决定于手机厂家没有实现相应的接口函数。

    Android 提供把短信写入ICC卡的接口为:

    frameworks/base/telephony/java/android/telephony/SmsManager.java copyMessageToIcc

    如果是CDMA的话,调用过程如下:
    frameworks/base/telephony/java/com/android/internal/telephony/cdma/RuimSmsInterfaceManager.java 里的函数 copyMessageToIccEf 调用

    frameworks/base/telephony/java/com/android/internal/telephony/RIL.java 里的 writeSmsToRuim ,这个要发出

    一个 RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM 请求号,RILD接收请求,传给 libril,再给 reference-ril,这样,只要在 reference-ril 里的
    onRequest (int request, void *data, size_t datalen, RIL_Token t) 处理这个 RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM 请求号即可,根据不同的模组,填入相应的AT处理函数。

    像XT800,i909双网手机,在长按单条短信时,都弹出复制SMS至UIM卡选项。通过反编译Mms.apk包,可以看出他们都自己实现自己的接口,而没有实现Android默认的Api。xt800提供了一个content://sms/icc provider,大致是这样实现的:

    String sSc = null;
    Uri uSim = null;
    ContentValues values = new ContentValues();
    values.put("type", Integer.valueOf(mBody.mBoxId));
    values.put("address", mBody.mAddress);
    values.put("body", mBody);
    values.put("data", Long.valueOf(mBody.mDateTime));
    values.put("service_center", sSc);
    
    if (MessageUtils.getDefaultMode().equals("CDMA")) {
        Log.("ComposeMessageActivity", "start copy msg to UIM");
        sSc = mContentResolver.insert(Uri.parse("content://sms/icc", values));
    } else if (MessageUtils.getSecondaryMode().equals("CDMA")) {
        sSc = mContentResolver.insert(Uri.parse("content://sms/icc2", values));
    }
    
    Log.("ComposeMessageActivity", "finish copy msg to UIM");

    i909的,自己实现
    private void copyMessageToUIM(MessageItem msgItem), 调用SmsManager.MakeSubmitPDU, 也是自己的实现的。

  • 程序员的气场

    文章来源: 中华剑(小贱贱)的QQ空间

    昨天和市领导还有软件公司一个老总去省委政法委开会,是省政法委关于综治信访维稳中心信息管理系统的征求意见会。到省委大院停车场下车时,看见前面有三个人也往1号楼方向走,其中两人身子有点瘦小,各背着个背包,走路时还有点弯着腰。于是老总说,估计这几个人也是去开会的,应该是搞软件的。待到我们到达会议室时,发现的确那三人就在会议室里,原来就是负责开发管理信息系统的软件公司的技术人员。后来跟老总交谈说他真猜对了,他说这就是程序员的气场 🙁 。于是让我想起《我是业主》里的李大辉。 😀