1.前言

闲来无聊.手机每天又是都接触的东西.程序什么的最容易接触到.想到有些人说前后端都做就是全栈的说法.哦,你看html5全栈.

要我说多接触一些多有意思.天天写后端.还不是业务层.又不是什么高大上的算法.前端有意思的东西才多.当然我是那种比较old的.不会ag.vue,react.只会jq.拿起一把梭子就是干.哇.你看看这个前端的水果然深.

接下来说app要完成那些目标了.

1.查词(这个太简单了)

2.翻译(调用有道的)

3.句式分析(本来在想英语是不是有什么规律.后来一找有人做了.直接嵌入就行了.)

4.单词匹配(就是根据一些乱七八糟的规则推荐一些相同的单词)

5.爬虫文章(暂定)

要用到的相关技术与内容

1.sqlite本地数据库,(存放单词数据库)

2.webView的使用

3.http请求模拟

4.三方工具navicat,用来数据传输msyql到sqlite,fiddler,用来抓包

5.要会安卓的hello word

2.开工

1.下载android studio

运行hello word

android studio有个gradle build running时间特别长的问题很讨厌一开始就第一次快.后来就卡死了.百度的方法也用了.不怎么好使.后来清了清缓存莫名其妙的好了.

2.真机调试

刚开始最困难的就是有些选项不知道在哪里.一些常规的使用也不太会.真机这里就是报设备找不到.网上找的解决方案.那个按钮也没看到在哪里.后来点下面2个地方会好

右边那个是我自己摸索出来的.下面的是别人告诉我的

3.布局

新手嘛.我就拖控件了.和winform差不多.textView拖得时候在中间.显示的时候就到了最上面了.这个问别人了.把截图里面的部分换成RelativeLayout.然后就正常了

4.获取控件,添加事件

过程我都懂,代码不会,用嘴编程

而且坑爹的是.这个东西我没有百度到.其实这对于看视频学习的来说完全不是什么问题.我是直接上来硬干.还好可以问别人.于是别人帮我解决了.findViewById.会了不难.难了不会.....下图是获取控件和添加事件.好了拦路虎解决后.别的应该就不是什么问题了.我这样想.

5.获取文本框的值.填充的TextView中

这里无鸭梨,一开始我写复杂了.不知道这个CharSuquence就是文本框的值.我之前是重新获取了一遍.

6.研究SQLite

这个就简单了.到这里.网上教程一堆.想起一位朋友说的面向百度编程.百度看了下.有个抽象类.继承实现后就可以了.不过一开始想的问题是看到代码.这个数据库不会不能初始化吧.每次都需要创建.后来看到说是不存在才会创建.存在就不会了.才放心了.然后找到在本机的位置.copy出来.不过这个数据库的帮助类.这个初始化对我来说用处不大.我的数据是希望提前存储进去.这里只是查询就好了.不过这个SQLite的sql语句和mysql的不兼容.有些关键字不一样还有字段类型.

这里多叨叨两句.百度的时候.看到有2个查询的方法.一个就是sql语句.一个是参数化的查询方法.把sql语句的这个位置的东西当做参数传进去.好像记得有7个参数之多......给不会sql的人用的.这里真的感觉多学点东西是有用的后台的东西.安卓也会用到.其实后面前端的东西也会用到.想到一个成语触类旁通.这个挺重要的.

7.SQLite数据初始化

找到SQLlite的位置在data目录下面.自己的包名下面.copy出来后把mysql里面的单词数据copy进去.这个单词的数据源是之前没事的时候弄的.本来以为写了篇文章的.找了下.没想到没有.这个数据源的格式有点问题.显示的不是中文.是Unicode.记得当时解析这个东西还弄了半天.要准确的把里面的Unicode东西拿到.然后进行转换.当时用正则取的.然后就是数据传输了.这个sql语句不兼容.如果是用sql文件的话.也不能执行.好在navicat有个同步功能.可以完成.不过也有点小bug.sql估计使用单引号括起来的.然后如果字段里面有单引号就会报错.这里同步的时候.关掉事务.忽略错误.有10几个好像有问题.不过应该用不到.懒得用手处理了.传输的时间特别的长.用了快3个小时.然后SQLite的文件到了78MB.占空间还不小.有数据库后.剩下的就和后台差不多了.查询数据库.

