平台与技术-Android专场(下):共享Android应用开发经验

发表于2015-10-29
评论0 1.3k浏览

【CSDN现场报道】10月14日-16日,“ 2015移动开发者大会· 中国”(Mobile Developer Conference China 2015,简称MDCC 2015)在北京新云南皇冠假日酒店隆重举行。本次大会由全球最大中文IT社区CSDN和中国最具关注度的全方位创业平台创新工场联合主办,以“万物互联,移动为先”为主题,邀请国内外业界领袖与技术专家公论移动开发的热点,在实践中剖析技术方案与趋势。

10月15日下午,平台与技术-Android专场继续进行,腾讯Android工程师胡凯,个推高级技术总监董霖,快的打车移动端架构师吴更新(Trinea),android-gems.com作者、前阿里巴巴工程师廖祜秋和Marvell高级研发经理陈家林五位一线专家,分别针对Android应用开发工作中五个方面的重要议题——内存优化、远程问题诊断和监测、图片缓存源码解析、React Native for Android以及应用安全保障等分享了各自的经验 

腾讯Android工程师胡凯:Android内存优化的5R法则(PPT下载地址

胡凯首先介绍Android内存管理中的内存回收、内存泄露、内存分析等基础知识,其目标是更多的内存空间,和尽量减少GC行为。胡凯认为,可以通过5R法则来实现这两点。


腾讯Android工程师 胡凯

  1. Reduce:差异化处理缓存容量、图片资源(针对不同dpi切图不同的图,尤其是引导页);资源按需加载;减小bitmap对象的内存占用,这一点很重要,手段包括inSampleSize和decode format。
  2. Reuse:所有的Reuse背后的精髓都是pool模型的使用,选用一些比较经典的算法;Bitmap对象的复用,这与前文是不同层级的,具体是inBitmap(但不好的地方是增加GC操作),创建inBitmap对象池,让不同场景下复用;注意在ListView/GirdView中ConvertView的复用;避免频繁创建和回收对象,否则可能引发不断的GC行为。
  3. Recycle:注意Activity泄露,包括内部类、容器对象泄露,Static和Singleton;需要谨慎选择合适的Context;注意有生命周期对象的泄露,注意大胖子(Bitmap和WebView)的及时回收;onTrimMemory()与onLowMemory()的回调。
  4. Refactor:使用优化过后的数据结构,如针对HashMap的处理,其次建议使用static,反对使用枚举;减少内存的碎片化,可以先给大的对象申请,再把一些连续的对象放在一起申请;优化布局,减少内存消耗,比如一些不必要的背景。
  5. Revalue:谨慎使用LargeHeap,LargeHeap虽然可以申请更多内存空间,但也意味着GC的时间变长,效率变低,同时还面临系统判定为占内存应用的弊端;谨慎使用多进程,除非Main Process;谨慎使用第三方libraries。
个推高级技术总监董霖:Android远程问题诊断和监测(PPT下载地址

董霖首先谈到在LBS场测过程中,要认识到远程日志调试的重要性并思考如何解决这个问题。一个合格的应用程序发版需要经历Demo内测、FA场测和灰度升级,最后才能在市场上架。在此过程中Trac或者Jira问题不断出现,紧接着董霖谈到需要此时手机的两点刚需:一是开Log,看Log;二是看屏幕,截屏。除此以外,也需要通过手机看“关于”信息,或者执行一些Shell命令。现有的日志管理工具如Logstash和Graylog2,虽然综合评估Graylog比较专业,但这些都是针对服务端日志管理,没有支持移动平台的工具。此外仅能够进行Crash分析是远不够的,同时也需要解决非Crash的程序逻辑问题。董霖解释到解决方法仅需简单的4步:确定设备、打开日志、上传日志、分析日志。接下来他主要讲解了Logful架构,其中架构中自行开发的部分是LogfulSDK、LogfulWeb、LogfulAPI。使用此架构可以对日志进行广泛埋点。


个推高级技术总监 董霖

他详解了Demo案例,首先初始化、查看日志记录,例如调查日志模板;在Logfulweb平台上利用Dashboard、管理工具等工具,根据关键字搜索或者type搜索日志,进行日志文件分析。他采用了漏洞分析分方式,得到传统的统计SDK,无法精确到任务级别进行汇总统计,需要借助详细日志分析。LogfulSDK架构分为三层,底层是Logservice,中层是Logcontroller,上层是LogAPI。在日志级别以及资源评估方面均有自己的创新点,并且Logful架构具有很高的并行可扩展性。他总结到该架构的特色功能:截图支持、日志预录、别名支持、日志模板、数据监控以及核心功能:Android/iOS支持、日志加密存储和上传、日志检索、实时日志开关、灰度日志开关、Wifi下上传。最后董霖谈到将在11月中旬对Logful架构进行开源。

快的打车移动端架构师吴更新(Trinea):Android开源项目源码解析之图片缓存对比(PPT下载地址

吴更新首先介绍选择开源项目的三大优势,可以实现开速开发,站在巨人的肩膀上,和借助社区的智慧,以及选择开源项目时需要考虑的因素,包括:1.Star、PR、Issues、维护;2.文档;3.原理;4.业务场景。

 图片缓存目前的主要开源项目包括Imageloader,Picasso、Glide和Fresco,其中Fresco还是0.7版本。他分享了前面三个比较成熟的库的流程、设计和特性对比,涵盖 RequestManage、Engine、  GetDatainterface、Displayer、Decode、Encode、Processor等重要概念。


快的打车移动端架构师 吴更新(Trinea)

他介绍,这些项目的共同优点是:使用简单;可配置都高、自适应程度高;多级缓存;支持多种数据源。单独来说,Imageloader的优点是:支持下载进度显示;可以在View滚动中暂停图片加载;默认实现多种内存缓存算法;支持本地缓存文件名规则定义。Picasso的优点是:自带统计监控功能,有利于节省流量;支持优先级处理;支持延迟到图片尺寸计算完成加载,即加载完成之后再显示;支持飞行模式、并发线程数根据网络类型而变;“无”本地缓存。Glide的优点包括:除了图片缓存,还支持媒体缓存;支持优先级处理;与ActiveFragment生命周期一致,支持trimMemory;支持okhttp和Volley,但与Picasso不一样的是,有自己的本地缓存;内存友好。

总体来说,功能上,Glide最为出色。但代码理解上,Picasso更胜一筹,代码量比较少,设计清晰,而Glide代码量很大,概念众多。对于正常使用,他建议,优先用Picasso,因为Picasso源码解决会比较快,Glide会更加耗费精力。

android-gems.com作者、前阿里巴巴工程师廖祜秋:React Native for Android(PPT下载地址

廖祜秋首先谈到了JavaScript,其中有:JSC(JavaScriptCore)、NPM(Node Package Management)、Module、JSX Synax。 然后谈到了React Native开发过程时--从H5/JS封装到Reactbride,再到React Native。快速启动时,非常简单,仅需一句操作命令就可。在服务器调制(Debug Server)时,APP和Server相互调度资源。


android-gems.com作者、前阿里巴巴工程师廖祜秋

谈到两个平台运行Demo时,iOS首先是在Xcode中打开工程,然后再运行。Android运行方式:一是模拟器;二要求5.0以上版本以及adb反向接口;三是配置调试服务器。数据包分发方面,iOS相比Android更为简单。

 为什么我们需要React Native?他从以下几点进行了解释:具有Native的外观和感觉、可接受的性能、代码的复用性很强、能够进行快速的开发和部署。他解释到React?Native的核心包括:ReactBridge、JavaScriptModule、NativeModule、Native UI Components。你可以利用其设置全局变量,传递参数。谈到代码复用时,这里具有很多优势:一是UI复用;二是模块复用。对于热部署:目前的Apphub,能快速更新本地应用程序,但目前仅支持iOS系统。

 在性能方面,首先是性能来源问题:发展模式(dev=true)、慢导航转换、ListView的初始化太慢或者对较大的列表很难访问。使用React Native而非基于WebView工具的有令人信服的点:一是实现60 FPS;二是使得你的应用程序更加像React。

在谈到React Native为什么目前不能成为主流问题时,他解释道:一是跨平台测试问题;二是iOS和Andriod代码库融合问题。最后他希望到一个工程师应该全能,不局限某种语言,并且应具有创造力且能够认真努力工作。

Marvell高级研发经理陈家林:Android应用安全检测(PPT下载地址

 陈家林的分享包括三点:安卓应用典型问题分析,第二如何分类安卓应用安全,第三如何找到应用安全测试工具。首先他列举并分析了几个应用典型问题。


Marvell高级研发经理 陈家林

  1. Activity暴露——某知名互联网手机隐藏工厂测试工具FactoryTest.apk中的Activity暴露,可被任意应用发起Intent调用,且有自动模式。Activity是组件的边界,被暴露风险巨大;
  2. Backup/Restore(备份恢复)——某视频客户端免登陆的做法是服务器会下发一个securityKey,在用户登出之前,客户端一直利用这个securityKey来跟服务器通信。但是这个securityKey是直接明文存放在数据库中,利用Backup/Restore就能在另外一台root手机中窃取这个securityKey,伪造客户端通信;
  3. 某应用云服务存在中间人攻击——某云服务使用HTTPS通信,但是如果手机被安装上恶意证书(例如,利用“证书相关权限绕过”漏洞),并通过恶意代理,HTTPS的数据包还是可以被窃取和篡改的。解决方案是对敏感数据任需要加密,同时对证书进行验证;
  4. 基于剪贴板的攻击——很多ROM厂商都提供的验证码短信的提取定制,支持一键复制功能,但是即使没有监听短信接收广播的恶意应用也可以通过监听剪贴板获得验证码;
  5. 微信抢红包神器——其原理就是利用Android提供的AccessibilityService,拥有辅助功能的App都可以监控任何应用的view,并且可以触发一些输入事件。更夸张的是微信支付密码沦陷同样利用AccessibilityService,监控button的click,拿到对应的text,密码轻松到手。解决方案是让敏View中Accessibility失效:setImportantForAccessibility(), not important;setAccessibilityDelegate(),空实现delegate类。
陈家林认为,安全的关键是定义边界,他将Android应用安全分为本地接口安全、本地存储安全、传输安全、服务器安全和其他安全等5个大类,29个测试点。

 

最后他分享了如何找到应用安全测试工具这个问题的见解,具体方法是寻找测试工具、建立测试集合、量化测试工具,并分享了三个工具的玩家:阿里聚安全、腾讯金刚、360捉虫助手。利用开源来丰富这个集合,AuditDroid通过提供测试用例代码来协助开发者理解安卓移动应用安全问题。这里有29个测试点,80个测试用例。用现有的测试工具对这29个测试点的覆盖率、检出率、误报率进行测试并得出了结论。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引