Noblesse Oblige

App/iOS/Android/Unity/cocos2d/VR/GameJam/Hackathon/肉 ブログの記事は勉強会の書きなぐりメモが多め

【DroidKaigi 2017】少し幸せになる技術

セッション情報

speakerdeck.com

発表者

  • kamedon
  • Classmethod

この発表で幸せになりそうな人

  • 初心者から中級者にステップアップしようとしている方
    • Android開発をもっと楽にする
    • つまづきにくくする
    • アカウント停止されないようにする

アジェンダ

Android Studio

  • Jetbrains製IDE

他のIDEとショートカットが違うので、イライラしてきた

  • Find Action
  • コマンドを検索でき、ショートカットまでわかる
    •  keymapを変更すると好みに設定できる

特定ファイルにもっと簡単に飛びたい

  • Serch Everywhere
    • Shift Shift
  • ファイル名を簡単に検索できる

フォーマットを揃える

  • Save Actionsで保存で自動でフォーマットを揃える
  • Plugin

アンインストールインストールがめんどくさい

  • Plugin : ADB IDEA
  • ショートカットでadb操作できる

テストで通ってないところを知りたい

  • Run test with coverageを実行

Build.gradle編

  • アプリの基本情報を設定

開発版とリリース版て共存できる?

  • ビルドバリアントとプロダクトフレーバーを使うとできる
  • Suffixをつけてあげることで、共存できる

開発と製品版で定数を分けたい

  • ビルドバリアントとプロダクトフレーバーでできる
    • buildType
    • productFravars

開発版とリリース版どっちなのかわかりやすくしたい

-ビルドバリアントとプロダクトフレーバーで分ける - 優先順位は上から順番 - src/demoDebug/ (ビルドバリアント フレーバー) - src/debug/ (ビルドバリアント) - src/demo/ (フレーバー) - src/main/ (メイン) - 例えばこれを使って本番とアプリ名を変えたり、アイコンを変えればわかりやすくなる

ビルドバリアントとプロダクトフレーバーの使い分けがわからない

  • ビルドバリアント:環境の設定
    • 本番サーバーと開発サーバーのアドレス
    • 本番用署名、開発用署名
  • プロダクトフレーバー:アプリの振る舞い
    • デバッグモードの切り替え
    • 無料版課金版の切り替え

バージョンコードとバージョン名管理がめんどくさい

  • 開発者は、VersionNameをあげたい
  • GooglePlayは、VersionNameが上がっていれば良い
  • 解決方法
    • versionからersionCodeを作ってしまう

署名の管理どうしたら良いの?

  • 署名をbuild.gradleにベタがき
    • Private Repositoryなどなら有効
    • CIからも扱いやすい
  • ファイルに書き出す
    • gitで虫設定し、鍵は別管理
    • keystore.properties

デバッグ

製品ばんのときはログを出したくない

  • JakeWharton/timberを使う
    • Debugだけログを出すことが簡単
    • ログで何を出すか帰るのも簡単

通信部分のデバッグがしづらい

メモリリークデバッグがしんどい

  • square/leakcanaryを使うと簡単
    • Applicationに書くだけでリーク時に通知をしてくれる

LogのせいでUnit Testでエラーが出る

  • ログだけなら、ClassLoaderの仕組みを使ってLogをモックする
  • app/src/test/java/android/util/Log.javaにモックを書く

Proguard

  • セキュリティ的に最低限リリース時に必ず設定する
    • アプリサイズの削減
    • 気休め難読化

65メソッドしかできないの?

  • 64kメソッドhビルドができない
    • Proguardをかけることでメソッド数の削減
    • それでもダメな場合はMultidexを用いる

Proguardをかけるとエラーになる 変な汗が出てきた

  • ProGuardがしてることを理解する
    • 未使用のメソッド削除
    • クラスメイ、メソッドをa,bなどのリネーム
  • リフレクションを使用しているところでなんたら

リリースの時だけProGuardをかけるとドキドキする

  • 開発中にもProguardをかけると安心
    • ビルドが遅くなるのが欠点
    • リネームはしないほうがいい

クラッシュレポートが難読化されていて見辛い

  • 難読化時に生成されるmapping.txtをGoogle Play Consoleにアップロードしよう

OS, 端末編

  • 機種依存、バージョン依存、パーミッション、タスクキラーなどで再現しづらいことがなんたら

機種依存が激しすぎ

  • 頑張る
    • 検証センターなどを利用する
  • SupportLibraryがある機能を使う

ランタイムパーミッションの対応

GooglePlayConsole編

Androidは審査がないからやりたい放題なんでしょ?

  • 最近は厳しくなってきた
    • 必ずデベロッパーポリシーを確認
    • 個人情報や機密情報
    • 収益化と広告

いつ公開されるのか知りたい

  • 公開ボタンを押して実際に反映されるのは2、三時間ご
  • 運が悪いと12時間後
  • 通知の設定を入れるかGoogle Play Consoleアプリを入れよう

とはいえ早くならないの?

  • 経験則だけど、α版などを公開してからリリーすると早くなる気がする

まとめ

  • AndroidStudio素敵
  • デバッグツールも豊富になってきた
  • ProGuardかけると安心
  • 機種依存は頑張る