HEIF图片存储格式探秘
HEIF,High Efficiency Image File Format,即高效率图档格式,是由动态图像专家组(MPEG–Moving Picture Experts Group )在2013年推出的存储图片和图片序列的新格式,用于HEVC关键帧的处理上,因此它同样可以用更少的容量来存储画质更好的照片,在连拍、动图和色彩变化不大的照片上效果尤其明显。
官网:http://nokiatech.github.io/heif/
比较:http://nokiatech.github.io/heif/comparison.html
GitHub地址:https://github.com/nokiatech/heif
在git的wiki上有说明如何进行编译,需要再linux中进行编译,今天安装了linux系统,然后,准备编译一下。
1. 编译构建从GitHub上下载了Nokia的代码,语言不通,几乎看不懂,但是,从wiki上看到了如何进行编译和构建,于是决定试试。
在Linux环境下,打开命令行模式,输入命令进行下载:
下载完成后,可以看到目录结构如下:
然后,进入heif目录,新建文件夹 ...
斗地主算法
最近需要做一个类似于斗地主的游戏,由于只是类似斗地主的游戏,因此,规则方面和斗地主存在一些不同,但是在算法上,也是大同小异,现对该游戏算法进行总结:
1.定义牌对象 首先需要对牌对象进行定义,正常斗地主玩法下,一张牌只有一个属性,就是数字大小,而不管花色,而在我们的游戏中,同样数字的牌,不同花色之间还可以比较,因此,我们的牌一共有两个基本属性,分别为花色和大小。
1.1 规则对于花色,规则定义如下:黑桃>梅花>方片>红桃
对于数字,规则定义如下:2最大,3最小
1.2 建模我们将牌的牌面实际数字使用数字进行标记,使用数字3到15表示真实牌的3到2,其中11表示J,12表示Q,13表示K,14表示A,15表示2,其余数字分别代表真实牌面数字。
将牌的牌面花色同样使用数字进行标记:根据从大到小,分别标记为:4——黑桃,3——梅花,2——方片,1——红桃。
这样,对于一张牌的数字模型,使用以下公式进行标记:
牌数字模型大小 = 牌面数字模型大小 * 10 + 牌面花色模型大小
// 牌号点数:如3~J~A~2,使用3~15数字
private int card ...
Android自动化测试——Money
之前有和公司同事一起研究过Android的一些自动化测试工具,当时记得花费了大半天时间去研究怎么使用,但是却忘记整理了,趁着最近不太忙,整理下Android的自动化测试工具吧。
当前最常用的Android自动化测试工具主要有以下几个:
Monkey: 主页地址(Google)
MonkeyRunner: 主页地址(Google)
Robotium: 主页地址(Git)
这三个中,Monkey和MonkeyRunner均在Google的开发者中心有介绍,上边也有给出连接,需要翻墙,下边将逐个进行介绍。
1.MonkeyMonkey是Android系统自带的测试工具,谷歌官方给出的介绍是:Monkey是一款可以运行在虚拟机或是真机上的测试程序,主要原理是通过发送一系列的伪随机流事件,模拟用户点击滑动等操作,测试应用程序的健壮性。
1.1 Monkey命令Monkey的使用方法比较简单,使用adb连接上客户端以后,可以直接使用Monkey命令进行测试
图中红线圈出来的为一些常用命令:
-p 指定应用程序包名
–pct-touch 指定输入touch事 ...
Android自动化测试——MoneyRunner
接着上一篇文章继续写,上篇文章中,主要对Android自动化测试——Monkey的概念和使用方法进行了简单介绍,,这篇文章中,我们继续探讨MonkeyRunner的使用
有人之前问过我,Monkey和MonkeyRunner之间有什么区别,我用这样一个比喻来回答他,Monkey就是一只猴子,放养的猴子,未经训练的猴子,所以它在测试的时候,只会胡乱点、胡乱划(随机事件);而MonkeyRunner则不同于Monkey,它属于家养的,经过训练的,可以按照主人的命令,做出各种动作(自定义事件)。
ok,下边直接讲如何使用MonkeyRunner
1.1 MonkeyRunner环境搭建搭建MonKeyRunner环境需要以下三部分:
Java环境,及Java环境变量配置
Android SDK Monkey是Google提供的自动化测试工具,在SDK根路径的tools文件夹中可以找到,因此,使用MonkeyRunner需要下载安装SDK。 下载完成后,直接解压,绿色,无需安装,注意解压路径不能有中文或空格。
SDK下载路径
安装Python编译环境 :Python用于支持Monke ...
Android更新机制(自己服务器和GooglePlay更新)
本片文章主要介绍了自己服务器更新和GooglePlay更新的解决方案,不包含其他第三方(如Umeng、其他应用市场等)更新。之所以要区分GooglePlay更新和自己搭建服务器更新,是因为GooglePlay在13年修改其开发者中心对Dangerous Products的定义时,有提示如下文字:
即:凡是从GooglePlay中下载的应用,不得GooglePlay的更新机制,自行更改、替换、升级Apk二进制代码。因此对于在GooglePlay上线的应用,只能交由GooglePlay维护版本更新。
这样,我们在开发过程中,若使用自己搭建服务器维护更新的,需要对自己服务器版本和GooglePlay版本进行区分。包括打包和更新区分。
更新机制我们在自己的应用中,使用如下更新机制
总的来说,自己服务器需要配置三个信息,
当前最新版本号
是否强制更新(不建议使用强制更新,用户体验实在太差)
CooGame服务端最新版本下载地址
检测更新步骤
无论GooglePlay版本还是CooGame版本,打开时均从CooGame版本请求最新版本信息,返回最新版本号和下载地址
当发现有新版本时 ...
Android升级6.0后使用Https请求出现Handshake failed错误
昨天手残,使用HTC M8升级了一下最新系统,Android6.0版本的,升级后,在测试我们的应用时,突然出现握手失败错误:
即显示握手失败,但是在Android6.0以下版本中,并没有出现该问题。
一、Android6.0的一些修改因为该问题仅仅出现在Android6.0版本中,因此,考虑是由版本升级引起的。查看Google给出的Android6.0修改文档,发现以下两点:
即:
从Android6.0之后将不再支持HttpClient的使用,建议使用HttpURLConnection代替。
Android6.0之后,在Https请求中,SSL层将不再使用OpenSSL协议,改用自己的BoringSSL协议
2. 分析2.1 取消HttpClient在我们的项目中使用的是HttpClient执行Https请求,但是官方升级只是在API文档中删除了HttpClient相关的文件,但是并不影响其使用,用户可以通过以下两种方法继续使用:
使用Android6.0进行编译,则需要添加 org.apache.http.legacy.jar,文件目录:SDK\platforms\and ...
Android使用CRC校验
最近手头的一个项目,客户端和服务端之间进行通讯时,由于受到当地网络等问题的限制,使用Json传输,数据内容过于庞大,需要对该信息进行压缩,以便实现快速传输。这里使用Byte数组进行传输,前后台对协议进行商定,而后编码、传输、解码实现通信,传输过程中,为保证传输内容的完整性,需要使用CRC进行校验。
CRC概念——百度百科CRC即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
CRC编码编码:根据传输内容逐位计算,得到CRC编码,附加在该Byte数组后边。
123456789101112131415161718192021222324252627282930313233/** * 为Byte数组添加两位CRC校验 * * @param buf * @return */ public st ...
在AndroidStudio中使用Eclipse下的CodeFormates和CodeTemplates
换Eclipse为AndroidStudio后,需要将之前Eclipse中的CodeStyle和Formatter导入AndroidStudio中使用。具体操作步骤如下:
导入Formatter想要在AndroidStudio中使用Eclipse风格的Formatter,首先需要安装插件:
点击File——>Setting
在打开的Setting界面中,点击Plugins,然后在搜索框中输入Eclipse Code Formatter,搜索结果中点击安装(因为我之前已经安装过了,所以这里只显示Uninstall)
安装完毕后,再次打开File——>Setting,会出现Eclipse Code Formatter 选项,一般在OtherSetting中,若没有可以使用上边的搜索框进行搜索。
打开后,选择 Use the Eclipse code formatter 然后在下边的Eclipse Java Formatter config file中设置自己Formatter的文件路径,然后点击Apply,即可生效。
配置完成后,需要进行激活才能使用Ecli ...
Android下使用Protobuf进行序列化
Protocol Buffer是Google发起的,一个语言无关、平台无关的序列化/反序列化结构化数据的通用机制(框架),可用于通信协议,数据存储等。
近期在做一柬埔寨的小项目,上线后在运行过程中,总是有用户反映应用在网络请求时,速度较慢,影响用户体验。对该问题结合使用环境及代码进行分析,发现存在以下问题:
App中使用Json进行数据传输,存在很多冗余字段的传输,而且经过查阅资料,Json对数据进行序列化以后,数据包仍然很大。
柬埔寨存在网络信号问题,很多情况下,信号较差,大数据包的传输存在压力
综合来说,网络环境不稳定和传输数据包过大应该是导致网络请求过程中吃力、或者是超时的主要原因,因此,在优化时,主要考虑如何压缩传输过程中数据包。
1. 什么是Protobufprotobuf,全称:Google Protocol Buffer,是Google开源的一种轻便高效的结构化数据存储格式,可以用于结构化数据的串行化,也称作序列化,主要用于数据存储或是RPC数据交换,支持多语言,可拓展
2. 项目主页protobuf主页: 主页地址
protobuf下载(Java): ...
Https单双向认证
Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本传输协议,网景公式设计了SSL(Secure Sockets Layer)协议用于对Http协议传输的数据进行加密,保证会话过程中的安全性。
一、HttpHyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。
使用TCP端口为:80
二、HttpsHyper Text Transfer Protocol over Secure Socket Layer,安全的超文本传输协议,网景公式设计了SSL(Secure Sockets Layer)协议用于对Http协议传输的数据进行加密,保证会话过程中的安全性。
使用TCP端口默认为443
三、SSL协议加密方式SSL协议即用到了对称加密也用到了非对称加密(公钥加密),在建立传输链路时,SSL首先对对称加密的密钥使用公钥进行非对称加密,链路建立好之后,SS ...