文档章节

Android开发在路上:少去踩坑,多走捷径【转】,个人保存慢慢看的

Litter小强
 Litter小强
发布于 2015/06/13 10:35
字数 2664
阅读 8
收藏 0
点赞 0
评论 0

作者:gzjay,腾讯MIG无线产品部 高级工程师

最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享。


1.目前, Android APP开发完成后,通常需要在哪些机型上进行测试?


2.目前, 开发Android APP时,需要考虑的分辨率有哪些?


这两个问题可以合起来回答的。

http://developer.android.com/about/dashboards/index.html

源自Google Play的数据,每月都会进行update,可以及时了解Android版本比例趋势。



屏幕密度数据



OpenGL ES版本



也可以参考一下国内一个第三方数据:http://www.umindex.com/#android_device



目前三星和小米市场占有率是遥遥领先的,三星Note2、Note3、S3、S4、S5、小米123、红米必须测试,魅族也比较坑爹,加入测试名单吧。再选中小屏幕各一款(譬如华为C8650、Moto ME511)。

Android 1.5、1.6、2.0、2.1和小屏幕的属于古董级别的机器,市场存量也很少,新出的机器都是4.0以上的了,所以必要时需要舍弃对古董的支持,因为适配成本很高,对于新开发的应用,这个适配不值得投入。


3.目前, 开发Android APP时,适应多个分辨率的技术方案有哪些?


http://developer.android.com/guide/practices/screens_support.html

Android的屏幕适配,可以在工程res目录下进行处理,无需写代码,Android自动找最适合的资源进行显示,相信大家都相当熟悉的了。


目前我使用的是ADT22.6,新建一个Android工程,会自动在res目录下生成这个目录结构。这里有5个前缀drawable的文件夹,对应不同密度屏幕时所取的图片资源或者样式。



做一个功能正常的App,开发者需要遵循一些开发守则,与此同时,设计师也需要有一套标准来设计Android UI,所有的Android UI设计指南都在这里了。

http://developer.android.com/design/style/devices-displays.html


9Path这个简单易用的工具,很实用,必须推荐。


画个图标,都要出N种分辨率,每次机械操作实在有点弱爆,推荐一个牛X的工具:


其中的功能可以自动切图输出各种屏幕密度的icon,可视化构建布局,自动生成布局文件。

http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html


推荐这个,设计师应该会很喜欢,秒切图。

http://www.cutandslice.me/



实际开发中,考虑到包体积大小,不会在所有drawable中都放不同size的图片资源,而是只使用一套图片资源,编写不同的布局。个别特殊的图片资源就每个drawable文件夹中放相应的size,譬如程序图标,不按文件夹放可能会导致在Launcher显示失真。



虽然不作任何改动也可以在Android Pad上跑,但由于Pad屏幕较大,操作体验不一样,建议重新设计。


4.开发Android APP时,配置文件应放在哪里(APP本地、远程WeB Server中)?应该如何考虑?


这个就要看需求了,如果只是本机使用,譬如保存软件设置,不需要联网操作的,那首选当然是保存在本地。


如果业务需要和服务器交互,可以做成云配置方式。为了跨平台的兼容性,可以考虑使用Google的ProtoBuf,比XML更小更快更简单,后台和终端定义一套协议,自动生成C++、Java或者Python代码。https://developers.google.com/protocol-buffers/docs/overview?hl=zh-CN


5.Android APP测试方案通常考虑哪些因素?有测试方案的参考实例吗?


机型适配:屏幕大小,这个只能人工检验了(程序不知道你的UI长得好不好看)


Android版本(某些API在低版本上没有的,会Crash,推荐Lint静态扫描)


网络质量:联通、电信、移动、WiFi、弱网络等


安全性:网络数据必定经过加密处理;本地不保存安全信息(帐号密码等),或者加密保存


代码中敏感信息尽量使用byte数组而不是字符串代码混淆处理(Proguard)


SD卡剩余空间很少,没SD卡,双SD卡,飞行模式,时间有误等。


