Archive for the ‘Google’ Category

August 14th, 2010

Android与我的Daily Life

  实验室同学问我为什么喜欢Android,怎么说呢,我觉得它特别可折腾,我俨然已经把它当成一台电脑来折腾了,更不必说它是如何融入我的日常生活的。照搬小学弟sayisee同学的创意,我也做了一个自己的android的timeline或者说waterfall,也算梳理一下每天的android生活吧。

timeline

  本文参加的是“首届 Google 暑期大学生博客分享大赛——2010 Android 篇”比赛。再次说明,这个timeline创意不是我想出来的,如果同学们觉得这个创意很不错,就请去sayisee同学的大学生乱弹琴博客那里留言帮他顶起支持他吧,谢谢。

Tags: ,

June 16th, 2010

如何建立android的C/C++交叉编译环境

  Android的底层是纯粹的linux内核,可以简单的理解为上面跑了个Dalvik Java虚拟机而已。因此,构建android上C/C++的交叉编译环境也就成为了一个很大的需求。特别是对于已经取得root权限的机器,如果能直接运行按需编译的二进制文件,那么将可以做很多有意义和有趣的事情。

  很不幸,Google没有直接给出如何建立这个交叉编译环境,但是我们可以借助Google提供的强大的NDK (Native Development Tools)来达到这一目的。NDK的本来目标是编译得到.so动态链接库文件,然后通过JNI提供给上层的Java调用,从而实现C/C++程序的简易迁移。而编译.so和编译成二进制可执行文件的过程是完全一样的,这就给了我们可以发挥的空间。

  有两种方式获取交叉编译所需的工具链:git下prebuilt这个project或者直接去下载NDK,我这里arm-eabi的版本是最新的4.4.0。

1
git clone git://android.git.kernel.org/platform/prebuilt.git

  然后创建一个helloworld.c文件。

1
2
3
4
5
6
//// root@delleon:~/android/myapp# cat helloworld.c
#include <stdio.h> 
int main() { 
  printf("HelloWorld!n"); 
  return 0; 
}

  接下来创建Makefile文件。注意修改其中的NDK_DIR和SDKTOOL为自己的目录,修改APP为自己的待编译程序主文件名。另外注意自己的arm-eabi的版本,若有变化则也需要修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#### root@delleon:~/android/myapp# cat Makefile 
APP=helloworld
 
NDK_DIR := ~/android/android-ndk-r4
NDK_HOST := linux-x86
SDKTOOL := ~/android/android-sdk-linux_86/tools
 
