四时宝库

程序员的知识宝库

关于阿里巴巴android开发手册中的强制条约

? 【强制】必须遵守,违反本约定或将会引起严重的后果;

- [ ] 1.【强制】Activity 间的数据通信,对于数据量比较大的,避免使用 Intent + Parcelable 的方式,可以考虑 EventBus 等替代方案,以免造成 TransactionTooLargeException。

- [ ] 2.【强制】Activity 间通过隐式 Intent 的跳转,在发出 Intent 之前必须通过 resolveActivity 检查,避免找不到合适的调用组件,造成 ActivityNotFoundException 的异常。

- [ ] 3.避免在 Service#onStartCommand()/onBind()方法中执行耗时操作,如果确 实有需求,应改用 IntentService 或采用其他异步机制完成。

- [ ] 4.【强制】避免在 BroadcastReceiver#onReceive()中执行耗时操作,如果有耗时工作, 应该创建 IntentService 完成,而不应该在 BroadcastReceiver 内创建子线程去做。

- [ ] 5.【强制】避免使用隐式 Intent 广播敏感信息,信息可能被其他注册了对应 BroadcastReceiver 的 App 接收。

- [ ] 6.【强制】不要在 Android 的 Application 对象中缓存数据。基础组件之间的数据共享

请使用 Intent 等机制,也可使用 SharedPreferences 等数据持久化机制。

- [ ] 7.【强制】使用 Adapter 的时候,如果你使用了 ViewHolder 做缓存,在 getView()的 方法中无论这项 convertView 的每个子控件是否需要设置属性(比如某个 TextView 设置的文本可能为 null,某个按钮的背景色为透明,某控件的颜色为透明等),都需 要为其显式设置属性(Textview 的文本为空也需要设置 setText(""),背景透明也需要 设置),否则在滑动的过程中,因为 adapter item 复用的原因,会出现内容的显示错 乱。

- [ ] 8.【强制】Activity 或者 Fragment 中动态注册 BroadCastReceiver 时,registerReceiver() 和 unregisterReceiver()要成对出现。

- [ ] 9.【强制】布局中不得不使用 ViewGroup 多重嵌套时,不要使用 LinearLayout 嵌套,

改用 RelativeLayout,可以有效降低嵌套数。

- [ ] 10.【强制】禁止在非 ui 线程进行 view 相关操作。

- [ ] 11.【强制】禁止在设计布局时多次设置子 view 和父 view 中为同样的背景造成页面过 度绘制,推荐将不需要显示的布局进行及时隐藏。

- [ ] 12.【强制】不能使用 ScrollView 包裹 ListView/GridView/ExpandableListVIew;因为这 样会把 ListView 的所有 Item 都加载到内存中,要消耗巨大的内存和 cpu 去绘制图 面。

- [ ] 13.【强制】不要通过 Intent 在 Android 基础组件之间传递大数据(binder transaction

缓存为 1MB),可能导致 OOM。

- [ ] 14.【强制】在 Application 的业务初始化代码加入进程判断,确保只在自己需要的进程

初始化。特别是后台进程减少不必要的业务初始化。

- [ ] 15.【强制】新建线程时,必须通过线程池提供(AsyncTask 或者 ThreadPoolExecutor 或者其他形式自定义的线程池),不允许在应用中自行显式创建线程。

- [ ] 16.【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方 式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。

- [ ] 17.【强制】子线程中不能更新界面,更新界面必须在主线程中进行,网络操作不能在 主线程中调用。

- [ ] 18.【强制】不要在非 UI 线程中初始化 ViewStub,否则会返回 null。

- [ ] 19.【强制】任何时候不要硬编码文件路径,请使用 Android 文件系统 API 访问。

- [ ] 20.【强制】当使用外部存储时,必须检查外部存储的可用性。

- [ ] 21.【强制】应用间共享文件时,不要通过放宽文件系统权限的方式去实现,而应使用 FileProvider。

- [ ] 22.【强制】数据库 Cursor 必须确保使用完后关闭,以免内存泄漏。

- [ ] 23.【强制】多线程操作写入数据库时,需要使用事务,以免出现同步问题。

- [ ] 24.【强制】执行 SQL 语句时,应使用 SQLiteDatabase#insert()、update()、delete(), 不要使用 SQLiteDatabase#execSQL(),以免 SQL 注入风险。

