自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 gradle 3.5预处理jar文件内全部classes.dex问题

gradle 3.5使用的安卓打包插件com.android.tools.build:gradle-2.3.x(最新是2.3.3)有一个对jar预处理的逻辑,即pre-dexed。负责dx处理的插件是com.android.tools.build:builder-2.3.x。注意,它没有使用sdk里面的build-tools\[version]\lib\dx.jar。这一点跟adt有点差异。这也是存在以下问题的根本。这个pre-dexed处理主要是加速dx过程。然而,这个过程对jar的处理跟其它版本有个

2021-08-12 19:32:21 574

原创 天气城市代码查询接口

前面写过一篇免费天气接口的文章,这次补充一个城市代码的查询接口。通过这个接口,大家可以获得符合查询关键字的有效城市信息。查询数据来自中国天气,服务器数据更新周期为1小时。http://www.iot2ai.top/cgi-bin/intel/weather.txt?city=天河请求参数:city:城市、乡镇、街道、景点名称等请求结果:{ "ts": 1612352254199, "city": "天河", "list": [ { "ref": "101280

2021-02-03 20:37:25 1360 1

原创 翻译插件的不翻译属性

最近在写一个片假名注音插件,网友提到,注音内容不要被翻译插件翻译。开始在网上找到谷歌翻译的不翻译属性,但是国内流行的彩云小译和有道不支持。由于它们的官网没有相关说明,所以只能分析它们的插件看看。谷歌翻译,只要在标签的class里面增加notranslate即可。彩云小译,可以在标签的class里面增加cyxy-no-trs。它的插件在提取文本时,会过滤一些标签。其中,我觉得这个属性最符合要求的。当然,里面还有其它规则,有兴趣的朋友可以看看。有道翻译,由于没有找到它的插件(日语翻译),暂时没有处理方案。

2021-01-18 15:38:55 326

原创 apache默认编码(AddDefaultCharset)对js等其它文本无效问题

apache服务器默认配置了utf-8编码,网页(text/html)的响应头content-type也有正常添加charset。开始以为其它文本都这样。然而直接打开js才发现,这个配置没有生效。AddDefaultCharset UTF-8按照官方文档指引,我们可以使用“AddCharset”给指定后缀的文件增加编码:# Maps the given filename extensions to the specified content charsetAddCharset UTF-8 .js

2020-11-21 11:45:27 398

原创 postfix使用dovecot的sasl认证服务

我的服务器使用postfix搭建smtp服务,使用dovecot搭建imap服务。当初图方便,只给postfix配置了允许relay的域名(relay_domains),同时增加了黑白名单(smtpd_recipient_restrictions)。大部分时间是没有问题的,然而最近发现日志多了很多relay记录(不是跟我自己相关的),明显是服务器被探测到了。看来,不得不把sasl服务配置上去。但是,在网上搜索了一圈,没有发现可以正确限制的配置。不得不去看官方文档:http://www.postfix.o

2020-11-13 21:23:42 1576

原创 网页视频播放器的截图功能

现在很多视频网站的播放器没有截图功能,这里提供几行截图脚本,需要的网友可以试试。实现原理很简单,就是获取video元素,然后绘制到canvas元素并获取图片数据,之后下载下来。所以,这个脚本只能用于H5视频播放器,其它类型播放器无法使用。// 这是保存图片的函数。它模拟点击链接,打开保存窗口function download(href, name) { var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a

2020-10-25 20:06:52 744

原创 免费天气接口(7日预报和整点预报)

天气数据来自中国天气,服务器数据更新周期为1小时。http://www.iot2ai.top/cgi-bin/intel/weather.txt?code=101280101请求参数:code:城市天气代码,例如101280101(广州)。其它城市代码可以在网上搜索请求结果:{ "ts": 1598867562225, "md": "202008311700", "pl": "广州", "h3": [ [ "31日20时,n02,阴,30℃,无持续风向,&l

2020-08-31 18:36:12 766

原创 解决chrome://inspect/无法打开问题

chrome://inspect/是chrome提供的调试手机网页插件。但是这个插件需要联网下载页面,而下载地址是chrome-devtools-frontend.appspot.com。这个地址在国内刚好无法访问。早期的版本,可以通过inspect feedback打开缓存的插件页面,但是最新版本这个功能移除了。也就是说,只能在线下载插件页面才能使用。更糟糕的是,这个插件无法缓存到本地,每次重新打开都要下载!若你有优越的网络条件的话,解决以上域名访问问题就行。然而,很多人还是很难长时间保持这种访问条件

2020-07-09 17:16:47 3966

原创 基于multidex的代码注入方案和加固方案

