fwrite

fwrite

twitter
github
email

AOSPデバッグガイド

Android のコンパイル#

環境を初期化するために、envsetup.sh スクリプトを使用します:source build/envsetup.sh または. build/envsetup.sh

利用可能なコマンドの完全なリストを表示するには、次のコマンドを実行してください:hmm

フレームワークのデバッグ#

top#

  1. VIRT:このメモリ使用量は、アプリケーションが占有するアドレス空間です。アプリケーションが要求するものであり、実際に使用されているかどうかは関係ありません。プログラムのエラーを避けるために、メモリを多く使用することは正常です。
  2. RES:常駐メモリ使用量。これは、アプリケーションが実際に使用しているメモリ量ですが、2 つの小さな問題があります。1 つは、一部のデータがスワップ領域に格納されている可能性があることです(SWAP)。もう 1 つは、一部のメモリが共有されている可能性があることです。
  3. SHR:共有メモリ。つまり、このメモリ領域は他のアプリケーションによっても使用される可能性があります。
  4. DATA:データが占有するメモリ。これは、プログラムが実際に必要とするデータ領域であり、実行中に使用されます。

vmstat#

vmstat は、システム情報を表示するコマンドです。たとえば、メインメモリの利用可能容量や CPU の動作状態を表示します。 vmstat コマンドをそのまま実行すると、現在のプロセス、メモリ、スワップ、デバイス、割り込み、CPU に関する情報が表示されます。さらに、「-d」または「-p」オプションを追加すると、パーティションやディスクの読み取り / 書き込み状態などが表示されます。オプション「-f」を指定すると、システムの起動からコマンドの実行までの間に作成されたプロセスの数が表示されます。

meminfo#

cat /proc/meminfo

free#

-b	バイト単位で容量を表示(デフォルト)
-k	キロバイト単位で容量を表示
-m	メガバイト単位で容量を表示
-h	容量の単位にG、Mを含める
-t	物理メモリとスワップメモリの合計も表示する

strace#

プロセスの実行中に行われるシステムコールと受信したシグナルをトレースするためによく使用されます。

time#

指定したコマンドの呼び出しから終了までにかかる時間、ユーザ CPU 時間、システム CPU 時間を測定します。指定したコマンドの出力結果の後に、測定結果が標準エラー出力に出力されます。コマンドの実際の CPU 使用時間はユーザ CPU 時間です。したがって、存在しないコマンドを time コマンドの引数として指定すると、ユーザ CPU 時間は 0 になります。スリープ時間は含まれません。

size#

ターゲットファイルまたはリンクライブラリファイルの各セグメントのサイズを表示します。

file#

ファイルの種類を特定して表示します。

addr2line#

so ファイルを解析します。

ブートスキップ#

adb shell settings put global device_provisioned 1

readelf#

ELF 形式のファイル情報を表示します。

logcat#

adb root;adb remount

キャッシュのクリア adb logcat -c

クリアできない場合は、特定の領域を指定してクリア adb logcat -c main/system/event/kernel/all(ログバッファ)

キャッシュの表示 adb logcat -g
最大のlogcatキャッシュを設定 adb logcat -G 100M

dump meminfo#

adb shell dumpsys meminfo
または特定のパッケージ名
adb shell dumpsys meminfo packageName

printk#

  • デバッグログの出力

printk("%d",intA);

  • 変数のメモリサイズの出力

printk("sizeof(*intA)=%d",sizeof(*intA);

CPU アーキテクチャの確認#

adb shell getprop ro.product.cpu.abi

サービス#

特定のサービスが存在するかどうかを確認する:adb shell service check SurfaceFlinger```

### Activity

adb shell dumpsys activity top|grep ACTIVITY

adb shell am start -n ActivityName

### パラメータの取得

```getprop すべてのシステム情報パラメータを表示
getprop ro.serialno シリアル番号を表示
getprop ro.carrier CID番号を表示
getprop ro.hardware ボードのコードネームを表示
getprop ro.bootloader SPL(Hboot)バージョンを表示
getprop ro.build.version.release システムバージョンを表示(8、9など)
getprop ro.build.display.id ベンダーシステムバージョンを取得```

### CPU周波数

```rootアクセス(suコマンドを直接入力)
cd sys/devices/system/cpu/cpu0/cpufreq
次のファイルが表示されます

cpuinfo_cur_freq:現在のCPU動作周波数
cpuinfo_max_freq:プロセッサが実行できる最大動作周波数(単位:キロヘルツ)
cpuinfo_min_freq:プロセッサが実行できる最小動作周波数(単位:キロヘルツ)```

### 画面

```表示:
adb shell
wm size 現在のディスプレイの解像度を取得
wm density 現在の画面密度を取得(例:560dpi)

変更:
wm size 1096*2560
wm density 420

リセット:
wm size reset
wm density reset```

### 仮想アドレスの表示

```adb root;adb remount
adb shell
ps -A|grep camera サービスのプロセスIDを表示(例:4712)
cd proc/4712 プロセスIDのフォルダに移動
more maps 仮想メモリアドレスを表示```

### SELinuxモード

- `adb shell setenforce 0(一時的に有効にし、SELinuxモードを無効にする)`
- `adb shell setenforce 1(有効にし、SELinuxモードを有効にする)`

### パスの取得

- `adb shell dumpsys SurfaceFlinger 実行中のAPKを一番下に表示`
- `adb shell pm path "com.**" パスを取得`

## プロパティシステム

Androidは、SystemPropertiesのsetおよびgetメソッドを使用して多くのものを制御しています。一般的に、上位レベルで制御スイッチを追加する場合には、このメソッドを使用できます。システムには多くのpropファイルが存在します。それらはそれぞれsystem/build.prop、system/etc/prop.default、vendor/build.prop、vendor/default.propです。以下では、これらのファイルの構成について説明します。

- system/build.prop

これは、device\\(platform)sample\product/system.propによって主に構成されており、buildディレクトリに追加されたADDITIONAL_BUILD_PROPERTIESも含まれます。

- system/etc/prop.default

これは、システムに追加されたPRODUCT_SYSTEM_DEFAULT_PROPERTIESです。

- vendor/build.prop(重要)

これは、システムに追加されたPRODUCT_PROPERTY_OVERRIDESであり、device.mkに追加されたプロパティはここにコンパイルされますが、9.0のシステムではここに追加すると値を取得できません。

- vendor/default.prop(同じディレクトリのbuild.propによって同じプロパティが上書きされます)

これは、システムに追加されたPRODUCT_DEFAULT_PROPERTY_OVERRIDESです。

プレフィックス:

- ro:読み取り専用のプロパティで、変更できません。
- persist:プロパティを変更しても、再起動後も有効です。データは/data/propertyディレクトリに保存されます。他のプレフィックスのプロパティは、メモリに保存されるだけで、ディスクに保存されませんので、再起動後はデフォルト値に戻ります。
- ctrl:サービスの開始と停止に使用されます。各サービスはinit.rcで定義する必要があります。initがctrl.startプロパティの設定要求を受け取ると、プロパティサービスはそのプロパティ値をサービス名として使用し、そのサービスを開始します。このサービスの開始結果はinit.svc.<サービス名>プロパティに格納されます。
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。