Monthly Archives: May 2011

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ì 古同“历”。