8.WebView研究

安卓的的这个东西小坑还不少.弄个的原因是因为找到了一个句式分析的网站.本来想接口接入的.不过他们那个接口太原始了.返回的html代码片段.没法用....还是直接嵌入网站算了.

第一个小坑是loadUrl跳转浏览器.百度了一下.尝试了几个就解决了.反正就是设置一堆参数就是了.要不js什么的也不能用.js也是后面的一个坑

第二个是页面load后是白屏.不显示.这个还真没找到.后来看到什么授权.我猜估计是https的原因.我一开始是访问的百度.有https.算了.我接入的也没有这个东西.换了一个就出来了.

第三个网上的跳浏览器是点击链接.我的是一load就跳.这里应该是重定向的原因.相等于跳转了.又让我想到了融会贯通.这个是前端或者带点后的知识.页面重定向.

第四个不是小坑就是正常的技术研究吧.执行js.首先让输入框获取焦点他会清空提示文字.这个很简单.他本来就有onclik事件.直接调用就是了.剩下的就是把传来的内容写入到页面中.这里需要一些前端的知识.

第五个是个小坑.就是执行js的时候要在页面加载完后去执行.网上找了页面加载完事件.有个WebViewClient里面的事件.说是只会执行一次.有bug就没有用.不过这onProgressChanged也有bug.就是会多次被调用.而且还是百分百会执行三遍.也没找到解决办法.后来加了个标记变量.执行过后.就不在执行了.

第六个用户登录信息问题.WebView自带用户信息保存.不用做模拟登录了.自己手动登录一次.完事.

9.网络请求和UI界面更新,网络权限

这里应该是前面说的.不过没想起来.就是主线程里面不能进行网络请求.子线程不能进行界面操作.百度.这里也比较简单.不过感觉就是代码有点凌乱.3个关键字.Thread,Handler,Runnable.照猫画虎就行了.这里和winform差不多.不过winform里面没有安卓这么严格.安卓不这么做直接报错.对了还有一个权限的问题.就是网络权限.这个也需要配置一下

10.jar包引入

httpHelper需要用到一个 apache的包.用过maven.gradle这个使用上倒是感觉问题不大.不过不知道哪里抽风.死活引不进来.好在安卓对本地jar包的引用.可是比java Web对于本地jar包引用.友好太多了.java web得弄个私服.要不就是添加本地仓库.普通引用.打包各种问题.安卓直接丢进libs就好了.这个和.net差不多很方便.这个gradle坑先不管了.代码能跑就行.条条大道通罗马.这条不行.换一条

11.activity研究

这个百度内容也挺多的.主要就是如何创建.然后怎么显示还有参数的传递.也挺顺利的.没啥坑

12.有道接口研究

重点来了.这个小妖精有点磨人.截止我写这篇文章的时候.还没有调通.不过我相信我有办法能调通它.

一开始我想简单了.以为就是一个普通的接口.结果返回errorCode:50.百度了一下.有人研究过了.也有文章.不过里面的方法没好使.我在重新梳理一遍吧.这个是百度到的文章.作者也是对这个挺清楚的.不过评论说照着文章已经不能用了.我看了下源码.好像那个盐值确实已经换了.出现问题不可怕.知道问题原因就行.我用手机调总是不行.所以第一步先不用手机调用.先自己模拟吧.

用Python破解有道翻译反爬虫机制

https://blog.csdn.net/nunchakushuang/article/details/75294947

这里要用一下fiddler了.这可抓包可模拟.小神器一枚.其实在抓手机包的时候.我已经发现了一点问题.就是参数可能传错了.这里面的等于号已经被转义了.我找的那个httpHelper对参数的处理有点问题.正确的应该是a=b&这样之类的.

通过上面的文章知道这个接口是在本地加验证信息的.因为里面有时间.所以我的第一步猜想是这个验证信息会不会有过期时间.我用相同的header头发起了.好几次信息.并没有错误.看来是没有验证时间.只是用时间戳当验证信息了.

那其实这里的salt是可以固定的.我们不需要每次去生成新的.然后就是根据文章里面的去找这个盐值了.首先下载js.然后像文章说的去格式化.保存成js.用idea打开.这个可以帮助分析语法结构.否则光靠搜索有些东西不太好找.

