Home

Awesome

iUESTC

<img src="https://github.com/Febers/iUESTC/blob/master/picture/app_icon.png" align=center />

关于

i成电 (iUESTC) 是一个为电子科技大学学生提供生活和学习帮助的 Android 客户端。由 @Febers 独立开发,目前只支持本科生使用

功能

项目实现

登录

在早些版本中,数据的获取是通过模拟登录实现的:首先对教务系统的登录过程进行抓包,然后通过 OKHttp 登录,核心代码中的请求体为

        FormBody formBody = new FormBody.Builder()
                .add("username",id)
                .add("password",pw)
                .add("lt",lt)
                .add("_eventId","submit")
                .add("dllt","userNamePasswordLogin")
                .add("execution",exec)
                .add("rmShown","1")
                .build();

上面的很多参数都隐藏在信息门户首页的 HTML 源代码中,解决方法是通过 Jsoup 解析 DOM 文档获取

之后教务系统将隐藏的验证码常规化,需要添加一个参数captchaResponse,同样可以通过抓包的方式获取

这种方式已经废弃,原因有下:

早期 git commit 写法不规范,很难找到以前的代码,可以在 Release 界面下载 Beta3.0 的源码,查看BeforeLoginModel.java文件

现在采取的方式为:通过 WebView 打开教务系统的登录界面,由用户手动登录,之后通过 WebView 的addJavascriptInterface方法拦截返回的代码判断是否登录成功——这其中牵扯到 Java 代码和 JavaScript 代码的交互,不再赘述

之后课表、考试信息的获取仍然是通过模拟浏览器的 POST 请求。最关键的一点在于:自定义 CookiesManager ,使得 OkHttpClient 可以共享 WebView 的 Cookie,这是一切的前提

其他

整体采用MVP的设计架构,网络请求框架为 OkHttp,UI则采用了开源框架 Fragmentation

整个项目的功能位于 module,每个功能模块按照 MVP 分层实现。其中 Model 层负责数据的获取和存取,View 层则负责显示数据,Presenter 充当上述两者的桥梁。

四、使用截图

<img src="https://github.com/Febers/iUESTC/blob/master/picture/sreen3.png" /> <img src="https://github.com/Febers/iUESTC/blob/master/picture/sreen1.png" /> <img src="https://github.com/Febers/iUESTC/blob/master/picture/sreen2.png" /> <img src="https://github.com/Febers/iUESTC/blob/master/picture/sreen4.png" /> <img src="https://github.com/Febers/iUESTC/blob/master/picture/sreen5.png" />

五、开源相关

okhttpRecyclerViewAdapterFragmentationListItemViewmultiline-collapsingtoolbarMPAndroidChartSmartRefreshLayoutAndroid-PickerViewBottomNavigationjsoupgson