Pages:  1 2 ... 7 8 9 10 11 ... 21 22
lytsing – Page 9 – lytsing's Blog

Author: lytsing

  • adb 通过 wifi 连接 Android 设备

    1. 需要 root 权限

    代码修改点:

    /system/extras/su/su.c

    60     /* Until we have something better, only root and the shell can use su. */
    61     myuid = getuid();
    62     if (myuid != AID_ROOT && myuid != AID_SHELL) {
    63         fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
    64         return 1;
    65     }
    
    67   if(setgid(gid) || setuid(uid)) {
    68       fprintf(stderr,"su: permission denied\n");
    69        return 1;
    70    }

    把63,64,68,69 行注释掉,编译生成su,然后push到设备。

    adb push su /system/xbin/ 
    adb shell chmod 6755 /system/xbin/su

    2. 安装 adbwireless 软件,一键搞定
    在电子市场上搜 adb,前面两个随便选一个都行。
    adb-wifi in market

    如果电子市场上不了,在 Terminal Emulator 直接输入:

    setprop service.adb.tcp.port 8000
    stop adbd
    start adbd

    通过adb 连上设备,下面是我机器上的操作结果:
    deli@deli-laptop:~$ adb connect 192.168.1.103:8000
    already connected to 192.168.1.103:8000
    deli@deli-laptop:~$ adb shell
    # busybox sh
    / #

  • windows xp 使用VirtualBox 安装 Snow Leopard

    按照这篇文章操作,基本可以搞定。补充些内容吧。

    一、我的PC配置:

    CPU:Inter(R) Core(TM)2 Duo CPU E7400 @ 2.80GHz
    内存:4.00GB
    显卡(集成): 英特尔 G41 Express Chipset ( 256 MB / 微星 )
    操作系统:Windows xp(32位)

    二、虚拟磁盘分区

    原来的磁盘分区都是fat格式,最大支持单个文件只有4G,我要在D盘上安装,将D盘转化为成NTFS

    convert D: /fs:ntfs

    这台机器原来搞过MTK开发,装了图像处理软件ImageMagick ,这个软件也包含一个convert命令。所以输入上面的命令后,发现错误,先把它卸载掉。

    在选择磁盘向导中,创建一个30G大小的虚拟磁盘,出于性能考虑,创建fixed-size类型的虚拟磁盘。

    装完 Snow Leopard系统,就占用近10G的空间,做开发需要要装Xcode,大块头,光安装文件就要下载4个多G,安装需要 10G的空间。矮油!我只分配20G的虚拟分区都不够用,后面又得重新安装。

    三、分辨率的设置

    默认分辨率是1024 * 768,在Video info选项没有我想要的分辨率,需要手动新建。

    1. 找到VirtualBox的安装路径,下面有一个VBoxManage.exe文件,在命令行切换到这个目录,然后执行以下命令:

    VBoxManage setextradata "Snow Leopard" CustomVideoMode1 1440x900x32

    Snow Leopard 是我mac虚拟机取的名字

    2. 重启引导启动,在启动界面 输入:

    "Graphics Mode"="1440*900*32"

    四、其他设置

    显示–>显卡。把显存拉到最大,我的是128M,将启用3D加速勾上。
    系统–>处理器–> cpu数量,我的改为2。

    =更新(2011/5/27)=
    iAtkos s3 v2,系统的版本是10.6.3,gcc,make这一堆东西没有,要装xcode这一坨4G多的东西,xcode4要求是10.6.6+。几次升级失败后,痛定思痛,为何不开始就直接装 10.6.6版本呢。于是google一下,按 Installing Mac OS X Snow Leopard 10.6.6 on VirtualBox 安装ok.

  • Android Market 架构设计解析

    1. 没有源代码。
    2. 通过反编译工具(apktool/dex2jar),察看网络数据包工具(tcpdump/wireshark)研究,不能保证100%的正确,但整体的思路还是能看出来的。国内也有很多第三方电子市场,但形像神不像。

    Android Market Overview : Client & Server

    大致的代码目录(android 1.5版本, 后续版本比较复杂):

    Vending
    |-- AndroidManifest
    |-- res
    |   |-- drawable
    |   |-- drawable-finger
    |   |-- layout
    |   |-- menu
    |   |-- values
    |   `-- xml
    `-- src
        `-- com
            |-- android
            |   `-- vending
            |       |-- SuggestionsProvider.java
            |       |-- ...
            |       |-- VendingNotificationManager.java
            |       |-- adapters
            |       |   |-- AggregatedAdapter.java
            |       |   `-- SectionAdapter.java
            |       |-- api
            |       |   |-- ApiException.java
            |       |   |-- ...
            |       |   `-- UninstallReasonService.java
            |       |-- cache
            |       |   |-- CacheManager.java
            |       |   |-- CacheManagerImpl.java
            |       |   `-- Cacheable.java
            |       |-- controller
            |       |   |-- ActivityAccessor.java
            |       |   |-- ...
            |       |   `-- ResultsController.java
            |       |-- licensing
            |       |   |-- ILicenseResultListener.aidl
            |       |   |-- ILicensingService.aidl
            |       |   `-- LicensingService.java
            |       |-- model
            |       |   |-- Address.java
            |       |   |-- ...
            |       |   `-- UninstallReasonResponseProto.java
            |       `-- util
            |           |-- Base64.java
            |           |-- ...
            |           `-- Util.java
            `-- google
                `-- android
                    |-- googleapps
                    |-- googlelogin
                    `-- providers

    代码文件命名规则

    每个Activity,以Activity为后缀,比如AssetCategoryBrowserActivity.java
    api目录中,继承BaseService的类,以Service为后缀,比如AssetService.java
    model目录中,提供Protobuf TAG的类,以Proto为后缀,比如UninstallReasonResponseProto.java

    用到的设计模式

    MVC, COR(Chain Of Responsibility), Observer(Notification机制), State ,Singleton,Abstact Factory等,看Android的源代码,这些都很常见。除此之外,对于Server/Client 网络系统,Service Locator, Request-Response,lazyload等设计方法也用到。

    数据交换格式protobuf

    Protocol Buffers in Android 稍有提到过,protobuf传输的是二进制,比Json、XML有速度上的优势和使用的方便,服务器端可以用C/C++,Java,python等实现。

    API

    http://code.google.com/p/android-market-api/
    Android Market 的开源 API 项目,非官方提供的,基于Google Protocol Buffers 协议实现。

    Cache 机制
    Cache 可以保存在内存,也可以写入disk上。

    /data/data/com.android.vending/cache # ls
    AVMC_UAR{-5434199881535588028_}_____0_10_rei___
    AVMC_UAR{8501175443043592143_}_____0_10_rei___
    AVMC_UAR{}APPLICATION__APP_WALLPAPER_POPULAR_ALL_0_10____
    AVMC_UAR{}APPLICATION__APP_WALLPAPER_POPULAR_ALL_10_10____
    AVMC_UAR{}_____0_10__rvh__
    AVMC_UCR-5434199881535588028_0_3_self_
    AVMC_UCR8501175443043592143_0_3_self_
    AVMC_UGIR_-2863385711196347958
    AVMC_UGIR_-4594342797900232749
    AVMC_UGIR_-5005302620309917353
    AVMC_UGIR_-543419988153558802
    ......

    AVMC_UGIR_-543419988153558802的格式是这样的:
    “AVMC_” + “U”/”S” + “GIR_” + assetId

    其他类似。

    具体实现,可以参考libaddressinput 里的 Cache.java

    本地数据库

    /data/data/com.android.vending/databases/assets.db

    把它 pull 出来,用 sqlite3 工具可以看到数据表。这个主要用来保存下载过的apk信息。

    PUSH 通知

    有软件更新时,就用push推送消息,com/google/android/server/checkin/CheckinService 收到消息后,给market发送一个 “com.android.vending.UPDATES_AVAILABLE” intent。push机制,android froyo之前,用的是XMPP协议,之后是c2dm。

    支付系统

    Google checkout, 没有用过。

    还有很多很多细节的东西,不一一详述。总之,做这么一个平台,需要考虑的东西太多了,不是一个人可以搞出来的。

  • 梅泉文昌阁

    古迹寻踪

    梅泉文昌阁,位于广西平果旧城菊良村,以下文字摘自 《独石滩》 2008年10月15日 双月 总第33期

    —————————— 分割线开始 —————————-

    梅泉文昌阁

    从东壁塔往西约二里,在菊良村小学附近的一座山坡上,有一口美丽的古泉,名叫梅泉,泉水清澈如镜,源源终年不断,泉边长着一颗千年梅树,与泉水相衬妣美,实为胜景之地,故称“梅泉胜景”。

    咸丰初年,在菊良村百良屯秀才黄俊冠的倡导下,当地有名之士捐资献料,出谋献策,在这里修建了一座规模雄伟,金碧辉煌的寺庙,名曰梅泉文昌阁。庙内设立神牌佛像,有观音菩萨,红脸关公,十八罗汉等,生态逼真,惟妙惟肖。正门有一块雕着“梅泉胜景”的大石横匾安置其上,其字苍劲有力,颇有“笔锋腾虎豹,墨浪走蛟龙”之感,落款为周孔惠手笔。门前竖立一块约2米,宽约1米的大石碑,这就是“梅泉文昌阁碑”,记载着文昌阁建立的背景,位置,经过以及某地某人捐资捐物数。碑文首句曰:“人才不择地而生”,这一论点充分说明当时立碑者思想前卫,对后一代有着积极的影响。还有一块“梅泉诗”碑立于寺后,后两句为“梅泉涌出芙蓉镜,留着他年及第人”,这就是说前人的光辉,永远照耀着后人开拓前进。

    遗憾的是,如今“梅泉胜景”虚存其名,“文革”期间,辉煌的文昌被“四旧”砸得粉粹,善良的菩萨,威武的关公,乐观的十八罗汉也是难逃劫难,就连泉边的千年梅树也消失无踪。无情的历史,给“梅泉胜景”带来致命的创伤,如今只剩下清流、石匾、记事碑而已。倘若建造者们在天有灵,一定为此落泪啊。
    —————————— 分割线结束 —————————-

    梅泉文昌阁碑文

    人才不择地而生。郡以北二百里有奇为兴宁寨。风俗淳朴,不尚文逦迤,而前砠之凹梅泉出焉,山下出泉象取诸蒙,有景行育德之义,乡人士 甞遨其间,山不高而秀,泉不深而清,盖勝景也。余倡捐鸠工庇材,帖泉建阁设文昌帝君像,众皆可期年而落成,复屋重檐,折瓴分流,上下两层,开门九配就德,通窗六准六经。壁上绘花卉人物,譬儒者襟怀,无所不备也。告竣携同志登阁以观四面环云,一泓貯静。有非人思议所及殆,妙想天开也乎。东望星岭联珠,佛宇新泉掩映成趣。值此文机,朗畅光聚,奎气射斗,匠心独运,手造五凤楼觉流水,今日明月前身,几得意忘言者矣?由是而西,簇笔峰高,如玉荀遥簪, 铓毫束立,鼓文心之精锐,为处囊锥,为出匣剑,雕虫小技勿庸也。放鹰山峙,其南神情奇肆, 倐起倐落,不可摸捉。非文势之,积健为雄,变化莫测者,与北则股帽山俯让泉,知文情之大雅,春容宛从端章,甫习礼乐中来也。睹斯阁也,因遨而见景,因景而悟文,夫豈徒为是登临之乐也耶。虽然余将有进焉,且夫士君子之立学也,先器识而后文艺,尚道德而默词章。实之不存,虚车饰无,当也,未也。其存心光如泉鱼在藻,厯厯可数,其立平清正;如泉泻石磴,冰在玉壶;其制行洁白,如泉之涓涓,始流淤泥而不染。如此有文有本,活泼泼地胸别具一泉。孔曰在川,孟曰观澜,此物之志也,不纵使英豪蔚起,文同翻水,思若涌泉, 立阁之本意哉。居山陬而振文凤,请自隗始,若筮虎变,占鹤鸣,翻然为图南鹏以光宠斯阁者,余将拭目以俟后之人!

    黄俊冠拜撰

    咸丰四年岁次甲寅孟春月吉时立

    注:原文繁体字无标点,此标点正确与否,共商榷

    甞 cháng 古同“尝”。
    逦迤:读音lǐyǐ 曲折连绵。也作“迤逦”
    砠: 读音jū 上面有土的石山;一说为上面有石的土山。
    瓴: líng 古代一种盛水的瓶子:高屋建瓴(从房顶上往下泻水,喻居高临下的形势)。
    貯 zhù 见“贮”
    铓 (鋩) máng 刀剑等的尖端;锋刃:锋铓。剑铓。
    倐 shū 同“倏”。
    豈 qǐ(岂的繁体字)
    陬 zōu 隅,角落:陬见(粗浅的见识)
    请自隗始 qǐng zì wěi shǐ 复句式;作谓语;比喻自愿带头
    筮 shì 古代用蓍草占卦:“龟为卜,策为筮”。筮仕(古人将出外做官,先占卦问吉凶。后称初次做官为“筮仕”)。
    俟 sì 〔俟次〕依次。 等待:俟机进攻。
    厯 lì 古同“歴”
    歴 lì 古同“历”。

  • Android代码真是精益求精

    看了一个ChangeLog,

         private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
             public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                 Intent intent;
    -            int i = position - 1;
    +            position = position - 1;
                 
    -            switch (i) {
    +            switch (position) {

    一个变量都不想加,对应的ddx格式为:

     67     sub-int v0, p3, v2
     68 
     69     .line 339
     70     .local v0, i:I
     71     packed-switch v0, :pswitch_data_0
    
    
     67     sub-int/2addr p3, v1
     68 
     69     .line 339
     70     packed-switch p3, :pswitch_data_0