Linksys WRT 1900AC的V1,V2版本配置信息杂记

在淘宝上买了个Linksys WRT 1900AC是没有外包装的,网上搜了一下,发现存在的V1,V2两个硬件配置版本。

V1的CPU是1.2G带风扇,V2是CPU 1.3G不带风扇,内存V2是512MB ,V1是256MB

详细配置信息如下图:

214435ontwwwjp4wo4tn7t

 

214436z8mij1n6gvhthtez

官方固件下载地址为:

http://www.linksys.com/us/support-article?articleNum=148550

目前最新的官方固件链接:

http://cache-www.belkin.com/support/dl/FW_WRT1900AC_1.1.10.167514_prod.img

本站缓存的Linksys WRT 1900AC V1最新官方固件地址:

fw_wrt1900ac_1-1-10-167514_prod-img

OpenWRT的相关固件下载地址:

https://wiki.openwrt.org/toh/linksys/wrt1x00ac_series#stable

本站缓存的Linksys WRT 1900AC V1的OpenWRT的目前版本的快照:

openwrt-15-05-1-mvebu-armada-xp-linksys-mamba-squashfs-factory-img

参考链接


请教美版linksys WRT 1900 V1和V2的区别?

Android中WebView中执行JavaScript获取页面的宽高都是0的问题

最近使用Android中的WebView开发应用,结果在实际使用的时候,前端开发的网页展现的时候,总是什么都看不到,结果跟踪分析发现,页面在加载完成后,就去获取页面的宽高,然后根据页面的宽高进行页面的渲染,但是页面加载完成后JavaScript中得到的页面的宽高都是0,结果就导致整个的页面被渲染成了空页面。

项目是使用一个Dialog里面嵌入WebView的方式进行处理的,当网页加载完成之前,是不显示出来的,只有当网页加载完成后,页面才会展现出来。

实际的情况是,如果先展示Dialog,等整个Dialog已经完全展现出来之后,再去加载页面,这个时候,JavaScript代码是可以获取到正确的宽高的。但是,如果先加载页面,然后等待页面的加载完成通知,再去显示页面的时候,这个时候,由于Dialog还没有显示出来,此时内嵌的WebView并没有得到实际的宽度高度,因此只能获得到0。

示例工程的代码如下:

布局文件layout_webview.xml

对话框代码WebViewDialog.java

主界面代码MainActivity.java

主界面布局文件activity_main.xml

完整运行整个例子,会发现最后输出的屏幕的宽高信息都是0。

这个问题发生的原因是由于界面在页面加载之后才会显示,由于页面还没有显示,因此从JavaScript中获取页面的大小的时候,只能获取到0.

这个问题如果要求页面解决的话,那么编写网页的开发人员,只要监听window.onsize事件即可。

如果要求WebView的开发者来解决的话,则其解决方式如下:

1.修改WebViewDialog初始化网页时候的策略,初始化时候禁止JavaScript执行。WebViewDialog构造函数中的mWebView.getSettings().setJavaScriptEnabled(true);调整成mWebView.getSettings().setJavaScriptEnabled(false);

2.页面加载逻辑照旧执行。

3.实现DialogonAttachedToWindow函数,在这个函数中重新加载数据

最终的WebViewDialog.Java的代码如下:

Ubuntu 16.04出现“/tmp 容量不够”的提示,如何增大“/tmp”空间大小

Ubuntu 16.04出现“/tmp 容量不够”的提示,当时安装系统的时候/tmp是单独划分出来的,大小被限制为2GB,这个时候尝试用gparted来进行拉大分区的时候,发现由于分区在其他分区中间,导致没办法加大临时分区。

当时划分分区的时候,系统分区的大小是足够的,因此,我们只需要在/etc/fstab中注释掉临时分区即可,此时系统会自动在根分区"/"下面生成临时文件即可了。

注释掉这句话即可:

之后需要重启系统。

在处理完成后,记得修改回原样。

PuTTY连接跳板机频繁被断开的问题

公司的服务器只能通过跳板机的方式来链接,因此在Windows中使用PuTTY连接跳板机,结果实际使用中发现,会频繁被跳板机断开,而如果在目标机器中执行一个ping 127.0.0.1则连接始终不会被断开。那么说明是由于跳板机设置了一段时间如果没有报文通信就断开连接的功能,而且这个时间设置的比较激进。

请教了一下别人,找到如下设置即可解决这个问题:

puttyconfigurationkeepalives

其实质是开启了TCPKeepAlive心跳报文。默认这个时间是"0",也就是TCP链路中不发送心跳报文。把这个时间设置成"1",也就是每秒都发送一次心跳。

Android Studio升级到2.2正式版本后,在Windows命令行中执行“gradlew build”时,报告错误“Unsupported major.minor version 52.0”

