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 タスク)
- Androidメモ: repo init でエラーが出る場合
- ◆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メモ: サービスからコールバックできるようにする