写点什么

Android Development 最佳实践

用户头像
teoking
关注
发布于: 2020 年 07 月 31 日
Android Development最佳实践

原文:Android Development | Best Practices



仅仅写代码是不够的,要高效地写代码。

下面是作者总结的Android开发最佳实践。

Tips and not Tricks

1) Choose your App Architecture wisely based on your need, not just what the trend is.

MVC, MVP, MVVM, MVI, Clean Architecture,选择适合自己项目的模式。没有坏模式,只有用错处。

适用于iOS开发。



2) Consider using SVGs or WebPs for your image drawables

使用SVG或WebP来解决图片尺寸变化时的失真问题。

适用于iOS开发。



3) Choose your layout wisely and separate out the reusable XML and add it using <include> tag.

剥离可复用的xml,再使用include复用

iOS开发中也类似。不过不清楚用story board时如何复用。



4) Learn how to use Build types, Product Flavors and Build Variants and make most out of it for faster and easier development.

一个app做久了,很自然的衍生出多包需求。用好Build Type、Product Flavors和Build Variants就可以实现这类需求:一条代码分支可以出多个包。

当然这里会有一些技术性要求:越底层的模块越要保持边界清晰。当一个被多个module依赖的底层module启用了flavor,那么这些module都需要添加对应的flavor。尽量保持模块功能设计合理,不要出现这种情况。



5) Learn & Use Android Debug Bridge (ADB) to debug your application.

ADB命令很强大,不在shell中使用它的话,就很难体会到这种强大。



6) Configure your gradle.properties to increase your build speed.

配置编译参数加速编译。



7) Keep a check on structural problems in your App code through Lint.

./gradlew link

被多数app开发者忽视!



8) Log everything in DEBUG mode only.

一种方案是使用Timber日志库或者自己实现Log框架,只在DEBUG模式下输出log。

另外一种方案是使用混淆脚本过滤掉Log代码。



个人比较建议方案一。因为开发人员清楚知道“输出了什么,做什么用”,才能避免过时、冗余、无意义的日志。尤其在复杂项目中,这一点尤为重要。但对于单个app项目,重要性就弱一些。



9) Never add whole third party library if it’s possible for you to extract specific methods or small no. of classes for your functionality.

如果仅适用一个三方库的部分功能,试着将这些部分代码加入到项目中,这可以避免将整个项目引入进来。



10) Detect and Fix memory leaks in Android App time to time

“A small leak will sink a great ship.” — Benjamin Franklin

适用一些工具(如Leak canary)来监测内存泄露。



Leak canary的大致原理:

在Activity的&onDestroy方法中,手动调用 GC,然后利用ReferenceQueue+WeakReference,来判断是否有释放不掉的引用,然后结合dump memory的hpof文件, 用对应的parser分析出泄漏地方



11) Handle Configuration changes for your App.

处理配置变化(如横竖屏切换、语言切换等)是比较麻烦的,很容易导致bug。但如何app有横竖屏场景,还是需要认真处理此类问题。



12) Perform validations in screens like input form on Client end only.

客户端将用户输入校验结果展现在屏幕上。(这是个用户体验tip)



13) Don’t create references to activities that will prevent them from being garbage collected when they are done.

不要胡乱引用activity。这会导致GC问题。常见的做法是,onStop时去掉不用的引用。



14) Use App Chooser for your implicit intents and always handle NoActivityFound Exception.

打开对外的intent时,要进行NoActivityFoundException检查。



15) Put all your sensitive information in gradle.properties and never push it to your version control system.

将敏感信息放在本地的gradle.properties,并且不要push到代码仓库中去。(然鹅很多公司的签名密钥人人可见)



16) Implement SSL certificate pinning to prevent Man-in-the-middle Attack (MITM)

SSL Pinning技术可以避免中间人攻击。

实际中,经常会需要抓包,这时可以结合上面的build variants技术,仅允许debug版本抓包。



17) Use SafetyNet Attestation API to help determine whether your servers are interacting with your genuine app running on a genuine Android device.

使用SafeNet Attenstation API来校验所运行的设备环境。



18) Use EncryptedSharedPreferences instead of SharedPreferences for storing sensitive information like your auth tokens etc.

咦,这个还没有用过。mmkv貌似不能做这个事情。



19) Use the Android Keystore system to store and retrieve sensitive information from your storage like databases etc.

这一条依然是安全,保证本地数据库安全。



20) Call Google Play services methods to ensure that your app is running on a device that has the latest updates to protect against known vulnerabilities found in the default security provider.

依然是安全相关。通过GP接口检查设备是否更新到了最新的安全补丁。



21) Implement reCAPTCHA to ensure your app is not automated i.e handled by a robot.

通过验证码机制避免app被自动化操作,比如外挂。



22) Write Unit tests for your feature.

写单元测试。不过很多国内的项目团队不重视这个,宁可996解决重复的问题,也不远写单元测试来保证基本质量。



23) Make security decisions on the server-side whenever possible.

安全问题,尽可能地从server端来考虑。



24) Learn how to use Proguard to the maximum for code Obfuscation and Optimization.

混淆和优化。



25) Use Network security configuration to improve your app’s network security.

网络安全配置。Android 10强制要求该配置。



用户头像

teoking

关注

Monkey plays software. 2018.11.28 加入

程序员。目前主要从事Android和iOS开发。

评论

发布
暂无评论
Android Development最佳实践