TOOLCHAIN_PREFIX := $(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.4.0/bin/arm-eabi-
CC := $(TOOLCHAIN_PREFIX)gcc
CPP := $(TOOLCHAIN_PREFIX)g++
LD := $(CC)
 
COMMON_FLAGS := -mandroid -ffunction-sections -fdata-sections -Os -g 
	--sysroot=$(NDK_DIR)/build/platforms/android-5/arch-arm 
	-fPIC 
	-fvisibility=hidden 
	-D__NEW__
 
CFLAGS := $(COMMON_FLAGS)
 
CFLAGS += -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID -DSK_RELEASE -DNDEBUG
 
CFLAGS += -UDEBUG -march=armv5te -mtune=xscale -msoft-float -mthumb-interwork -fpic -ffunction-sections -funwind-tables -fstack-protector -fmessage-length=0 -Bdynamic
 
CPPFLAGS := $(COMMON_FLAGS) 
	-fno-rtti -fno-exceptions 
	-fvisibility-inlines-hidden 
 
LDFLAGS += --sysroot=$(NDK_DIR)/build/platforms/android-5/arch-arm 
LDFLAGS +=  -Bdynamic -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc   
LDFLAGS += -L$(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0 
LDFLAGS += -L$(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.4.0/lib/gcc 
LDFLAGS += -L$(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.4.0/arm-eabi/lib 
LDFLAGS += -nostdlib -lc -llog -lgcc 
	--no-undefined -z $(NDK_DIR)/build/platforms/android-5/arch-arm/usr/lib/crtbegin_dynamic.o $(NDK_DIR)/build/platforms/android-5/arch-arm/usr/lib/crtend_android.o 
 
OBJS += $(APP).o 
 
all:    $(APP) 
 
$(APP):    $(OBJS) 
	$(LD) $(LDFLAGS) -o $@ $^ 
 
%.o:    %.c 
	$(CC) -c $(CFLAGS) $< -o $@ 
 
%.o:    %.cpp 
	$(CPP) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ 
 
install: $(APP) 
	$(SDKTOOL)/adb push $(APP) /data/local/bin/$(APP) 
	$(SDKTOOL)/adb shell chmod 755 /data/local/bin/$(APP) 
 
run: 
	$(SDKTOOL)/adb shell /data/local/bin/$(APP) 
 
clean: 
	@rm -f $(APP).o $(APP)

  最后直接make,然后make install进手机里看一下吧。通过adb shell和手机里的Terminal等软件执行的结果是一样的。

toolchain

  后记:还有一个叫Codesourcery的工具链,下载下来有130多M,我使用它来编译helloworld时无误但是放到手机上则运行不起来。不想细究了,我认为NDK提供的工具链已经非常优秀。感兴趣的朋友可以自己试试Codesourcery。

Tags: , , , , , ,

June 4th, 2010

Sprint HTC Hero 2.1 Release成功提权到root

root

  从Sprint 5月19号发布官方2.1升级,到今天获取root,一共用了整整半个月的时间,期间我和其他朋友尝试过各种方法来试图获取都失败,怪不得Sprint发布2.1时老是跳票,其实绝大多数时间都是去给kernel打补丁去了。期间跟regaw讨论过好几次,都进展不佳,要找kernel版本为2.6.29的提权漏洞并且最好是5月份以后泄露的,这真是一件困难的事情。

  Regaw最后使用的办法是通过修改matt写的一个EVO 4G提权漏洞进而使帮助CDMA Hero也获取了提权。感谢大家的努力!

  另外在root的过程中我没有刷boot.img。昨晚我帮regaw重新打包了一遍boot.img,这个新boot.img与官方ruu版本中的boot.img唯一差别就是其kernel中的build.prop文件ro.security的值从1改为0。刷与不刷的区别就是,新的boot.img可以使得开机时即进入root,而保留原来的boot.img则需要开机后手动之行su命令才可以切换到root。

  历史会永远记住伟大的这一天(你们懂的)。需要获取root的请check这个连接:[GUIDE] How to Root Sprint 2.1 Release for CDMA Hero

Tags: , , , ,

October 17th, 2009

Google Wave提名邀请名单

  在上一篇文章中留言为奇数号的前6位朋友获得这次Google Wave的提名邀请,其中Siris L重复发评论一次,所以它的第二个机会向下转让给hnws朋友。

  最终获得邀请的名单如下:Siris L、hnws、sol、jinhe1314、triStoneL、小石头。然后Lemok,我把自己预留的那个邀请送给你了。再加上之前的princetonois。一共8位,已经进行了提名邀请,恭喜大家。等各位收到Google Wave的正式邀请时,想要感谢我,就来我Blog点右下方的Adsense广告吧^_^

  Google Wave is more fun when you have others to wave with, so please nominate people you would like to add. Keep in mind that this is a preview so it could be a bit rocky at times.

  Invitations will not be sent immediately. We have a lot of stamps to lick.

  Happy waving!

Tags: , ,

October 15th, 2009

赠送Google Wave提名邀请

  自己已经把自己的Google Wave账号从沙盒测试激活到了真正的Google Wave,现在有8个提名邀请名额。关于Google Wave的提名机制就去Guao那里看吧http://google.org.cn/posts/from-wavesandbox-to-google-wave.html注意被提名的用户将不会收到任何邮件或其他信息,你们将会在下次wave发送邀请时被优先考虑。同时希望大家像火炬接力一样,把提名传下去。也就是说在这里获得提名并最终获得邀请的用户,希望你们可以留几个提名给其他留言的网友,感谢大家!

  我自己会预留1个邀请,网友princetonois在本文发表前提前向我要了一个提名,所以现在只剩下6个了,这6个邀请全部送出,需要朋友请在本文留言吧(有空的话,请顺便帮我点下右面的Google Adsense广告哦^_^),按照留言顺序随机抽出6个赠送~。

Tags: , ,

October 13th, 2009

基于PHP的Google Voice 短信API

  Google Voice并没有提供官方API接口,但是实际上还是可以通过HTTP和XML请求的手段来实现。目前网上能够找到的API最终大都是溯源到Chad Smith的这篇主题帖

  要通过Google Voice实现发送短信,首先要登录到Google Voice账号,然后取出页面中的“_rnr_se”参数,最后把这个参数和对方手机号、短信内容POST到Google Voice SMS的地址即可。Tyler Hall曾经写过一个Google Voice的php类,但是我试用时并不成功,总是卡在登录Google Voice的过程上。对此我二次开发了它的这个类,重写了绝大部分代码。

  经过实际尝试,我没有使用Chad Smith的XML请求地址,而是使用了移动终端版的Google Voice请求地址并且根据需要改动了POST请求的参数,最终搞定了一个基于php的Google Voice短信发送工具,调用地址在http://www.lostleon.com/tools/googlevoice/,项目地址在http://phpgooglevoice.googlecode.com/

  很遗憾,我的天翼189号码不被Google Voice支持。移动158号码测试通过。

Tags: , , , , ,

October 12th, 2009

对多人群发Email时to和cc的区别

  突然冒出一个疑问,发送邮件的时候,to和cc都可以以逗号隔开来填写多个目标地址,那么二者有何区别呢?

  按常理想,to域中的地址才是真正的目标地址,而cc则只是简单的对第三方抄送。所以,若接收者的地址在to域中,则他可以直接回复邮件到sender;而若接收者的地址在cc域中,那么他只是相当于旁听了这封邮件而已而。

  可是,至少在Gmail中,若自己作为接收者,无论身处to域或者cc域,都有Reply和Reply to All功能,并且reply的目标地址和抄送地址完全仿照原邮件。这样完全看不到to和cc的区别。这是就to和cc的本意,还是Gmail自作主张呢?

Tags: ,

April 8th, 2007

谷歌!=Google ??

guge_pinyin_logo.gif

  谷歌拼音输入法在实验室发布(2007年4月4日)以来,我们收到了用户大量的反馈和建议,其中,我们特别注意到了部分用户对谷歌输入法词库的质疑。该词库在试验阶段确实包含了一些非Google(谷歌)的数据源,我们愿意直面自己的问题。
我们为因此带来的不便表示抱歉的同时,立即采取了行动。本周日(2007年4月8日)的中午,我们完成了谷歌拼音输入法发布以来的第二次全面升级(谷歌拼音输入法 1.0.17.0版本)。
目前的词库是从谷歌多年积累的海量搜索数据库数千万条目中产生, 我们欢迎用户与业界对我们升级版本给予更多的反馈和监督。最后,谷歌自身、同时也希望同业界共同努力,为提升输入法的全面升级、功能突破作出长期、踏实的 实质性工作,不断的为用户提供更多、更好的应用体验。

谷歌专门向新浪科技发去声明,声明“谷歌拼音”的词库抄袭问题。风波结束了??留给我们什么? Read the rest of this entry »

Tags: