Kevin的博客


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Android-APK的压缩工具:img-optimizer-gradle-plugin

发表于 2017-10-18 | 分类于 工具

背景

img-optimizer-gradle-plugin,一款用于优化png图片的gradle插件,有效减少APK体积,支持极限压缩和无损压缩。
Github地址:https://github.com/chenenyu/img-optimizer-gradle-plugin

使用方法

在项目的build.gradle文件中添加如下配置:

1
2
3
4
5
6
7
8
buildscript {
repositories {
jcenter()
}
dependencies {
...
classpath 'com.chenenyu:img-optimizer:latestVersion'
}

在模块的build.gradle文件中添加如下配置:

1
apply plugin: 'img-optimizer'

在任务树中可以看到如下tasks:

双击执行task. task的名字受当前module的命名影响。

支持的配置

可以在module的build.gradle文件中添加配置选项,来自定义任务:

1
2
3
4
5
optimizerOptions {
triggerSize 5
type "lossy"
suffix "_opt"
}
  1. triggerSize 用于过滤图片,小于该值的图片不会进行优化。默认为0,即每张图片都进行优化。
  2. type 优化类型,目前支持”lossy”和”lossless”。”lossy”为极限压缩(推荐,速度快,压缩率高),”lossless”为无损压缩(速度慢,压缩率低,与原图无差别)。
  3. suffix 优化后的图片后缀。假如配置为”_opt”,ic_launcher.png经过优化后,将会生成ic_launcher_opt.png。默认为空,即覆盖原图。

补充说明

  1. 如果项目有多个module,请在相应的build.gradle中配置plugin,每个module相互独立。执行task后会在module根目录下生成log文件,详细记录了每张图片的优化情况,方便查看。
  2. 不同的buildType,可能对应不同的sourceSet(可能有不同的资源),即不同的res。
  3. 不同的buildType(release debug)对应相同的sourceSet ,运行其中一个就行。
  4. 实际用在lovebook项目中可以减少Apk 5M左右。
  5. 一定要注意suffix “” 默认改为空字符串

Gradle自动打包文档

发表于 2017-10-18 | 分类于 工具

背景

为了保证App上线前测试环境正式环境切换不需要改变代码,提高效率,使用Gradle脚本配置正式包和测试包。

Gradle配置与打包 build.gradle 文件的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
buildTypes {
/** 正式环境*/
release {
/** 定义开关*/
buildConfigField("boolean", "IsDebug", "false")
/** 定义正式环境 腾讯云bucket*/
buildConfigField("String", "TENCENT_UPLOAD_BUCKET", "\"topworld\"")
/** 定义正式环境 HOST*/
buildConfigField("String", "HOST", "\"www.lovbook.net\"")
/** 打开 代码混淆*/
minifyEnabled true
/** 打开 应用程序进行优化*/
zipAlignEnabled true
/** 打开 移除无用资源*/
shrinkResources true
/** 加载 签名文件*/
signingConfig signingConfigs.release
/** 加载 混淆文件*/
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
/** 输出 混淆apk release_vxx_codexx_yyyyMMddHH.apk*/
}
/** 测试环境*/
debug {
/** 定义开关*/
buildConfigField("boolean", "IsDebug", "true")
/** 定义测试环境 腾讯云bucket*/
buildConfigField("String", "TENCENT_UPLOAD_BUCKET", "\"lovebook\"")
/** 定义测试环境 HOST*/
buildConfigField("String", "HOST", "\"api.lovbook.net\"")
/** 关闭 代码混淆*/
minifyEnabled false
/** 关闭 优化*/
zipAlignEnabled false
/** 关闭 移除无用资源*/
shrinkResources false
/** 加载 签名文件*/
signingConfig signingConfigs.debug
/** 输出 apk debug_vxx_codexx_yyyyMMddHH.apk*/

其中release版本的log默认关闭,如果需要在该环境下看log,修改lovebook module的gradle配置文件。将IsDebug变量修改为true。

1
2
3
4
release {
/** 定义开关*/
buildConfigField("boolean", "IsDebug", "true")
}

在release版本中开启“shrinkResources true”,移除无用资源,会导致某些书籍的详情页面图片显示为黑框。是因为移除了不应该被移除的资源导致。所以release版本中该开关暂时关闭设置为false。后期继续优化这个问题。

代码中的配置:

在BuildConfig类中会生成如下代码:

gradle签名文件的获取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
signingConfigs {
release {
try {
storeFile file(RELEASE_STOREFILE)
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
storePassword RELEASE_STOREPASSWORD
} catch (ex) {
throw new InvalidUserDataException("You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.");
}
}
debug {
}
}

keystore签名文件的保存

签名文件keystore密码的常量配置在gradle.properties文件中(原则上这个文件不上传SVN):其中RELEASE_STOREFILE 对应你自己签名文件的路径。

编译app

生成apk配置完毕之后,重新编译之后,这时候AndroidStudio工具栏的左下方的Build Variants窗口里面的lovebook Module可以选择编译方式:release 和debug
(打包之前clean一下项目)

选择完毕,连接手机,运行编译器。会安装对应的relase或者debug包。同时在你的项目目录D:\as_pj\androidProject\lovebook\build\outputs\apk 也会生成对应的apk文件。

使用命令行打包

可以使用androidstudio工具下的 命令行使用gradlew命令进行打包,然后根据需要执行(1)/(2) /(3),生成的文件在 app–>build–>outputs–>apk下
(如果配置了gradle的环境变量 也可以使用gradle命令进行操作)。

(1). gradlew build <注:这个是打所有的包>

(2). gradlew assembleDebug <注:这个是打Debug包>

(3). gradlew assembleRelease <注:这个是打Release包>

总结

后期会根据情况添加多渠道打包.

非root查看手机数据库和SharedPreferences的方法

发表于 2017-10-16 | 分类于 工具

前言

版权归作者所有,如有转发,请注明文章出处:https://xiaoduoduo.github.io/archives/

简介

非root情况下查看手机数据库和SharedPreferences的方法有两种:

方法一:Stetho

方法二:Android-Debug-Database

方法一: Stetho

github的地址:点击进入

第一步:在gradle.gradle中添加:

1
2
3
dependencies {
compile 'com.facebook.stetho:stetho:1.5.0'
}

第二步:Application初始化:

1
2
3
4
5
6
public class MyApplication extends Application {
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}

第三步:运行程序:

手机可以通过usb链接电脑,并且是在开发者模式的模式;

浏览器输入这个地址:
chrome://inspect/#devices

点击 inspect

进入调试界面:

方法二: Android-Debug-Database

github的地址:点击进入

第一步:在gradle.gradle中添加:

1
debugCompile 'com.amitshekhar.android:debug-db:1.0.1'

debugCompile只会在debug模式下编译使用。

第二步:打开你的Application 添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
public static void showDebugDBAddressLogToast() {
if (ConfigureSet.IsDebug) {
try {
Class<?> debugDB = Class.forName("com.amitshekhar.DebugDB");
Method getAddressLog = debugDB.getMethod("getAddressLog");
Object value = getAddressLog.invoke(null);
LogUtils.i("DebugDB: " + value);
} catch (Exception ignore) {
}
}
}

第三步:运行app控制台查看log输出:

ps:

1. 保证你的手机和pc在一个局域网。

2. 如果你要修改8080端口,只需要在build.gradle中的buildTypes下面你的debug中进行配置:

1
2
3
4
5
6
buildTypes {
debug {
resValue("string", "PORT_NUMBER", "8081")
...
}
}

这时候控制台log:

第四步:浏览器打开网址:http://192.168.0.118:8081

可以修改、添加和删除数据库中的数据:

总结

第一种方法,功能十分强大,但是需要使用usb链接设备和电脑,而且有时候打开速度比较慢。
本人比较喜欢第二种方式:简单、方便。

Alibaba Java Coding Guidelines使用

发表于 2017-10-16 | 分类于 工具

前言

版权归作者所有,如有转发,请注明文章出处:https://xiaoduoduo.github.io/archives/

背景

阿里巴巴于10月14号在杭州云栖大会上,正式发布《阿里巴巴Java开发规约》的扫描插件。该插件在扫描代码后,将不符合规约的代码按Blocker/Critical/Major三个等级显示在下方,甚至在IDEA上,该插件还基于Inspection机制提供了实时检测功能,编写代码的同时也能快速发现问题所在。对于历史代码,部分规则实现了批量一键修复的功能。

github地址

https://github.com/alibaba/p3c

效果图如下:

插件的安装方式

最低版本 JDK1.7+

打开AndroidStudio Setting–> Plugins–> Browse repositories

输入Alibaba 可以看到插件 点击安装

重启as

这里我已经做了安装

使用方法

鼠标右键即可:

运行可以看到编辑器底部提示信息:

代码提示:

完整提示

部分不规范的代码,支持一键修复

总结

代码规范可以提高我们的编码、排错效率,开发团队都应该遵守。

Android App自动化测试: OPEN-STF环境搭建

发表于 2017-10-13 | 分类于 测试

前言

版权归作者所有,如有转发,请注明文章出处:https://xiaoduoduo.github.io/archives/

背景

1、测试是检验程序质量的保证,而自动化测试是提高测试效率的最好方式。就目前来说,通过UiAutomator,Robotium、Monkey,Appium 等工具。配合测试开发所写的测试脚本,要实现一个自动化测试的工作其实并不难,难得是Android的兼容性测试,由于Android设备的多样性,导致了各种机型的适配问题是测试最容易忽视的地方。

2、如何在多机型上进行自动化测试呢?目前Open STF(Smartphone Test Farm)的解决方案,其官网的地址是:https://openstf.io/。

3、这个系统类似于目前很流行的云测服务比如Testin,虽然网页上提供的设备很想模拟器中的设备,但是实际上都是真机。

Open STF的功能

STF工具( Smartphone Test Farm),基于NodeJS编写,可用于Android设备的远程管理。

1、 在Web上支持管理上百个android设备。

2、 支持Android多个版本(2.3.3 ~ 5.1),而且不需要root。

3、 实时屏幕操作和显示。

4、 支持adb connnect远程连接调试。

5、 可以从PC机键盘输入到远程的android设备中。

6、 安装卸载APK。

7、 android设备信息的展示(如:网络状态、MIME、android版本、手机型号等等)。

8、 远程开关机、远程开关WIFI、截屏、LogCat等等。

可以看两张直观的图:

Open STF环境的搭建

安装简介

Github地址:https://github.com/openstf/stf

官方推荐是用Linux系统或者OS X系统搭建,并不推荐使用Windows环境。

对于环境的要求:

1、 Node.js >= 6.9 (latest stable version preferred)

2、 ADB properly set up

3、 RethinkDB >= 2.2

4、 GraphicsMagick (for resizing screenshots)

5、 ZeroMQ libraries installed

6、 Protocol Buffers libraries installed

7、 yasm installed (for compiling embedded libjpeg-turbo)

8、 pkg-config so that Node.js can find the libraries

安装环境

本蚊使用的系统环境:ubuntu 64位,kernel version 4.4.0
安装的方法有两种:

方法1:使用官方的文档一步一步安装。
官方文档
https://github.com/openstf/stf/blob/master/doc/DEPLOYMENT.md

其他博客地址:http://blog.csdn.net/addisonko/article/details/50912357

很多文章介绍的装stf要先装一堆工具,然后使用npm install -g stf安装到系统中,大部分人会发现,由于网络或者其他原因,npm install -g stf方式也不太容易成功。

方法2:推荐使用docker容器来搭建,根据我的搭建经验,docker容器确实更方便一些。

在之前的搭建环境过程中使用方法1遇到很多问题(包括版本的兼容,stf下载不下来,权限等问题),推荐使用方法2搭建环境。本手册介绍的是方法2.

Docker的简介和安装

Docker的简介

Docker的三大核心概念:

镜像、容器、仓库

镜像:类似虚拟机的镜像、用俗话说就是安装文件。

容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,
可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。

仓库:类似代码仓库,是Docker集中存放镜像文件的场所。

Docker的安装之Firstblood

在Ubuntu系统下打开终端 分别使用如下几条命令:

1
2
3
4
5
uname -r // 查看版本
su // 切换root
apt-get update // 更新配置
apt-get install -y docker.io // 安装docker
service docker start // 启动docker服务

检查是否安装成功 docker version 看到如下信息,恭喜你,安装成功!!!

STF相关镜像的拉取

获取镜像

在Ubuntu系统下打开终端 分别使用如下几条命令:

1
2
3
4
5
docker pull openstf/stf:latest // 拉取stf镜像
docker pull sorccu/adb:latest // 拉取adb镜像
docker pull rethinkdb:latest // 拉取rethinkdb数据库镜像
docker pull openstf/ambassador:latest // 拉取ambassador镜像
docker pull nginx:latest // 拉取nginx镜像

举几个截图的例子:

检测镜像

输入命令:

1
docker images // 查看所有镜像

启动STF容器

接着在终端 分别使用如下几条命令:

启动容器

1. 首先启动一个数据库:

1
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090

其中860e60ac3c44d14f76ae6c1efb77d20c1d058c178512934cedbb3985f8f13e66是从容器的id号,每个容器的id号是唯一的。

2. 然后启动adb service

1
docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb --net host sorccu/adb:latest

3. 最后启动stf

1
docker run -d --name stf --net host openstf/stf stf local --public-ip 192.168.228.129

其中 ip填写你自己本地的ip地址。
查看ip ifconfig

查看镜像

可以查看启动起来的镜像:

1
docker ps

打开地址

使用浏览器打开如下地址:http://192.168.228.129:7100/#!/devices

这时候会看到一个登录页面,至此 环境搭建成功。
账号和邮箱不需要注册,按照规则输入 即可。
进入页面。

点击use,可以操控手机:
可以使用adb命令来操作手机。
可以查看log日志等。
在这个界面中,开发者就可以根使用模拟器一样来操作远程设备了。唯一不同的是,这个是真实的设备而不是模拟器。国内很多测试公司头提供了这样的服务。
这些服务商提供的功能大同小异,但是公网的云测试服务完全依赖于网速,其画面的流畅度远不及内网Open-STF方案。

踩坑

相关资源被锁

安装更新的时候提示相关资源被锁,无法下载更新 使用如下命令进行解锁

1
2
3
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
root权限下可以不用sudo

STFService disconnect

搭建好系统之后 插入手机,打开 http://192.168.228.129:7100/#!/devices ,然后查看找到了设备,状态先是prepare 然后过了几秒又 disconnect了。切换了 火狐 google浏览器也是这样的问题。

最后通过查看log:

1
2
3
INF/device:plugins:service 3434 [621QECQT4RS7A] Launching service
FTL/device 3434 [621QECQT4RS7A] Setup had an error Error: Service had an error: "Error: Not found; no service started."
INF/device:resources:service 3566 [621QECQT4RS7A] Checking whether we need to install STFService

提示手机端的stfservice没有启动起来。(就是有些手机不允许直接启动service,因此我们如果按照如下步骤是不能达到目的的)
启动手机端的service然后就可以连接ok。

Hello World

发表于 2017-10-12

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

liduo

liduo

Life is now !

6 日志
2 分类
2 标签
RSS
© 2017 liduo
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.3