December 20th, 2010

开启Google Maps 5 for Android的矢量和离线功能

  紧跟Nexus S的发布不几天,Google就把革命性的Google Maps 5 for Android放到了菜市场上供下载。新版的应用包含矢量3D和离线两个最炫的功能(当然大陆是没有3D的啦),但是在我的Sprint Hero CDMA上更新后却无法开启这两个功能。很多网友同样也抱怨自己的机器有类似的现象。XDA上的大牛Brut.all给出的解释是一方面Google会根据手机类型、OS、网络所在国家决定一系列功能的开启与否,另一方面,许多旧机器硬件上(包括G1)是具备Multi-Touch功能的,但是被软件给锁住无法开启。

  还是XDA最给力,综合了几个大牛的指导,完美的解决方案如下:

  1. 首先手机必须要提权到root,这个不用多说。
  2. 接下来完全卸载删掉手机原ROM自带的或者手动安装的Google Maps(去/system/app和/data/app找找)。
  3. 然后下载安装Brut.all新修改的Maps 5应用
  4. 这里下载多点触摸补丁,解压缩到/system/etc/permissions目录下,并且设置权限为644。删除或者重命名手机里原有的多点触摸xml文件。
  5. Reboot。

  Google太给力了!不过我用WireShark抓包观察过Google Maps for Android与Google服务器之间的交互,尽管走的还是http请求,但是数据全部都是二进制的不可读的,跟Google Maps API完全没有任何交集。也许Google根本不想公开手机端的API。Anyway,现在终于能用上最新的矢量+离线功能了。

by

ny

Tags: , ,

November 25th, 2010

Simplenote API Proxy in PHP

  长久以来我一直在寻找一款能够在Android、Windows、Linux桌面,或者Web之间进行简单文字同步的工具,随手写一两行plain text,以进行备忘,提高工作效率,节省时间。Evernote非常不错,但是没有Linux桌面支持是硬伤。后来发现了Simplenote这个服务。

  Simplenote提供的是非常简洁高效的文字同步服务,所需要关注的只有标题、文本、标签、时间等等,几乎没有什么冗余的元素,而且支持Android、iPhone、Web等许多客户端,并且开放API,这些正是我所需要的。然而可惜Simplenote的服务架设在Google App Engine上,同时大量的客户端在同步的时候使用的是https来进行请求,这在景德镇是访问不能够的事情。可是我实在非常喜欢这么一款服务。

  借助@yegle同学的twip思想,我花了点时间用php写了一个Simplenote的API Proxy,托管在了github上。因为加入Simplenote的API Group需要提交申请,他们的工作效率太低了直到我写完才给我通过,进去后才发现原来Simplenote已经发布了v2版的API,不过貌似我接触的几个客户端都是用的是旧的v1版。其他列在TODO list中的东西有https/http适配、如何处理cookie这两个个问题。先不管了,用apktool修改了Android上的一个Simplenote客户端AndroNoter,然后修改了Firefox的插件QuickFox Notes,都改用我自己搭建的代理访问,它工作起来真像一个charm!

Simplenote

  恩,如果有一款Android上的4*4的Widget就更好了,直接离线显示一篇text就可以了。不知道是否有时间折腾,最近太忙了。

Tags: , , ,

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 7th, 2010

[MOD]屏蔽Sprint Hero黑屏时MENU键的解锁功能

本MOD功能:

  1. 原先手机黑屏后,不小心按下MENU键也会触发屏幕解锁。刷了这个补丁后则不会触发。这样手机放在兜里再也不用担心不小心碰到MENU键了。
  2. 除了修改MENU键屏幕解锁外,本补丁不影响原rom的其他任何功能。

适用机型:

  Sprint HTC HERO200

适用rom:

  基于Sprint官方1.5 / 2.1 RUU制作的所有rom(不适用于基于eris制作的rom)

安装方法:

  1. 下载附件,更名为update.zip复制到sd卡上
  2. 重启手机,按住小房子+挂机键进入Recovery模式,保险起见建议做个Nand Backup备份
  3. 不需要Wipe,直接刷这个update.zip

下载地址:

  keylayout.zip

PS. 感谢阿土伯、老梁为本补丁做的测试。刷机有风险,本人不对刷机失败负责。

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: , , , ,