利用 Android 和 Wi-Fi 做间谍相机

现在 iPhone 和 Android 上的应用程序如此丰富不是偶然的,在 iPhone 和 Android 上开发应用实在是太简单了,开发人员很容易就能上手。VPSee 花了两天的时间完成了一个 Android 上的中、日、英文本阅读器,还包括自动识别文本编码(不用自己调编码设定),触摸放大、翻页等功能,这在 Nokia Symbian 上是不可能的(至少两天内不可能完成),如果有人也有过痛苦的 Symbian 开发经历就会明白 VPSee 在说什么。现在 Android 在 Scripting Layer for Android (SL4A) 项目的帮助下能支持 Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl 等脚本语言,我们安装 SL4A 后可以在 Android 上直接运行这些脚本,使得 Android 能支持更多编程语言、更加强大了。

利用 Android 和 Wi-Fi 做间谍相机的想法是这样的,在 Android 上装一个 web server 并用 Ruby 写个小小的 web app,通过浏览器和 wifi 访问这个 web server 和 web app,每次访问 web app 都会拍一张照片并更新 web server 上的照片。这样我们只需要把 Android 手机藏在某个地方,然后在电脑上就可以 “看” 到 Android 拍到的照片了~~(请保留邪恶的想法:D),以下操作在 VPSee 的 HTC Desire (Android 2.1) 上测试通过:

安装 SL4A 和 JRuby

首先到 SL4A 官方网站下载 sl4a_r2.apk 安装到 Android 上,然后点击 “menu” -> “View” -> “Interpreters”,然后再点击 “menu” -> “Add” -> “JRuby-1.4” 就会安装 JRuby for Android,安装成功后打开 SL4A 就会看到 hello_world.rb 和 toggle_airplane.rb 连个例子脚本,点击 “menu” -> “Add” 就会看到多了一个 “JRuby-1.4” 选项。

Ruby web app

接下来在自己电脑上写个 web app,并把 web app 拷贝到 Android 上,用 Ruby 写 web app 当然最好是用 Ruby on Rails 了,这里的应用没那么复杂,使用另一个轻量级 Ruby web 框架 Sinatra 就可以了。在桌面上创建一个 spycam 项目、创建相关目录、安装 sinatra:

$ cd /Users/vpsee/Desktop/
$ mkdir spycam
$ cd spycam
$ mkdir public
$ mkdir vendor
$ mkdir vendor/gems

$ gem install --http-proxy http://192.168.0.1:3128 sinatra
$ gem unpack sinatra --target=vendor/gems
Unpacked gem: '/Users/vpsee/Desktop/spycam/vendor/gems/sinatra-1.0'
$ gem unpack rack --target=vendor/gems
Unpacked gem: '/Users/vpsee/Desktop/spycam/vendor/gems/rack-1.1.0'

创建一个 spycam.rb 文件,并把以下内容拷贝过去(代码来自这篇文章):

$ vi spycam.rb

APP_DIR = File.expand_path File.dirname(__FILE__)
GEM_DIR = File.join(APP_DIR, 'vendor', 'gems')
PUBLIC_DIR = File.join(APP_DIR, 'public')

Dir.entries(GEM_DIR).each do |dir|
  $LOAD_PATH << File.join(GEM_DIR, dir, 'lib')
end

require "rack"
require "sinatra/base"
require "android"
DROID = Android.new

TEMPLATE = <<HTML
<!DOCTYPE html>
<html>
<head>
<title>Spy Camera - vpsee.com</title>
</head>
<body>
<a href="/"><img src="latest.png"></a>
</body>
</html>
HTML
class SpyCam < Sinatra::Base set :public, File.join(APP_DIR, 'public') get "/" do snapshot_path = File.join PUBLIC_DIR, 'latest.png' DROID.cameraCapturePicture snapshot_path TEMPLATE end end SpyCam.run!

运行

测试一下上面的 web app 和远程 WiFi 相机是否能拍照。用电脑通过 USB 连上 Android,拷贝上面的 spycam 下的 spycam.rb, public, vendor 到 Android 下的 sl4a/scripts,然后断开 Android USB 连接,运行 SL4A 执行 spycam.rb 脚本就会自动启动 WEBrick server 和运行 spycam.rb,WEBrick 是个提供 HTTP web services 的 Ruby 库,集成在 RoR 开发环境里用来测试程序,也是一个简单的 HTTP server,成功运行后显示应该如下:

Android WEBrick

在任何一台使用相同网络的电脑上打开浏览器访问 http://192.168.1.115:4567(Android 当前使用的 IP 地址是 192.168.1.115)就可以看到 Android 拍照了,每点击一次照片就会更新。

Android Spy Camera

评论 (4 Comments)

  1. 这能不让有邪恶的想法吗? :-)

  2. Hi vpsee,

    I tried your spacam app on an HTC G2 device, but when I run the the app, there is an error message “app SL4A(in process com.googlecode.android._scripting”) terminates abruptly. Please try again.”
    But retry cannot solve the problem. Any suggestion on the cause of this problem?

    By the way, I can run python script on the device using SL4A.
    And do I need to install WEBrick server on the phone? And how to install it?

    Thanks in advance.

  3. did you follow the instructions above and install everything the app required? sinatra, rack?
    you don’t have to install WEBrick server, it’s part of the ruby standard library.

  4. 其实吧,我想说的是,安卓有一款软件叫webkey,你可以试试的。

发表评论