Android手机开发专题博客

Android手机开发专题博客,为您精选安卓手机开发教程,助您手机开发愉快!

Bulletin
欢迎光临Android手机开发专题博客,祝您手机开发愉快!

Android校园网客户端设计

很多Android手机都有Wifi功能,校舍里同学们多也也用起了无线路由器,于是Wifi应用这个既省流量速度又快的甜头,我们怎么可以放过呢?然而校园网,多数是拨号认证上网的!这可怎么整?

且听同学道来:其实学校本身就有免费无线校园网的?看到屏幕右上角那个小 X 了吗?你现在可以点一下了)

于是,想法就出来了:Android校园网客户端设计诞生了!

如今校园里 Android 机油越来越多,3G 生活那个爽啊,QQ、邮件、网页甚至视频。每月虽然有几百兆的流量,但总觉得不够我们折腾,所以每月总有那么几天要格外小心,千万不能超流量。可怜的 Milestone 总是过着插着联通 3G 卡没有流量吃的生活。

Android校园网客户端设计实现思路

首先想到的是,这还不简单,用 Java 写一个应用程序不就得了。可是,校园网认证协议是在 Ethernet 层的,Java 的 Socket 能够发送以太网层数据包吗?不行,所以这种方法行不通。

Android 是基于 Linux 内核的,那么 Linux 下的客户端在 Android 下应该可以使用吧。直接运行显然是不行的,一个是 x86 一个是 ARM,CPU 架构都不同,所以需要重新编译。网上有很多开放源码的第三方客户端,但是几乎都基于 libpcap 库,Android 上并没有现成的 libpcap 库可用。

所以,我们需要先移植 libpcap 库,libpcap 库有了,我们编译好程序,发现不对啊,Android 上运行的程序都是 apk 格式,我们编译出来的是个可执行文件,这可怎么办?很多童鞋肯定想到使用 JNI 来让 Java 调用本地 C/C++ 代码,没错,这也是 Google 童鞋要求的,在 Java 中我们可以声明一个方法为 native,并使用对应的本地代码实现它。不过用过 Android 提供的 JNI 接口的童鞋肯定发现,哇靠,在 C/C++ 代码里面只能使用 C 语言库(bionic)和 OpenGL 库啊,最多再带个 Android Log,这有什么用?是的,对于不想开发游戏的童鞋来说,屁用都没有,想通过本地代码实现设备管理等操作,没门,除非你自己下载 Android 源码,修改好了,编译,写入手机,还得你手机 bootloader 没锁。(像 Motorola 这种厂商真的该骂,依靠开源社区赚钱,不给开放驱动源码不说,还锁定bootloader)

这么说没办法了?办法总是有的,我们伟大的机油们早就不甘于这种束缚了,一般一款机器刚上市,马上就会有另一条新闻:XXX 机已经被成功 root(文章的 source 一般都是 forum.xda-developers.com,大神聚集的圣地啊...)。那么到底什么是 root 呢?root 权限跟 Windows 下的 Administrator 权限可以理解成一个概念,是 Linux 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权利,所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到 root 权限,也就是将自己的非法帐户添加到 root 用户组。手机可以被 root 表示用户可以获得最高控制权限。(难道本身不应该是这样的吗?)对于有 root 权限的手机来说,用户就可以通过命令行运行各种命令。

既然这样,那么我们就可以在已经 root 的手机上运行我们编译好的命令行程序,同时使用 Java 编写好界面,使两者连接到一起,就可以正常工作了!

注意:这里依然不能使用 JNI,因为我们要编写的校园网认证客户端需要发送 sock_raw 类型的数据包,需要使用 root 权限(也就是 uid=0),通过 JNI 运行的本地代码仍然使用应用程序本身的 uid。

总结一下:

本篇主要记述了 Android 校园网客户端设计的诞生,以及程序的大体的结构。

下一篇中将介绍 Android 本地开发环境的搭建和 libpcap 的编译,see you then!


注意:
一、校园网认证协议不通用。中国是个地大物博的国家,虽说主要有华为三康和锐捷两家在做,但每个学校用的协议并不一样。本文实现的是华为三康的 H3C 802.1X 2.20-0247 协议,有兴趣开发不同版本的童鞋可以 PM 我。
二、Android 手机无法修改 Wifi 网卡的 MAC 地址。这个很致命,因为大家都知道,校园网是绑定网卡 MAC 的!据我所知目前只有 HTC 的少数手机可以改。
三、由于上面两点,特别是第二点,所以本系列文章的目的只是单纯的记述开发一个 Android 应用的开发过程,学习性质远大于实用目的。(囧...)
四、开发环境 Windows 7 32bit + Cygwin 1.7.7 + Android NDK r5

其它说明:

本系列文章主要记述一个 Android Native App 的开发过程。与其他应用程序不同的是,这个 App 的核心功能主要使用 C/C++ 代码来实现,同时需要手机拥有 root 权限,所以本系列文章的侧重在 Native 开发上。涉及网络协议分析、Linux 网络编程等其他相关知识。

新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2011/9/5 9:06:59 | Android Dev | |

  • Post Comment