Firefox for Android 代理设置

目前发现 Android 平台的浏览器原生支持代理配置的仅 Firefox for Android(官方下载),不仅支持 HTTP、HTTPS 和 Socks4、5,还支持 PAC 脚本。

全局代理配置
在 Firefox 中访问 about:config,使用 proxy 过滤器并的找到 network.proxy.socks, network.proxy.socks_port, network.proxy.socks_remote_dns, network.proxy.type 并更改成图中配置。
Screenshot_2014-09-19-13-34-16

Screenshot_2014-09-19-13-34-28

自动代理配置
将 PAC 脚本放至于 /sdcard/proxy.pac,在 Firefox 中访问 about:config,使用 proxy 过滤器并的找到 network.proxy.autoconfig_url, network.proxy.type 并更改成图中配置。
Screenshot_2014-09-19-13-33-51

Screenshot_2014-09-19-13-42-48

Over!

TL-TR761 3G无线路由器启用 ADB Server

入手一个 TL-TR761 2000L 3G无线路由器,使用下来总体感觉不错,但偶尔会出现无法连接的问题,尝试各种方法,只有断电、取卡放一会才行,否则持续连接不上。
tl-tr761
main

在官网看了又看,都大半年过去了,就是不见固件版本更新。今天又遇到这个问题,实在受不了了,果断拨打客服电话,客服MM的态度不错,解决问题的效率是很高呀,直接就把内部测试版邮件过来了 😉
download

这个固件的版本是 1.0.4 Build 130619 Rel.32640n,和之前的版本在界面上可见的变化是支持英文语言了,且统计方式支持按时间了,之前正需要这个功能呢。这个更新包的文件名是 update.zip,是不是很熟悉?相信你也会解开看看的,GC 来了,Android 的目录结构清晰可见呀,Web UI 的结构和代码直接暴露出来!
firmware

好了,废话不多说了,直接说说怎么拿 Root 权限吧:
1. 刷此版固件,对于旧版固件是否也有效不明,有需要此版固件可以联系我。
2. 刷完固件不要人为主动重启,打开浏览器输入 URL:http://192.168.1.1/cgi-bin/em.cgi 进入工程页面
em
3. 点击 Usb Mode,进入 USB 模式设置页面,并将模式设置为 debug_rndis,并点击 Save
usb-mode
4. 连接 USB 线,可以发现 adb shell 可以打开,而且是 Root 权限的。

CPU info & Kernel version
info

当重启设备后,再打开 http://192.168.1.1/cgi-bin/em.cgi 会出现 Forbidden 错误,这应该是自动关闭了工程模式,但我们已经有了 ADB 并且有 Root 权限还有什么问题解决不了呢!
forbidden
1. adb shell 登录,输入下面的命令启用:

setprop sys.em_enable true

Over!

使用 RInput 实现电脑键盘鼠标操作 Android 手机

RInput 实现了两台 Linux 主机之间共享输入设备(只要是 event device 都行),它通过UDP/IP 传输数据。Android 只是使用的 Linux 内核,理论上可以使用 RInput。

二进制程序
http://heiher.info/sftp/files/rinput/

依赖条件

  1. Android 有 root 权限。
  2. Android 内核编译了 uinput 支持(存在 /dev/uinput 设备文件)。

使用方法
可通过 USB Tether 或 Wifi 建立网络连接,然后分别在手机和PC上运行服务端和客户端。
Server (Android):

/data/local/rinputd 192.168.42.129 8080

Client (PC):

/data/local/rinput 192.168.42.129 8080 \
    /dev/input/event0 /dev/input/event1 # (实际的 event 设备)

启动完成后就可以通过 Pause 键盘切换控制权了。

Over!

Android NativeActivity samples crashes

Log

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.
native_activity/android.app.NativeActivity}: java.lang.IllegalArgumentException
: Unable to find native library: native-activity

Answer

cd native-activity
 
ant clean
ndk-build clean
 
mkdir src
sed -i 's/hasCode="false"/hasCode="true"/g' AndroidManifest.xml
 
ndk-build
ant debug

Over!

Build fastboot for Loongson(MIPS)

Step 1: Clone source code from git repos

git clone https://android.googlesource.com/platform/system/core.git

Step 2: Write a standalone Makefile

vim core/fastboot/Makefile
# Makefile for fastboot
 
SRCS+=protocol.c
SRCS+=engine.c
SRCS+=bootimg.c
SRCS+=fastboot.c
SRCS+=usb_linux.c
SRCS+=util_linux.c
 
VPATH+= ../libzipfile
SRCS+= centraldir.c
SRCS+= zipfile.c
 
CPPFLAGS+= -DADB_HOST=1
CPPFLAGS+= -DHAVE_FORKEXEC=1
CPPFLAGS+= -DHAVE_SYMLINKS
CPPFLAGS+= -DHAVE_TERMIO_H
CPPFLAGS+= -D_GNU_SOURCE
CPPFLAGS+= -D_XOPEN_SOURCE
CPPFLAGS+= -I.
CPPFLAGS+= -I../include
CPPFLAGS+= -I../mkbootimg
CPPFLAGS+= -I../../../external/zlib
 
CFLAGS+= -O2 -Wno-unused-parameter
LDFLAGS= 
LIBS= -lrt -lpthread -lz
 
TOOLCHAIN= mipsel-unknown-linux-gnu-
CC= $(TOOLCHAIN)gcc
LD= $(TOOLCHAIN)gcc
 
