読者です 読者をやめる 読者になる 読者になる

炊きたてのご飯が食べたい

定時に帰れるっていいね。自宅勤務できるっていいね。子どもと炊きたてのご飯が食べられる。アクトインディでは積極的にエンジニアを募集中です。

メソッド数調査、エミュレーターのファイルダウンロードなどを楽にする Android プロジェクト用のシェルスクリプト


アクトインディ Advent Calendar 2016 13日目の記事になります。子どもとおでかけ情報アプリ「いこーよ」は、マップ上で簡単におでかけ先を探せる検索アプリです。記事を見てくれたパパさん、ママさん、ぜひ一度使ってみてください^^

iko-yo.net

今回の記事は Android プロジェクト用に利用しているシェルスクリプトについて書きたいと思います。一つ一つは簡単なコマンドですが、頻繁に利用しないとすぐコマンド忘れてしまうので、覚えなくても良いコマンドはシェルスクリプトに書くようにしています。

現在のメソッド数を確認する

ライブラリを導入する際は、導入前、導入後でメソッド数を計測し、導入すべきか検討するようにしているので、開発初期は結構使います。./gradlew clean assembleDebug はいらないかもしれません。

dex.sh

./gradlew clean assembleDebug
~/tools/dex-method-counts/dex-method-counts app/build/outputs/apk/app-debug.apk
  • dex-method-counts をインストールする場所は任意です
  • プロジェクト直下に dex.sh を置いていることを想定した path です

実行結果

Read in 49829 method IDs.
<root>: 49829
    <default>: 1
    a: 22
    android: 14348
        accounts: 3

    ...

Overall method count: 49829

dex-method-counts の導入方法

github に公開されているソースを適当なディレクトリにダウンロードするだけです

今回の例では ~/tools にインストールすることにします

cd ~/tools
git clone https://github.com/mihaip/dex-method-counts.git

Realm ファイルを adb でダウンロードする

Realm に格納されているデータを見たい時に便利です。RealmBrowser を入れている場合は、実行後に open default.realm で RealmBrowser を開くことができます。

fetch_realm.sh

adb kill-server
adb root
adb pull /data/data/com.example.sample/files/default.realm

実行結果

シェルを実行すると以下のファイルがダウンロードされます。

  • default.realm
  • default.realm.lock
  • default.realm.management/

keyhash の取得

Firebase や Line SDK を導入する際に必要になるのですが、利用するシーンが少なく、すぐ忘れてしまうので。Debugビルド用です。

key-hash.sh

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v -storepass android

実行結果

別名: androiddebugkey
作成日: 2017/01/01
エントリ・タイプ: PrivateKeyEntry
証明書チェーンの長さ: 1
証明書[1]:
所有者: C=US, O=Android, CN=Android Debug
発行者: C=US, O=Android, CN=Android Debug
シリアル番号: 1
有効期間の開始日: Mon Sep 30 10:00:00 JST 2017終了日: Wed Sep 23 10:00:00 JST 2100
証明書のフィンガプリント:
   MD5:  ************
   SHA1: ************
   SHA256: ************
   署名アルゴリズム名: ******
   バージョン: 1

Git のブランチ整理

プルリクエストが master にマージされた後などに良く実行しています。master ブランチを最新にして、既に master ブランチにマージされたローカルの作業ブランチを削除してくれます。

pull_and_fetch.sh

git checkout master && git pull origin master && git fetch -p origin && git branch --merged | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d %

その他

プロジェクトの git の管理対象にならないように .git/info/exclude に以下のように設定して git 管理対象外になるようにして利用しています。

pull_and_fetch.sh
fetch_realm.sh
default.realm
default.realm.lock
default.realm.management/
dex.sh
key-hash.sh