Android开发周边
本文最后更新于:2017年4月26日 凌晨
本文主要提到Android开发中的一些周边,不过做好Android开发,更需要在性能稳定性方面(如单元测试、开发流程、内存泄露的监控、关键页面进出时帧数的监控、应用线程数变化的监控、网络层优化、甚至是基于Android不同虚拟机规范更好的编程习惯对性能的影响)、安全方面(如如何更有效的反签名重新打包(如考虑关键ndk LoadLibrary中校验)、nimbledroid扫描系统、腾讯金刚审计系统、阿里聚安全检测)等),亦或是监控统计算法(如区间分段)、有损体验(如离线模式)等方面进行投入。
I. 开发工具
1. 快速运行github项目
开源库: cesarferreira/dryrun
通过dryrun
可以简单的通过一个github中的地址,就直接将项目运行到手机上。
2. 检索引用
开源库: cesarferreira/alfi
可以快速检索需要引用库的jcenter
与maven central
的引用代码。
3. 快速反编译
开源库: skylot/jadx
很便捷的反编译工具,可对dex文件直接反编译打开: jadx-gui classes.dex
。
4. 图片压缩
除了在CI系统上保持对资源变化的持续监控(对大多数的Android应用而言,资源往往是Apk大小的主要根源之一),别忘了对已有资源进行无损压缩(当然,如果是相对简单的图片尽可能使用矢量图(xml、vector drawable)方式,使得只要带上一个矢量图,而不需要带上多张不同dpi的图片来减少大小):
- Google刚开源的号称能够减少JPEG 35%文件大小的开源库: google/guetzli
- 高效且给力的png无损压缩工具开源库: nukesaq88/Pngyu
- 支持绝大多数图片类型多功能压缩神器ImageOptim: https://imageoptim.com/
II. gradle小技巧
- 通过
--offline
,离线编译,免去检测的网络耗时 - 通过
gradle --stop
,停止所有的gradle编译,包括IDE中的 - 需要配置分离api、impl包可以参考开源库: Jacksgong/gralde-sample
引用关系
可以通过 ./gradlew dependencies
来查看最终的依赖关系。
如针对项目中的app module
进行查看其引用关系: ./gradlew :app:dependencies
。
需要特别注意
都是对相通库同类型的引用,如都是testCompile
,或都是compile
,那么Gradle会自动选择最高版本的:
1 |
|
对相同库不同类型的引用时,此时会发生冲突:
1 |
|
这个时候我们就要根据需要exclude掉冲突的版本,如我们只需要引用okhttp 3.6.0
版本与filedownloader 1.4.1
:
1 |
|
III. 编程工具
1. 耗时日志
hugo
开源库: JakeWharton/hugo
轻松给方法添加耗时日志:
1 |
|
输出日志:
1 |
|
Pury
开源库: NikitaKozlov/Pury
统计事件之间的耗时:
1 |
|
2. 日志着色
开源库: JakeWharton/pidcat
3. 数据库网络监控
3.1 Stetho - Facebook
基于Chrome DevTools十分实用便捷的数据库网络监控工具,官网: http://facebook.github.io/stetho/
官网的教程已经非常简洁明了,如查看数据库:
首先引入基础库
1 |
|
在Application
中初始化它
1 |
|
然后手机连接电脑,Chrome浏览器的地址栏输入chrome://inspect
看到已经连接上的手机,并且看到初始化过Stetho应用的包名,点击`inspect`
然后通过`Resources`就可以查看到数据库信息了
3.2 Mitmproxy
在终端中抓包HTTP/HTTPS,官网: http://docs.mitmproxy.org/en/latest/mitmproxy.html
需要注意的是HTTPS需要在手机端安装对应的证书,HTTP直接可以抓取。如果你和我一样是VI-MODE的死忠粉,那么用起来就会非常爽且高效。并且你可以通过ustwo/mastermind来模拟相关请求的返回,来解决联调时,前后端互等的效率问题。
这块官网的教程也十分的详尽。比如监听并抓包8889端口过来的所有HTTP请求:
下面的案例运行在OS X下
安装
建议直接通过Homebrew直接进行安装: brew install mitmproxy
配置
安装完成后,在用户目录下会有相关的配置目录.mitmproxy
,打开~/.mitmproxy/common.conf
添加监听端口为8889
:
1 |
|
抓包
- 将手机与MacBook连接同一Wiki使其在同一个局域网内,然后在手机设置代理到MacBook的IP,端口为
8889
- MacBook上,在Terminal中输入mitmproxy,此时就开始抓包所有
8889
端口代理进来的HTTP请求了
3.3 其他
- 常见的Charles(收费的),通过窗口呈现,交互非常友好,很赞的抓包软件,并且你可以通过它的
Throttle Settings
来模拟不同的网络环境 - 抓包TCP协议层的TCPDUMP,如果你需要调优网络(如检测建连、挥手、期间的各类ACK、超时重连等TCP层细节)可以考虑使用这个。如需要监听所有来往
10.15.71.165
IP的TCP:sudo tcpdump host 10.15.71.165
4. 项目License配置
基于Android Studio的Copyright功能
第一步. 在Copyright Profiles中添加license
第二步. 在Copyright中配置项目默认的license
至此,默认创建的文件就顶部就会申明license,并且可以对文件一件添加license
当然如果需要特殊配置针对不同语言文件license格式等配置,可以在Formatting下面进一步配置。
5. 查看依赖库方法数
Methods Count: http://www.methodscount.com
6. UI生成器
如果是Material这类简单的图片,推荐使用
.svg
这样的矢量图来代替栅格化图片,以此不用考虑DPI的适配,因此只需要带一份图片,来减少包大小
并且在Support Library的23.2
版本或更高版本我们可以在ImageView
中使用app:srcCompat
而非android:src
使用svg来对下兼容
- Icon/styles genrator
- Material design icons
- Color Tool: 根据选择的颜色,快速呈现效果以达到创建颜色组合、预览效果、检测不同背景下文字的可辨度。
- Material icons: 这里有大量的material的Icon,并且可以直接下载
VectorDrawable
支持的SVG格式 - Device Metrics: 各类设备的尺寸以及Density、DPI
除了上面几个,也可以使用Android Studio自带的:
7. 包大小跟踪与对比
包大小跟踪
开源库: googlesamples/apk-patch-size-estimator
谷歌官方提供的Google Play差分包大小,也可以做简单的文件大小变更大小对比,可以集成到CI中持续跟踪包大小变化,也可以简单的对比两个包的大小:
1 |
|
可视化包大小内容比较
Android Studio Compare Apk files: https://developer.android.com/studio/build/apk-analyzer.html#compare_apk_files
通过Android Studio Compare Apk files工具进行对比
- Mastering the Terminal side of Android development
- Tracking app update sizes
- Resolving Conflicts in android gradle dependencies
- WHY YOU SHOLD CARE ABOUT COPYRIGHT
- Color Tool - Material Design
- How we reduced our Android app size by 65%