我们根据浏览器的请求信息.直接搜索typoResult搜索.这个就一个关键字.直接就找到了.这里的压缩混淆.其实拦路的作用没有特别的大.然后看sign签名.里面有个D.这个就是放盐值的变量.如果光靠搜索.你知道是D但是这个字母太多了.你也不好搜索.放在idea.用ctrl加左键.直接就跳过去了.

ok关键信息都拿到了.接下来就是模拟了.

模拟部分就是找不同呗.首先先弄个正确的请求.就是浏览器发起的那个.通过body的大小.其实也可以直接去看.这个就是正确的.错误的是16.然后和手机发起的去比对.手机的少一些.经过尝试后.其中在header中有2个重要的信息一个是cookie和Referer这里没有的话.就会返回error.当然前提是body的参数要正确.这个用网页请求的那个行了.前面说过.里面的时间不会过期.可以一直用.其实http的这些header的检测都不是特别的可靠.都是可以伪造的.接下来让手机的发起的请求和浏览器一样就行了.把这两个参数补上.

看了看代码.在这个位置设置信息.于是加了个map用来传入header信息.额.....写完后才发现我说的那个必要信息上面就有.....

一运行.结果就好了........好了.我还在想会不会还有些别的坑.结果就好了...我把那个body被转义的地方改了下.盐值之前就替换好了.

也不知道这个作者是怎么想的.要对body转义.要转也是我在外面转吧.你在里面一转.等于号也被你弄没了......

13.结语

说实话那个有道的那个.我还说要花点时间呢.没想到下一步就是成功了.

通过这个hello word的安卓程序.发现安卓的内容不是特别的多.和其它语言也有相通的地方.UI和网络请求.做过winform的会眼熟.sql数据和安卓后面的代码做过java的肯定眼熟.至于控件的属性.这个做过前端和winform都可以猜事件.httpHelper.这个后台语言都会遇到这个.c#.java.还有有道最后返回的数据JSON几乎就是通用的文本传输协议了.所以也不是什么大问题.然后这其中的主线就是HTTP协议 这个才是融会贯通的主线.里面的requestHeader,requestBody.这个是重点.还有Cookie.要说模拟请求.一定绕不过去就是这个.cookie的domain,那个域名下面的.path.该域名下面那个路径要用.一般用/ .表示所有的路径都用.还有就是过期时间了.剩下几个header属性.需要注意Content-Type.表示我传的数据格式是什么.大家可以观察普通的post请求和上传文件的时候.这个是不一样的.还有Accept表示我想什么样的数据.不过一般不用理会.spring mvc在某些情况下会有bug.

这个app剩下就是查询SQLite数据.做一下单词匹配规则.然后在抓一些英文的文章吧.可能是这些.不过说实话.安卓真的只是一个界面的承载,这后面的东西和安卓相关的真的感觉不会太多.

我就是后台不精通.我就是不只写接口.我就是样样都会.样样都不行.

