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)
- Androidメモ: ADB でディレクトリ内のファイルをすべて取得する (adb pull)
- ADB でスリープ状態に入る/スリープから抜ける
- Androidメモ: ADB で WakeLock を強制的に外す
- ADB からキー入力やテキスト入力を行う (
input text,input keyevent) - ADB で Android 端末のバージョンや API レベルを調べる (getprop)
- ADB で Android 端末にインストールされているパッケージの一覧を取得する (pm list packages)
- Androidメモ: TCP/IP で adb 接続する
- 旧)Android Studio で静的解析プラグインを使用する (CheckStyle, FindBugs)
- ANR の原因を突き止める
- Androidメモ: ADB 経由でスクリーンキャプチャを取得する (
screencap) - Androidメモ: StrictMode を有効にして望ましくない実装を検出する
- Androidメモ: StrictMode の違反メッセージを Toast で表示する (
StrictModeToaster) - Logcat
- 旧)各種デバイスの ADB 接続: Nexus7 (2013) / Xperia Tablet Z / Sony Tablet S / SHARP IS03
- 旧)Androidメモ: Eclipse から Android SDK を使えるようにする (ADK)
ビルド関連/Gradle
- Android Gradleメモ: Android アプリ用の Gradle スクリプトの基本
- Android Gradleメモ: リソース名に正しくプレフィックスが付いているか確認する (
resourcePrefix) - Android Gradleメモ: Android の Gradle 関連ファイルまとめ
- Android Gradleメモ: BuildConfig クラスでアプリの動作を切り替える
- Android Gradleメモ: サブモジュールで使用する SDK バージョンを統一する
- Android Gradleメモ: 外部から提供された AAR ファイルを利用する
- Android Gradleメモ: APK ファイル名のサフィックスにバージョンを追加する
- Android Gradleメモ: Lint エラーが発生した場合もビルドを継続する (
abortOnError) - Android Gradleメモ: Android アプリが使用している依存ライブラリをツリー構造で表示する(dependencies/androidDependencies タスク)
- トラブルシューティング:
- ◆Gradle 全般の説明は → こちら
Android Studio
- Androidメモ: AAR 形式のファイルを作成する/使用する
- Androidメモ: Android Studio に割り当てるメモリを増やす
- Androidメモ: Android Studio で新規ファイル作成時に Copyright を自動挿入する
- Androidメモ: Android Studio の便利なショートカット (1) コードの調査/メソッド間のジャンプ
- Androidメモ: Android Studio の便利なショートカット (2) ブックマーク
Androidベンダー向けメモ(Android デバイス開発者向け)
- Androidベンダー向けメモ: LowMemoryKiller の仕組み
- Androidベンダー向けメモ: コンソールからキーの入出力を行う (
getevent/sendevent) - Androidベンダー向けメモ: root ユーザで adb 接続する
- Locale
- Androidベンダー向けメモ: ART/Dalvik VM のバージョンを調べる (
dalvikvm -showversion) - Androidベンダー向けメモ: make 後の生成イメージが格納されるディレクトリを調べる (
$ANDROID_PRODUCT_OUT) - Androidベンダー向けメモ: インストールされた各 APK パッケージに割り当てられたユーザー ID を調べる (
packages.xml) - Androidベンダー向けメモ: Android デバイスのパーティション構成概要 (Nexus7)
- Androidベンダー向けメモ: android/build/core 以下の
*.mkファイルで定義されている関数 (define) のリスト - Androidベンダー向けメモ: 製品にパッケージングする APK を指定する (
PRODUCT_PACKAGES) - Androidベンダー向けメモ: Make 変数でビルド範囲を制御する
- Androidベンダー向けメモ: システムプロパティのあれこれ
- Androidベンダー向けメモ:
findmakefileコマンドでAndroid.mkのあるディレクトリを調べる - Androidベンダー向けメモ: libhardware.so が hardware サポートライブラリをロードする仕組み
Android アプリ実装/Framework/SDK
- Androidメモ: Jetpack Compose の宣言型 (declarative) の UI 定義とは?
- Androidメモ: Activity の起動モードと起動フラグ(タスクとアフィニティ)
- Androidメモ: SpeechRecognizer で音声入力を実現する
- Androidメモ: リソース ID を示す変数やパラメータにアノテーションを付ける
- Androidメモ: AsyncTask による非同期処理と UI 更新処理
設定(Settings、SharedPreferences)
- Androidメモ: SharedPreferences でアプリの設定値を保存する
- Androidメモ: Preference フレームワークを使って設定画面を簡単に作成する
- Androidメモ: 画面消灯 (SCREEN OFF) までの時間を取得・設定する
- Androidメモ: 現在のスクリーンレイアウトサイズを取得する (
Configuration)
ファイル、I/O(入出力)、ネットワーク
- Androidメモ: ネットワーク情報を取得する (
ConnectivityManager,NetworkInfo) - Androidメモ: Androidの特殊ディレクトリの情報を取得する (
android.os.Environment) - Androidメモ: キーイベント (KeyEvent) を見やすく出力する
- Androidメモ: タッチイベントをハンドルする
- Androidメモ: Emulator での開発時にキーボードによるキー入力が長押しかどうかを判別する
UI(描画)
- Androidメモ: 常に画面の最前面に表示されたままになる View を作る (
TYPE_APPLICATION_OVERLAY) - Androidメモ: Kotlin で OpenGL ES を使って 3D 表示するアプリを作る
- Androidメモ: RecyclerView の基本
- Androidメモ: 任意の View をフォーカスする (
requestFocus) - Androidメモ: ソフトウェアキーボードを常に表示する (
setSoftInputMode) - Androidメモ: カスタムビューを作成する
- Androidメモ: カスタムビューの子ビューがフォーカスを得たことを検出する
- Androidメモ: カスタムビューでソフトウェア D-Pad を表示する
- Androidメモ:
ValueAnimatorでアニメーション処理に使用する値を計算する - Androidメモ:
ScrollViewを一番下までスクロールさせる (fullScroll) - Androidメモ: Canvas に複数行のテキストを描画する
- Androidメモ: Canvas への描画時にアンチエイリアスを有効にする (
Paint#setAntiAlias)
数値/文字列
Service(サービス)
- Androidメモ: 同じプロセス内のサービスへバインドする (Local Bind)
- Androidメモ: 別プロセスのサービスへバインドする (Remote Bind)
- Androidメモ: サービスからコールバックできるようにする