Android Studio升级到2.2正式版本后,在Android Studio中编译一切正常。但是在Windows命令行中执行“gradlew build”时,报告如下错误:

这个原因,目前本人遇到的原因是,机器上同时安装了jdk1.7.0_80jdk1.8.0_73两个版本的JDK,而环境变量中的JAVA_HOME指向的是jdk1.7.0_80

解决方法就是修改JAVA_HOME指向jdk1.8.0_73即可。

注意,修改完成环境变量后,需要重启一下Android Studio,以及Windows命令行窗口。否则环境变量不生效。

Apache-2.4使用ServerAlias实现同一个网站绑定多个域名(Ubuntu 14.04)

最近自己申请了多个域名,打算绑定到同一台服务器上面,网上搜索了一下,很多的答案是开多个主机的方式来处理,方式可以,但是比较繁琐,不如使用ServerAlias来的方便。
ServerAlias:服务器别名,在Apache中可以用于设置虚拟主机接收到个域名,也可以用于接收泛解析的域名。具体的设置方法如下:

可以看到如下的配置内容:

注意其中的ServerAlias字段,就是指定多个域名同时指向的这个服务器的。中间用空格来区分。

注意上述的ServerAlias中,包含www字段的域名www.mobibrw.com,跟不包含www字段的域名mobibrw.com声明了两次,目的是某些浏览器在进行域名认证的时候(HTTPS证书校验),采用的是全字匹配,导致尽管这两个实际上是指向同一个地址,但是这些浏览器会报告域名证书不正确。

同样道理,对于使用了HTTPS的服务器来说,这个更重要

执行跟上述相同设置即可。
如果跟本站一样使用Let‘s Encrypt颁发的SSL证书的网站来说,修改完成配置后,需要重新申请一下证书。

Android真机使用Mockito-1.10.19+Dexmaker-1.2在Mock仅包内可见类时报告错误“java.lang.UnsupportedOperationException: cannot proxy inaccessible class ***”

Android真机使用Mockito-1.10.19+Dexmaker-1.2Mock仅包内可见类时报告如下错误:

被测试类代码如下:

注意上述被测试类前面没有声明public,因此默认是default访问,也就是包内可见。我们下面的测试代码跟被测试类属于同一个包名package com.yunos.tv.shake.biz,因此,按理说,是可以正常访问的。
测试类的代码如下:

这个问题只在ART虚拟机下面发生异常,相同的代码在Dalvik下面是完全正常的。
问题发生的原因暂时还不能确定,应该是ART虚拟机实现功能的时候的不兼容导致的。
解决方法为在测试代码中声明一个继承被测试类的子类,并且把子类声明成public
如下:

修改后的测试代码如下:

即可解决上述问题。

Android ContentProvider使用时出现的错误“java.lang.SecurityException: Permission Denial: opening provider ***”

AndroidAPK上自定义了一个ContentProvider,但是在调用者使用时出现的错误"java.lang.SecurityException: Permission Denial: opening provider ***"。

查询了半天才发现是由于在声明ContentProvider的时候没有声明android:exported="true"导致的。

从目前的测试情况来看,跟Android的版本有关系,目前看到在低版本的Android系统上面,这个如果不设置,默认是自动导出的,但是在高版本的Android上面,默认就是不导出了,这就导致一个问题,就是相同的APK在不同系统上面会出现不同的行为。因此要求必须显示指定这个字段

注意如下说明:

参考链接


Android真机使用Mockito-1.10.19+Dexmaker-1.2在Mock继承抽象父类的子类时报告错误“java.lang.AbstractMethodError: abstract method not implemented”

Android真机使用Mockito-1.10.19+Dexmaker-1.2Mock继承抽象父类的子类时报告如下错误:

父类代码如下:

子类代码如下:

测试代码如下:

在项目的build.gradle中的声明如下:

这个问题只在Dalvik虚拟机下面发生异常,相同的代码在ART下面是完全正常的。
导致问题发生的原因是Google提供的dexmaker库存在BUG导致的,而这个库,从Maven Center上看,自从2012年开始就没有提供过任何的更新了。
解决方法是不使用Google提供的dexmaker,而是使用com.crittercism.dexmaker修正过这个BUG的版本。

com.crittercism.dexmaker项目的GitHub地址是https://github.com/crittercism/dexmaker

Android上使用Mockito+Dexmaker报告错误“java.lang.IllegalArgumentException: dexcache == null (and no default could be found; consider setting the 'dexmaker.dexcache' system property) ”

Android上使用Mockito+Dexmaker,测试用例运行时,报告错误:

解决方法就是在调用Mockito之前设置环境变量"dexmaker.dexcache",如下:

参考链接


Mockito + Dexmaker on Android