这里说的multidex是指apk包含多个dex。实现这个的技术,除了使用support提供的multidex库,也可以自己开发,实现逻辑不复杂。同时,最新安卓系统已支持自动加载或转换多个dex。在不考虑兼容旧版情况下,甚至可以不用手动加载。当然,若dex需要经过解密后才能加载的话,就得自己实现这个解密和加载过程。一般我们修改别人的dex,会先转成jar或smali,然后对里面内容进行修改(字节码操作或源码操作),最后重新编译成dex。 但是,这种修改方案有一个不好的地方,就是直接改变了别人代码(我还是很

2020-06-06 17:43:02 335

原创 okhttp配置读取RequestBody的Interceptor可能无法请求问题

最近调试需要,给okhttp添加了一个日志Interceptor,代码是参考源码的日志Interceptor,所以应该没有问题。但是,在上传文件时,发现请求发送失败。首先分析一下okhttp的请求过程:RealCall的调用采用chain模式。chain(RealInterceptorChain)开始是用户配置的应用Interceptor。之后是内置Interceptor,以完成最终数据处理并返回,包括缓存Interceptor、连接Interceptor。RealCall在内置Interceptor添

2020-06-06 14:15:01 1054

原创 安卓加固apk逆向分解和dex重建方案

现在发布的应用为了防止代码泄漏,除了代码混淆,还会使用加固框架对apk进行特殊处理。加固的方案虽然很多,但目的只有一个,就是保护代码不被工具反编译。当然,加固还有资源保护等其它处理,但我这里主要讨论的是dex加固。在阅读以下内容前,你需要对dex结构有一定了解,但不需要太全面,也不用了解字节码保存方式和指令功能。首先,要知道dex的头部结构,以及它重要的一块数据,即map区。然后,了解string索引区和string数据区的特点。dex的结构,很多文章都有介绍,所以我这里就不再细说。大家可以搜索一下,了解

2020-06-06 13:27:50 874

原创 使用svn下载github的文件(master、trunk、branches、tags)

使用git命令下载github的代码时,总是需要下载全部文件。如果作者不小心提交了大量临时文件,在国内这个网络环境下,下载真的是折磨死人!另外,有时想查看一下raw文件,但是国内访问异常!还好,github的服务器支持svn。所以,可以使用svn命令灵活地下载需要的文件。一般,我使用的命令是export,即导出文件或目录。github地址如何转换成svn地址:这个网上有很多说明,我这里做一个总结。github使用“{仓库}/{版本}/{文件}”的链接格式访问文件,例如:https://github.

2020-05-30 11:09:17 1452

原创 java.lang.RuntimeException: can not merge I and Z

在使用旧版dex2jar时,可能会出现以下错误:java.lang.RuntimeException: can not merge I and Z通过日志文件可以知道,这是com.googlecode.dex2jar.ir.TypeClass的merge问题。查看dex2jar源码后,可以确定这是int和boolean互相转换问题。在java里面,这两个类型是不能转换的。问题可能来源:别人打包的代码并不一定使用java编写(kotlin)或者采用新的dx(d8)版本,这时编译的代码可能引入新的指令(不

2020-05-30 08:46:06 2618 5

原创 VideoView在刘海屏手机控制区域MediaController位置异常问题

我在开发视频播放时,使用系统默认控件VideoView,然后增加MediaController来控制播放。然而,最近在MI 8(刘海屏手机)测试时,发现控制区域的进度条没有显示!开始以为是操作系统差异,没有去跟踪问题。后来在切换为横屏时,发现存在进度条,但是控件往右边偏移了一段距离。界面上还有其它控件,但是它们位置是正确的,只有MediaController位置有问题。之后,我再找了一台手机(非...

2020-04-15 18:27:20 473

原创 apache转发连接出现大量close_wait问题

现在我的服务器使用apache转发用户的请求。然而,最近在转发websocket时,客户端经常出现pending,即一直无法连接成功(握手成功,但是响应一直无法下来)。看了一下请求要转发到的目标服务器日志,发现请求连接没有过来,也就是apache没有转发。但是pending是握手成功后状态,不可能跟apache连接失败。在服务器抓包和监控网络连接,发现请求能够正常到达apache(也就是握手成功)...

2020-03-29 21:15:52 1325

原创 安卓证书库文件BKS制作

java使用的证书库格式是jks。但是我们要在安卓使用证书库(同样的java接口),那么必须使用bks。java管理证书库的工具是keytool,制作bks也是使用这个工具,不过默认它不支持bks,需要下载对应提供者(Provider)才能操作。这个扩展参数在keytool里面有说明: -storetype <storetype> 密钥库类型 -provider...

2020-03-20 18:12:29 571

原创 服务器配置的https证书在有些客户端认证异常问题

我这里申请的证书的根证书是明确在手机信任列表的。这点可以通过手机信任的凭据验证。问题是,认证异常并不是一直会!chrome有时也是认证异常,但大部分时间都是正确的。而对于curl命令和手机请求,大部分都是有问题的。这个问题一直没解决,以为是证书通用性问题,就没再去深究。最近在开发pptp时,因为需要改变ip数据包,所以特地再跟踪了tcp协议。在分析tls时,发现很多网站的证书列表都是两个。一个是...

2020-03-19 20:23:56 936

原创 安卓自定义转发客户端数据包不可达相关问题(MTU、MSS)

最近在开发PPTP服务器,客户端和服务器的通信已经可以,剩下数据包转发逻辑。为了验证这套转发逻辑是否有效,我在安卓开发了自定义vpn客户端。由于是自己写的通信协议,我客户端和服务器直接使用udp传递数据包。udp内容就是ip数据包。开始以为,udp理论支持65535个字节,数据超过MTU会自动使用ip的分片逻辑(不保证一定可达,但传递ip数据包性质一样,所以不太关心)。然而,出现的问题就在这天真...

2020-03-18 22:13:57 635

原创 安卓自定义转发客户端内网访问问题

开始设计vpn的服务器和客户端时,以为客户端可以使用服务器内网ip进行访问。然而,实际测试发现,客户端数据包可以被服务器处理,但是服务器数据包无法被客户端处理。首先,我测试了icmp。客户端ping服务器(内网ip)和服务器ping客户端(vpn ip)都是可达的。之后,我再测试了udp和tcp。客户端发送的数据包都可以被服务器处理,然而,服务器发送的数据包,客户端都无法处理。总结就是,服务...

2020-03-18 20:45:36 319

原创 安卓gradle打包包含java8语法糖的库(脱糖打包)

现在安卓开发有些人已经开始使用java8语法糖和使用jdk1.8打包的库(没启用兼容编译模式,class版本是52)。然而,我还依然使用java7(class版本是51)开发和打包,这样就会在合并打包时出现dx错误。若你开始就是使用java8开发,则ide已经配置好,基本不会遇到这类打包问题。我这里主要说一下,之前工程一直使用java7开发,然后突然引用了包含java8语法糖的第三方库出现的问题...

2020-03-12 20:51:06 1326

原创 电脑无法连接蓝牙音箱和手机问题

最近买了一个蓝牙音箱,然而发现电脑无法连接!先说一下,我的电脑是Acer的Aspire ES1-512,自身是携带Bluetooth USB Module。然而,早期清理服务的时候,关闭了Bluetooth Support Service,导致很多功能都没有了,例如网络连接里面的“Bluetooth 网络连接”。即使开启服务,并使用设置里面的蓝牙管理也是不行。以下是我自己结合网上建议总结出来的方案...

2020-01-12 01:24:13 1629

原创 darkflow训练用的权重文件(tiny-yolo-voc of v2)

自己训练yolo模型时,需要提供的权重文件。这是tiny-yolo-voc of v2:https://pan.baidu.com/s/1UFgcqk0aflPr_DyL4W-NRA训练和测试使用darkflow项目:https://github.com/thtrieu/darkflow...

2020-01-02 10:28:16 437

原创 yolo-tiny预测时使用的权重文件(ckpt格式)

这是ckpt格式的权重文件,需要的可以下载使用:https://pan.baidu.com/s/1MxpP-ctwfCQ-731xnB8M9A我是使用一下github项目测试的。它还包含其它例子,非常适合学习:https://github.com/gliese581gg/YOLO_tensorflow...

2020-01-02 10:23:37 1138

原创 phantomjs截图显示中文

检查glibc:yum info glibc检查fontconfig:yum info fontconfig拷贝中文字体,例如微软雅黑。路径:/usr/share/fonts/,检查:fc-list以上操作需要root权限。检查时,若没有安装该模块,则需要安装。字体只能选择ttf,对于微软的一些格式,例如ttc、otf,不要使用。另外,安装字体时,一定要选择包含你要显示的字符集字体。例如为...

2020-01-02 10:05:32 452 1

原创 基于usb4java或libusb使用Android Accessory

Google对于Android Accessory的应用端开发有详细的例子,我这里就不发代码。实在看不懂官方例子,再找我吧,我把代码贴上来。主要提几个要点:1、activity配置的intent-filter,是在accessory通过AOA协议连接设备后,系统决定使用哪个应用的配置。例如我们配置的manufacturer、model、version,只有accessory连接时提供的信息一致,...

2019-12-30 21:50:30 1621

原创 usb4java无法读写键盘鼠标等usb设备问题

usb4java底层基于libusb,这个问题在官网已经有说明。简单说,系统的默认驱动程序已经占有了设备,libusb就无法读写数据。当然,设备的VID、PID信息还是可以获取。若只是开发设备检测应用,则可以不用替换驱动。因此解决方案就是安装官方的驱动程序。以下是我的安装步骤:1、下载libusbK开发包并安装。这个只是开发包,不会自动替换驱动,里面有inf修改向导2、打开Driver In...

2019-12-28 01:32:13 1211

原创 javacv接收rtp报Protocol not on whitelist 'file'!

使用ffmpeg或ffplay接收rtp数据流时,会报以下错:Protocol ‘rtp’ not on whitelist ‘file,crypto’!这是因为使用rtp需要udp和rtp协议的支持,但是默认协议只有file。在命令行上,我们可以直接配置参数解决这个问题:ffplay -protocol_whitelist file,udp,rtp test.sdp但是,直接使用jav...

2019-12-25 12:44:00 947 7

原创 javacv录制屏幕图像颜色不正确

java提供获取屏幕数据的接口,我们可以使用这个来实现截屏。BufferedImage image = robot.createScreenCapture(screenRect);这个接口返回的是BufferedImage对象。如果只是截屏,我们直接调用ImageIO的保存接口就可以。若需要录制屏幕,就需要结合javacv来保存视频文件。javacv处理的图像类是Frame。工具库里面提供...

2019-12-23 20:02:52 1211 2

原创 firewalld添加多个端口限制等高级功能

国内网站基本找不到详细的配置细节,只是基本的命令普及!对于个性化的订制规则,建议阅读官网文档:https://firewalld.org/documentation/使用rich-rule规则,我们可以自由限制ip、port、service。如果我们使用的服务规则比较多,例如包含多个端口,直接添加非常难管理。这时,我们需要自定义service来统合这些规则。我们可以编写一个service的x...

2019-12-22 11:26:12 3737

原创 adt无法使用最新版本build-tools-28问题

使用jdk1.8编译的jar需要使用最新的dx才能够编码。如果使用build-tools-25,那么会报错,提示不支持class的版本(52)。把sdk的build-tools替换成最新的28,gradle打包工程没有问题,但是adt在加载dx时会报错:Unable to build: the file dx.jar was not loaded from the SDK folder。有兴趣的...

2019-12-22 11:21:53 404

原创 生成chrome识别安全的证书

开发测试时,一般需要使用安全证书。但是,自己签名的证书总是提示不安全,影响实际测试。这里提供生成CA证书和服务器证书的脚本。通过以下方法生成的证书,在chrome浏览器打开是安全的,不会出现不安全提醒。生成的服务器证书提供通用格式的pkcs12(后缀用.p12)和java的特有格式keystore(后缀用.jks)。这样,不管是用将j2ee开发的服务器还是nodejs等开发的服务器,都能配置证书...

2019-12-22 08:36:20 830

原创 adt实现multidex(apk分包打包方案)

由于adt不支持multidex,如果工程函数数量达到65536(包括jar依赖里面的函数),dx会转换失败。首先,增加dex.force.jumbo=true是没用的,只要函数数量还是达到阀值,dx都会执行失败。解决这个问题需要采用分包打包,即multidex。如果使用gradle打包,那么只要配置multiDexEnabled=true就可以。这样dx就会采用multidex方式转换。由...

2019-12-22 08:27:08 226

原创 网页内异步下载文件

网页传统下载文件的方式,是直接open一个新的页面。但有时我们希望在网页内下载文件,然后再处理(或者弹出下载窗口)。特别是,下载的文件需要使用非GET请求,携带头部信息等,而传统的下载方式是无法实现的。这时就不能直接使用open打开下载地址,而是使用异步请求来实现这个需求。注意,jquery的异步接口无法实现blob数据下载。若下载的数据需要blob类型,例如图片,请使用XMLHttpReque...

2019-12-22 08:23:09 779

原创 实现在微信内跳转到外部浏览器的方法

在使用微信内置浏览器打开网页时,我们无法使用普通的open方法打开非网页内容,例如下载apk文件、pdf文件等。一般,我们会引导用户选择外部浏览器打开网页。在实践中,我发现还是很多用户会不小心点击下载按钮。这种使用体验确实很不好,但也很无奈~。其实,在文件下载方面,http有一个规范。若我们开发的网页没有遵循这个规范,在电脑端打开文件,有时也会自动打开文件而不是打开下载窗口!浏览器打开链接的时候...

2019-12-22 08:19:49 6440 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除