自学安卓练习作品单词APP(1)-安卓的hello word与有道字典防爬虫破解的更多相关文章

  1. 应用在安卓和ios端APP的证件识别

    移动端证件识别智能图文处理,是利用OCR识别技术,通过手机拍摄身份证图像或者从手机相册中加载证件图像,过滤身份证的背景底纹干扰,自动分析证件各文字进行字符切分.识别,最后将识别结果按姓名.地址.民族. ...

  2. 只写Python一遍代码,就可以同时生成安卓及IOS的APP,真优秀

    前言: 用Python写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择 我们使用kivy开发安卓APP,Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写 ...

  3. 合肥 专业做APP(安卓,ios) 微信公共平台

    合肥 专业做APP(安卓,ios) 微信公共平台 电话:15715696592

  4. [安卓基础] 004.运行app

    运行你的app 这篇课程会教你: 1.如何在设备上运行你的app. 2.如何在模拟器上运行你的app. 当然,在学习之前,你还需要知道: 1.如何使用设备. 2.如何使用模拟器. 3.管理你的项目. ...

  5. fiddler抓包+安卓机 完成手机app抓包的配置 遇到的一些问题

    fiddler抓包+安卓模拟器完成手机app抓包的配置:fiddler抓包+雷电模拟器 完成手机app抓包的配置 其实在安卓真机上弄比在虚拟机上弄更麻烦一点,它们的步骤都差不多一样,就是在安卓真机上弄 ...

  6. Unity实现相似于安卓原生项目的点击安卓返回button回到前一页的功能

    本章博主和大家一起讨论下Unity怎么实现类似安卓原生项目,点击安卓返回button实现返回到前一个页面的功能. 1.定义一个泛型用于响应安卓的返回button public static List& ...

  7. 基于百词斩和扇贝单词的背单词APP软件测试

    概述 背单词APP是非常受大学生青睐的手机应用,但它的发展尚未成熟,存在一些缺陷.我们决定深入地分析一组典型的背单词APP:百词斩(A产品).扇贝单词(B产品),寻找当前背单词APP中的提升空间.下面 ...

  8. 【阿里聚安全·安全周刊】女主换脸人工合成小电影|伊朗间谍APP苹果安卓皆中招

    本周的七个关键词: 人工智能 丨 HTTP链接=不安全链接 丨  滑动验证码 丨 伊朗间谍APP 丨 加密挖矿 丨  Android应用测试速查表 丨 黑客销售签名证书 -1-   [人工智能]女主换 ...

  9. APP公布到应用市场(苹果APP STORE+安卓各大应用市场)

    注意事项 1.应用要签名,为了以后可以顺利更新应用.要保持每次的签名一致,所以要妥善保管好签名数据. 2.进行公布測试,最好有个检查表,每次公布的时候进行核查. 苹果APP STORE 一.证书的导出 ...

随机推荐

  1. DIV固定宽度和动态拉伸混合水平排列

    1.效果图 2.源代码 html <h2>1.头部固定,尾部拉伸</h2> <div class="container" id="div1& ...

  2. MySql5.5以上版本设置主从结构的例子

    为了实现读写分离,一般都需要先设置好mysql的主从结构,网上现有的mysql配置大都基于低版本,在5.5以上版本无法配置成功,所以参考了官方文档,写了这篇笔记. *主要参考Mysql 5.6的官方文 ...

  3. centos yum安装常用命令

    安装killall命令 yum install -y psmisc 安装sz(下载)和rz(上传)命令 yum install -y lrzsz 安装 ifconfig 命令 yum install ...

  4. CentOS 7运维管理笔记(4)----安装ftp服务器

    在CentOS 7下安装ftp服务器,可以使局域网内的主机拥有共享文件的一个站点. 在Linux系统下,vsftp是一款应用比较广泛的FTP软件,其特点是小巧轻快,安全易用.目前在开源操作系统中常用的 ...

  5. WPF 蒙罩层 LoadingPage

    WPF 蒙罩层 LoadingPage 前言 无论是在PC客户端,移动端,网站,在遇到长时间处理的时候都会需要用到蒙罩层,让用户有更好的体现.今天上网逛了一下各位前辈网友的蒙罩层的实现方式,觉得有很多 ...

  6. 简单的自动升级提示AutoUpdater

    看过网上“圣殿骑士”和其他人的升级做法,感觉不太适合几十M的小型软件. 之前用的一直都是clickonce,但是3年下来感觉弊端太多,比如安装不能选择文件夹.打包不全.版本等问题,于是决定另辟捷径. ...

  7. memset用法详解

    原文:http://www.cnblogs.com/PegasusWang/archive/2013/01/20/2868824.html 1.void *memset(void *s,int c,s ...

  8. 推卡:“积分侠”的福利 广发DIY信用卡

    广发diy信用卡最大的优势在持卡人在三大类商户刷卡消费可享受3倍积分优惠,很多卡友不知道这些商户到底有哪些,以及商户mcc码是什么,下面和小编一起来看看. 可享受3倍积分的商户类型 持卡人可在以下三大 ...

  9. 关于map容器的元素被无参初始化

    使用C++中的map容器定义一个mp,当你执行if语句判断mp[3]是否为1时,那么如果mp[3]以前不存在,此时mp[3]就会被无参初始化,second赋值为0. 以下的程序可以证明这一点.执行了第 ...

  10. 使用js时,如何获取系统当前时间并且得到格式为"yyyy年MM月"的日期

    1.使用js时,如何获取系统当前时间并且得到格式为"yyyy年MM月"的日期: 1 var newdate = new Date(); 2 var nowyear = newdat ...