性能:CPU、内存占用(开发可以使用Linux的top命令或者DDMS里面的工具)


网络流量消耗(有各种第三方流量监控软件)


6.开发Android APP时,为了提高工作效率,提高项目质量、通常需要抽象出一些lib出来,请列出经常用到的接口的名称和用途。



更多精彩可以上github搜搜,这就不班门弄斧了。

7.Android APP开发中其它需要提醒的问题


android4.4在UI线程无法进行网络操作不单只android API版本不一定导致运行异常,有些机型还使用Java 1.5进行编译,使用某些Java 1.6的函数会Crash的。


注意OOM问题,目前android手机已经有3G内存了,但并非一个应用就能使用全部内存。了解一下堆内存,一个软件至少一个进程,一个进程跑一个虚拟机,进程使用的堆内存大小,每部手机不一定一样。


Show Dialog的问题,永远要判断Activity是否还在。


使用了高版本的API函数,在低版本机器上挂了。

非UI线程不能操作UI。可能有各种权限被禁的问题。


没有浏览器、没有软件安装器、没有Email等发生ActivityNotFoundexception。


超快速连续点击按钮可能触发跑多个线程的问题。


Android4.4短信权限设置,原生系统带有新接口,第三方系统可能裁剪掉了。


8.什么情况下发生OOM,如何避免?


图片操作(图片缩放、bitmap生成等)、序列化反序列化数据等会消耗大量内存。合理使用数据结构(链表和数组),及时释放引用,使用弱引用等能降低OOM情况发生。


9.出现ANR怎么办?


如果Android程序某个操作执行等待超过5s,会出现ANR(Application Not Responding)的对话框,对于执行耗时的操作,譬如网络操作,就不能在主线程上进行了(Android 4.4不让你这样做了),这些任务应该跑在主线程外,譬如新建一个线程处理,或者自己写一个网络引擎对所有网络请求进行管理。


10.如何跟踪研发质量?


Coverity接入:https://scan.coverity.com/

代码缺陷扫描,不扫不知道,一扫吓一跳。满分推荐!Fro Free!如果你写的是开源代码,还能直接接入GitHub,超方便。


Crash是无法避免的,我们能做的是尽量把Crash的情况减少。发出去的版本,用户发生Crash了,我们需要把Crash数据收集起来。所以软件需要做一个Crash上报,汇总整理。统计每个版本的Crash率,并把Crash按优先级进行修复。


当然,版本检查更新也少不了。


11.如果跟踪用户对产品的反馈?


不管你写软件所用的技术有多么牛B,用户是不知道的,也不关心的。用户关心的是你的产品体验到底有多牛B。加上用户可以轻松反馈的反馈功能,你会发现有时用户的idea还不错的。


做出来的产品好还是不好,需要有产品数据支撑,所以加插相关数据统计上报点,哪个功能热门,新增用户多少,活跃用户多少,一目了然。


12.安全检查


为避免异常情况的跳转或者恶意攻击,Android组件在启动时都需要判断传入的参数是否为空。


敏感信息需要进行权限限制或者加密处理。


能不暴露的组件就不暴露,在AndroidManifest中为组件加上android:exported=”false”属性。


需要暴露的组件通过自定义权限进行调用,添加自定义权限android:permission=”yourapp.permission.CALL”检测WebView漏洞http://security.tencent.com/index.php/opensource/detail/1


13.常用工具有哪些:


Lint(清理资源、安全检查、layout优化等)

一般在提测前清理一下冗余资源,查一下有没有用了一些高API Level才有的接口,查一下安全问题。

Findbugs(检查java代码缺陷)


在开发工程中就可以对单个文件进行检查,有问题可以及时处理。



MAT(内存泄漏调试工具)http://www.eclipse.org/mat/


遇到内存或者性能问题时,一般会结合几种工具来查问题,找解决方法。

Method Profiling(统计方法耗时)

Eclipse Class Decompiler(从此Eclipse不怕看不到jar包内的代码了)http://feeling.sourceforge.net/update


Hierarchy Viewer(查看Activity堆栈、layout加载层次、像素眼)


只能连接开发板手机或者模拟器,如果你的手机连不上,搜一下“Hierarchy Viewer 真机”,各种教程教你如何连上。


Activity太多,有时出问题了,但又想不起这个页面叫什么名字,插上去,一目了然。



很清晰看出Layout布局层次, 还能显示计算layout耗时,绘图耗时,UI性能优化好帮手。



TinyPNG(压缩图片资源利器,山崩地裂推荐)https://tinypng.com/



7z(压缩APK利器,上线前压一下就可以,简单实用,五星推荐)



Apktool、Dex2jar 、jd-gui(反编译套装,你懂的)



Mark Man(设计师何苦为难工程师)



Beyond Compare(各种神对比,我喜欢对比代码)



Tcpdump(Linux dump包工具)

adb shell tcpdump -p -vv-s 0 -w /sdcard/capturenet.pcap

WireShark(查看网络dump包)

遇到棘手问题时,还是需要他们帮忙解决的。


CMD (很简单的脚本却能大大提高效率,大家多学多分享)


一些经常操作的动作,使用手工操作又耗时又麻烦还可能出错,使用命令行去操作的话会极大提供效率。



拖放安装应用,不用再弹出xx助手xx宝来的蜗牛速度安装了(速度快了,心情好了):

adb install %1

pause


卸载应用:

adb uninstall com.tencent.qqpim


拉去SD卡目录文件

adb pull /sdcard/test/log c:testlog


获取联系人db

adb pull /data/data/com.android.providers.contacts/databases/contacts2.db C:contact2.db


tcpdump包

adb shell tcpdump -p -vv -s 0 -w /sdcard/capturenet.pcap


SDK裁剪打包

裁目录:rd/s/q S:tencentsrcAGJ

裁文件:del S:tencentsrccomtencenttestTestApplication.java


本文转载自:http://my.oschina.net/LittleDY/blog/293060

共有 人打赏支持
Litter小强
粉丝 1
博文 3
码字总数 118
作品 0
西昌
Android Espresso AppNotIdleException

最近在研究安卓单元测试,看到官方推荐用Espresso做UI层面的测试,就简单用了下。虽然Espresso很简单,但是适配到真实项目中还是走了不少弯路,踩了不少坑的。这里记录一下: 由于项目开发的...

H3c ⋅ 05/10 ⋅ 0

react-native技术的优劣

前言 从2017年初开始到现在,使用React-Native做项目已经一年了。我们做的是一款IM软件,嵌入在一个手机游戏平台的工程内部。之所以要采用react-native(后文简称RN)框架重构它,是因为现在...

codeGoogle ⋅ 04/23 ⋅ 0

Android开发在路上:少去踩坑,多走捷径

近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享。 1.目前, Android APP开发完成后,通常需要在哪些机型上进行测试? 2.目前, 开发Andro...

zplswf ⋅ 2014/08/07 ⋅ 2

Android开发在路上:少去踩坑,多走捷径【转】

作者:gzjay,腾讯MIG无线产品部 高级工程师 最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享。 1.目前, Android APP开发完成后,通常需...

火蚁 ⋅ 2014/07/20 ⋅ 7

Unity发布Android版本

先大概说一下我自己的经历吧,总的大概用了10小时吧。刚开始装的是jre和Android stdio,然后发现要装的是JDK和SDK,然后去装JDK和SDK,装JDK很顺利,装SDK失败了,原因未知。后面是用 Androi...

a_clear_chen ⋅ 05/08 ⋅ 0

如何让你的app在后台被干掉后优雅的启动。

作为一名Android开发师,肯定在处理用户的体验上下一定的功夫。有这么一个场景,在用户用着你开发的app的时候,突然某个聊天工具来消息了,切换到聊天工具后长时间停留,并且可能做了一些你不...

她的梦z ⋅ 04/11 ⋅ 0

互联网三线城市春招Android面试笔记

概述: 坐标:福建福州 学历:专科(软件工程专业) 历时:2个月(2018.3.20~2018.5.17) 平台:前程无忧(51job.com)、智联招聘(zhaopin.com) 投递简历:62份(前程49+智联13) 面试:2...

