Edited at

DroidKaigi2016メモ:Android Lintで正しさを学ぼう

More than 1 year has passed since last update.


  • DroidKaigiのメモ書きを随時アップロードしていきます

  • スライドは上がり次第こちらに貼ります

スライド上がっていたので公式の内容は以下をご参照ください。

http://www.slideshare.net/Nkzn/androidlint-droidkaigi?ref=http://unsolublesugar.com/20160218/134940/


発表者


  • @Nkzn

  • Yukiya Nakagawa

  • 農業生産者向けサービス「アグリノート」


対象者


  • Androidプログラミングのベストプラクティスが分からない

  • 品質を保証する


Android List?


  • 構文解析ツール

  • Google公式

  • 222個のルール


    • Category, Severity(危険度), Priority



  • Googleによるアンチパターン集


初学者がやりがちなミス


  • LinearLayoutに並べたビューが表示されないのはなぜ?(orientation)


    • 慣れたらやらなくなるミス

    • horizontalの場合も明示的にちゃんと書こう



  • SharedPreferenceが保存されない


    • commit()をちゃんと書こう.

    • commit()で書いたけどなぜか黄色くなる...?

    • commit()の返り値を保存していないことでWarningが起こってる

    • apply()を使う



  • Toastがでない


    • show()を呼んでないだけ



  • なんかこのボタン押しづらい


    • ButtonOrder

    • キャンセルのようなものは左、本来やりたくなかた操作を続ける「OK」のようなものは右に置く

    • おまけ:API Level13まではOKが左で正しかった



  • このアプリ英語化して問題


    • 日本語直書きNG

    • レイアウトXML

    • AndroidManifest.xml

    • メニューXML

    • Javaに日本語をベタ書きしても検出されない

    • 文字列リソースに抜き出すメリット

    • 多言語化するときにリソースを変更するだけで置き換えられる

    • プロトタイピングでベタ書きしたものを、後からAndroid Studioのクイックフィックスを使って文字列リソース化

    • レイアウトファイルのソートってどうしてますか?

    • 場合によってソートすべし、必須だとは思わない




アプリが管理していた個人情報が別のアプリから見えていた!


  • AndroidManifext.xml

  • ExportedContentProvider

  • Dropboxの2011年の話がよくネタになっている

  • providerタグには必ずandroid:exported="false"を付けましょう!


初学者がやりがちなミス part.2


  • EditテキストでなんかめっちゃWarning出てるんだけど!


    • TextFields



  • アイコンで怒られる?


    • この辺から静的解析の領域を抜けてくる...

    • ステータスバーやActionBarの色をマテリアルデザイン



  • 3点リーダをピリオド3つで書くとwarning


    • Typograpy

    • フォントによってはピリオドを都合よく...と見えてくれるかどうか分からない

    • 3点リーダ文字として書く、ISOの文字番号を使う




エンジニアの言い分


  • Googleが良くないこととして回避しているので、相対的にアプリの品質は上がる


品質指標に使う場合


  • 優先度が低いルールは事前に設定でignoreしておく

  • プロジェクトごとに大切にするルールを切り分ける


エンジニアの方へ


  • abortOnError, checkReleaseBuildsはfalseにしないで!

  • Android Studioがソースコードに黄色いのとか赤いのとか付いてたら、マウスオーバーして何が起きてるかみよう!

  • 直し方を聞こう、知ろう

  • 200個のルールをマスターしよう