OBJS= $(SRCS:.c=.o)
 
all: fastboot
 
fastboot: $(OBJS)
	$(LD) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)
 
clean:
	rm -rf $(OBJS)

Step 3: Build

cd core/fastboot
make

Over!

彻底解决 Android 平台不能访问 Google 服务问题

需要条件
* 一台在国内可正常访问的并且它也可以正常访问 Google 服务的 Linux 主机(美国VPS就可以了)
* Android 操作系统支持修改 /etc/hosts 和 iptables 支持(需要 NAT 表支持)

问题原因
原始 Android 里访问 Google 服务是通过三个Google服务器域名:android.clients.google.com,android.l.google.com, clients.google.com,可能会访问这三个域名的 80 和 443端口,由于非人为原因,这种看似非常正常的访问就不正常了。发现客户端 (Android) 和 Google 服务器之间的数据链路异常。

实现原理
android.clients.google.com|android.l.google.com|clients2.google.com:80–> vps:8129 –> google server:80
android.clients.googel.com|android.l.google.com|clients2.google.com:443–> vps:8130 –> google server:443
使用 8129 和 8130 端口是由于不和 VPS 上这两个端口的服务冲突,如实际情况无服务,可直接使用。

操作方法
VPS:

sudo sysctl net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -d VPS地址/32 -p tcp -m tcp --dport 8129 -j DNAT --to-destination 74.125.127.113:80
sudo iptables -t nat -A POSTROUTING -d 74.125.127.113/32 -p tcp -m tcp --dport 80 -j SNAT --to-source VPS地址
sudo iptables -t nat -A PREROUTING -d VPS地址/32 -p tcp -m tcp --dport 8130 -j DNAT --to-destination 74.125.127.113:443
sudo iptables -t nat -A POSTROUTING -d 74.125.127.113/32 -p tcp -m tcp --dport 443 -j SNAT --to-source VPS地址

Android:
/etc/hosts 增加如下三行

74.125.127.113    android.clients.google.com
74.125.127.113    android.l.google.com
74.125.127.113    clients2.google.com
iptables -t nat -A OUTPUT -d 74.125.127.113/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination VPS地址:8129
iptables -t nat -A OUTPUT -d 74.125.127.113/32 -p tcp -m tcp --dport 443 -j DNAT --to-destination VPS地址:8130

这样就可以正常访问 Google 服务了。

Over!

Build adb for Loongson(MIPS)

Henceforth it will be more easy to debug Android device on Loongson. I will tell you how to build adb for Loongson (MIPS).

Step 1: Clone source code from git repos

git clone https://android.googlesource.com/platform/system/core.git

Step 2: Write a standalone Makefile

vim core/adb/Makefile
# Makefile for adb
 
SRCS+= adb.c
SRCS+= adb_client.c
SRCS+= commandline.c
SRCS+= console.c
SRCS+= file_sync_client.c
SRCS+= fdevent.c
SRCS+= get_my_path_linux.c
SRCS+= services.c
SRCS+= sockets.c
SRCS+= transport.c
SRCS+= transport_local.c
SRCS+= transport_usb.c
SRCS+= usb_linux.c
SRCS+= usb_vendors.c
SRCS+= utils.c
 
VPATH+= ../libcutils
SRCS+= abort_socket.c
SRCS+= socket_inaddr_any_server.c
SRCS+= socket_local_client.c
SRCS+= socket_local_server.c
SRCS+= socket_loopback_client.c
SRCS+= socket_loopback_server.c
SRCS+= socket_network_client.c
 
VPATH+= ../libzipfile
SRCS+= centraldir.c
SRCS+= zipfile.c
 
CPPFLAGS+= -DADB_HOST=1
CPPFLAGS+= -DHAVE_FORKEXEC=1
CPPFLAGS+= -DHAVE_SYMLINKS
CPPFLAGS+= -DHAVE_TERMIO_H
CPPFLAGS+= -D_GNU_SOURCE
CPPFLAGS+= -D_XOPEN_SOURCE
CPPFLAGS+= -I.
CPPFLAGS+= -I../include
CPPFLAGS+= -I../../../external/zlib
 
CFLAGS+= -O2 -Wno-unused-parameter
LDFLAGS= 
LIBS= -lrt -lpthread -lz
 
TOOLCHAIN= mipsel-unknown-linux-gnu-
CC= $(TOOLCHAIN)gcc
LD= $(TOOLCHAIN)gcc
 
OBJS= $(SRCS:.c=.o)
 
all: adb
 
adb: $(OBJS)
	$(LD) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)
 
clean:
	rm -rf $(OBJS)

Step 3: Build

cd core/adb
make

Over!

How to force HTC Desire CDMA in CDMA 1x mode?

1. Backup old rom via ClockMod recovery.
2. Flash to Offical stock rom. (I’m using ‘2.11.573.5_USCC’ without radio)
3. Input ‘##778#’ at dial pad to run ‘EPST’ in this ROM.
4. Select ‘Edit mode’.
5. Input password, default is ‘000000’.
6. Go to ‘Modem Settings’.
7. Set ‘Preferred Mode’ = ‘CDMA only’.
8. Set ‘HDR Hybrid Preferred’ = ‘Disable’.
9. Press the ‘Menu’ button at bottom of phone.
10. Tap on ‘Commit Modifications’.
11. Press ‘OK’ to reboot phone.
12. Restore ‘CM’ rom.

Over!