E_Sun伊森 ⋅ 05/18 ⋅ 0

Unity 安卓截图保存到本地,获取本地图片并显示

关于这个截图并获取的功能,并不是很难,而且网上到处都是解决方法,主要是因为自己在这里踩到了坑,所以还是记一下,也希望能帮到和我一样碰到这个坑的人;总之还是先上代码: using System...

qq_35539447 ⋅ 03/13 ⋅ 0

360插件化RePlugin踩坑

点击链接购书 1.什么是RePlugin? 在Android开发领域,有关插件化的讨论一直热度不减。目前市面上的插件化方案虽然很多,但多数只能实现某些功能的插件化,距离开发者的预期尚有相当差距。对...

异步社区 ⋅ 06/08 ⋅ 0

只需两步获取任何微信小程序源码

第一次在掘金这样高大上的社区写文章,忐忑地敲下我获取小程序源码过程中的经验分享。 最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了一个滴滴他们家的青桔单...

行无忌 ⋅ 05/31 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Greys Java在线问题诊断工具

Greys是一个JVM进程执行过程中的异常诊断工具。 在不中断程序执行的情况下轻松完成JVM相关问题排查工作 目标群体 有时候突然一个问题反馈上来,需要入参才能完成定位,但恰恰没有任何日志。回...

素雷 ⋅ 26分钟前 ⋅ 0

git从远程仓库拉取代码的常用指令

一种(比较麻烦的)拉代码的方法 git clone //克隆代码库,与远程代码库的主干建立连接,如果主干已经在就不用再clone啦,克隆路径为当前路径下的新创建的文件夹 git checkout -b //本地建立...

Helios51 ⋅ 41分钟前 ⋅ 0

005. 深入JVM学习—Java堆内存参数调整

1. JVM整体内存调整图解(调优关键) 实际上每一块子内存区域都会存在一部分可变伸缩区域,其基本流程:如果内存空间不足,则在可变的范围之内扩大内存空间,当一段时间之后,内存空间不紧张...

影狼 ⋅ 46分钟前 ⋅ 0

内存障碍: 软件黑客的硬件视图

此文为笔者近日有幸看到的一则关于计算机底层内存障碍的学术论文,并翻译(机译)而来[自认为翻译的还行],若读者想要英文原版的论文话,给我留言,我发给你。 内存障碍: 软件黑客的硬件视图...

Romane ⋅ 今天 ⋅ 0

SpringCloud 微服务 (七) 服务通信 Feign

壹 继续第(六)篇RestTemplate篇 做到现在,本机上已经有注册中心: eureka, 服务:client、order、product 继续在order中实现通信向product服务,使用Feign方式 下面记录学习和遇到的问题 贰 or...

___大侠 ⋅ 今天 ⋅ 0

gitee、github上issue标签方案

目录 [TOC] issue生命周期 st=>start: 开始e=>end: 结束op0=>operation: 新建issueop1=>operation: 评审issueop2=>operation: 任务负责人执行任务cond1=>condition: 是否通过?op3=>o......

lovewinner ⋅ 今天 ⋅ 0

浅谈mysql的索引设计原则以及常见索引的区别

索引定义:是一个单独的,存储在磁盘上的数据库结构,其包含着对数据表里所有记录的引用指针. 数据库索引的设计原则: 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索...

屌丝男神 ⋅ 今天 ⋅ 0

String,StringBuilder,StringBuffer三者的区别

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。 首先说运行速度,或者说是, 1.执行速度 在这方面运行速度快慢为:StringBuilder(线程不安全,可变) > StringBuffer...

时刻在奔跑 ⋅ 今天 ⋅ 0

java以太坊开发 - web3j使用钱包进行转账

首先载入钱包,然后利用账户凭证操作受控交易Transfer进行转账: Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/Credentials credentials = Wallet......

以太坊教程 ⋅ 今天 ⋅ 0

Oracle全文检索配置与实践

Oracle全文检索配置与实践

微小宝 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部