Android アプリや Android デバイスの開発に役立つかもしれないノートです。
Tools
- protection レベルが dangerous なパーミッションの一覧を表示する (
pm list permissions
) - パーミッショングループの一覧を表示する (
pm list permission-groups
) - ダウンロード可能な Android SDK コンポーネントの一覧を取得する (
android list sdk
) - ADB から Backup Manager を走らせる (
bmgr backup
,bmgr restore
) - Activity の情報を表示する (
dumpsys activity
) - メモリの使用状況を確認する (
dumpsys meminfo
) - APK のパッケージ名から APK ファイルのパスを調べる (
pm path
,pm list packages
) - APK ファイルに署名する (
keytool
,jarsigner
) - APK ファイルの署名を確認する (
jarsigner
,openssl
) - Dex 形式の Shared library (JAR) を作成する (
dx
)
パフォーマンス
- Android アプリのパフォーマンス改善のためのチェックリスト
- dumpsys gfxinfo でジャンクフレームの発生率を調べる(60FPSの確認)
- Choreographer で FPS を計測する(Fps クラスの実装)
- Android アプリのパフォーマンス改善に使用できるツール
- ADB で描画パフォーマンス計測のデバッグ機能を有効にする
- Perfetto でシステム全体のパフォーマンスを計測する
- Traceview でプロファイル情報を表示する
- 旧)Systrace をコマンド化して簡単に実行できるようにする (systrace.cmd)
- 旧)Systrace の画面が真っ白になるときの対応方法
エミュレーター
外部ツールとの連携
解析/デバッグ/ADB コマンド
- APK のパッケージ依存関係やクラス依存関係を調べる (
jdeps
,dex2jar
) - APK ファイルを逆コンパイルする (apktool)
- APK ファイルの情報を表示する (aapt)
- ADB で Activity や Service を起動するインテントを投げる (am start/start-service/broadcast)
- ADB で指定したアプリを強制終了する (am force-stop)
- ADB で特定のブロードキャストインテントをレシーブするアプリを列挙する (dumpsys activity broadcasts)
- ADB でディレクトリ内のファイルをすべて取得する (adb pull)
- ADB でスリープ状態に入る/スリープから抜ける
- ADB で WakeLock を強制的に外す
- ADB からキー入力やテキスト入力を行う (
input text
,input keyevent
) - ADB で Android 端末のバージョンや API レベルを調べる (getprop)
- ADB で Android 端末にインストールされているパッケージの一覧を取得する (pm list packages)
- TCP/IP で adb 接続する
- Android Studio で静的解析プラグインを使用する
- ANR の原因を突き止める
- ADB 経由でスクリーンキャプチャを取得する
- StrictMode を有効にして望ましくない実装を検出する
- StrictMode の違反メッセージを Toast で表示する (StrictModeToaster)
- 旧)各種デバイスの ADB 接続
Logcat
ビルド関連
Gradle
- Android アプリ用の Gradle スクリプトの基本
- リソース名に正しくプレフィックスが付いているか確認する
- Android Studio を使っているときの Gradle 関連ファイル
- BuildConfig クラスでアプリの動作を切り替える
- サブモジュールで使用する SDK バージョンを統一する
- 外部から提供された AAR ファイルを利用する
- APK ファイル名のサフィックスにバージョンを追加する
- Lint エラーが発生した場合もビルドを継続する
- Android アプリが使用している依存ライブラリをツリー構造で表示する(dependencies/androidDependencies タスク)
- Gradle 全般の説明は こちらを参照
Android Studio
- AAR 形式のファイルを作成する/使用する
- Android Studio に割り当てるメモリを増やす
- Android Studio で新規ファイル作成時に Copyright を自動挿入する
- Android Studio の便利なショートカット (1) コードの調査/メソッド間のジャンプ
- Android Studio の便利なショートカット (2) ブックマーク
Android デバイス開発者向け(ベンダ向け情報)
- root ユーザで adb 接続する
- Sleep モードに遷移する
- 現在の Configuration を変更する
- LowMemoryKiller によるプロセス kill の優先順位の仕組み
- LowMemoryKiller の too many background によるプロセス kill の仕組み
- Android デバイスのパーティション構成概要
- make 後の生成イメージが格納されるディレクトリを調べる
- インストールされた各 APK パッケージに割り当てられたユーザー ID を調べる
- android/build/core 以下の *.mk ファイルで定義されている関数 (define) のリスト
- ART/Dalvik VM のバージョンを調べる
- Locale を切り替える
- サポートされている Locale の一覧 (Android 4.0)
- 製品にパッケージングする APK を指定する
- Make 変数でビルド範囲を制御する
- システムプロパティのあれこれ
- findmakefile で Android.mkのあるディレクトリを調べる
- getevent/sendevent で入力デバイスへの入力情報を取得する/入力を行う
- libhardware.so が hardware サポートライブラリをロードする仕組み
Android Framework/SDK
- Jetpack Compose の宣言型 (declarative) の UI 定義とは?
- Activity の起動モードと起動フラグ(タスクとアフィニティ)
- SpeechRecognizer で音声入力を実現する
- リソース ID を示す変数やパラメータにアノテーションを付ける
設定 (SharedPreferences)
Java レイヤ
I/O(入出力)
UI(描画)
- 常に画面の最前面に表示されたままになる View を作る (TYPE_APPLICATION_OVERLAY)
- Kotlin で OpenGL ES を使って 3D 表示するアプリを作る
- RecyclerView の基本
- 任意の View をフォーカスする
- ソフトウェアキーボードを常に表示する
- カスタムビューを作成する
- カスタムビューの子ビューがフォーカスを得たことを検出する
- カスタムビューでソフトウェア D-Pad を表示する
- ValueAnimator でアニメーションに使用する値を計算する
- ScrollView を一番下までスクロールさせる
- Canvas に複数行のテキストを描画する
- Canvas への描画時にアンチエイリアスを有効にする
数値/文字列
Service(サービス)
設定 (Settings)
Native レイヤ
- RefBase によるスマートポインタ
- ネイティブサービスの実装 (1) Binder 関連のクラス
- ネイティブサービスの実装 (2) サービスの実装から利用まで
- ネイティブサービスの実装 (3) サービスのインタフェースを定義する