- [ ] 25.【强制】如果 ContentProvider 管理的数据存储在 SQL 数据库中,应该避免将不受 信任的外部数据直接拼接在原始 SQL 语句中,可使用一个用于将 ? 作为可替换参 数的选择子句以及一个单独的选择参数数组,会避免 SQL 注入。

- [ ] 26.【强制】加载大图片或者一次性加载多张图片,应该在异步线程中进行。图片的加

载,涉及到 IO 操作,以及 CPU 密集操作,很可能引起卡顿。

- [ ] 27.【强制】在 ListView,ViewPager,RecyclerView,GirdView 等组件中使用图片时, 应做好图片的缓存,避免始终持有图片导致内存泄露,也避免重复创建图片,引起 性 能 问 题 。 建 议 使 用 Fresco ( https://github.com/facebook/fresco )、 Glide (https://github.com/bumptech/glide)等图片库。

- [ ] 28.【强制】png 图片使用 tinypng 或者类似工具压缩处理,减少包体积。

- [ ] 29.【强制】使用完毕的图片,应该及时回收,释放宝贵的内存。

- [ ] 30.【强制】在 Activity.onPause()或 Activity.onStop()回调中,关闭当前 activity 正在执 行的的动画。

- [ ] 31.【强制】使用 PendingIntent 时,禁止使用空 intent,同时禁止使用隐式 Intent

- [ ] 32.【强制】禁止使用常量初始化矢量参数构建 IvParameterSpec,建议 IV 通过随机方 式产生。

- [ ] 33.【强制】将 android:allowbackup 属性设置为 false,防止 adb backup 导出数据。

- [ ] 34.【强制】在实现的 HostnameVerifier 子类中,需要使用 verify 函数效验服务器主机 名的合法性,否则会导致恶意程序利用中间人攻击绕过主机名效验。

- [ ] 35.【强制】利用 X509TrustManager 子类中的 checkServerTrusted 函数效验服务器端 证书的合法性。

- [ ] 36.【强制】META-INF 目录中不能包含如.apk,.odex,.so 等敏感文件,该文件夹没有经 过签名,容易被恶意替换。

- [ ] 37.【强制】Receiver/Provider 不能在毫无权限控制的情况下,将 android:export 设置 为 true。

- [ ] 38.【强制】阻止 webview 通过 file:schema 方式访问本地敏感数据。

- [ ] 39.【强制】不要广播敏感信息,只能在本应用使用 LocalBroadcast,避免被别的应用

收到,或者 setPackage 做限制。

- [ ] 40.【强制】不要把敏感信息打印到 log 中。

- [ ] 41.【强制】对于内部使用的组件,显示设置组件的"android:exported"属性为 false。

- [ ] 42.【强制】应用发布前确保 android:debuggable 属性设置为 false。

- [ ] 43.【强制】使用 Intent Scheme URL 需要做过滤。

- [ ] 44.【强制】密钥加密存储或者经过变形处理后用于加解密运算,切勿硬编码到代码中。

- [ ] 45.【强制】将所需要动态加载的文件放置在 apk 内部,或应用私有目录中,如果应用 必须要把所加载的文件放置在可被其他应用读写的目录中(比如 sdcard),建议对不 可信的加载源进行完整性校验和白名单处理,以保证不被恶意代码注入。

- [ ] 46.【强制】除非 min API level >=17,请注意 addJavascriptInterface 的使用。

- [ ] 47.【强制】使用 Android 的 AES/DES/DESede 加密算法时,不要使用默认的加密模式 ECB,应显示指定使用 CBC 或 CFB 加密模式。

- [ ] 48.【强制】不要使用 loopback 来通信敏感信息。

- [ ] 49..强制】AndroidAPP在HTTPS通信中,验证策略需要改成严格模式。说明:Android APP 在 HTTPS 通信中,使用 ALLOW_ALL_HOSTNAME_VERIFIER,表示允许和 所有的 HOST 建立 SSL 通信,这会存在中间人攻击的风险,最终导致敏感信息可能 会被劫持,以及其他形式的攻击。

- [ ] 50.【强制】开放的 activity/service/receiver 等需要对传入的 intent 做合法性校验。

- [ ] 51.【强制】不要通过 Msg 传递大的对象,会导致内存问题。

- [ ] 52.【强制】不能使用 System.out.println 打印 log。

- [ ] 53.【强制】Log 的 tag 不能是" "。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接