在看NFC代码时,有一个直接找找不到的类叫NfcStatsLog,查看Android.bp发现有这么一段:
genrule {
name: "statslog-Nfc-java-gen",
tools: ["stats-log-api-gen"],
cmd: "$(location stats-log-api-gen) --java $(out) --module nfc --javaPackage com.android.nfc"
+ " --javaClass NfcStatsLog",
out: ["com/android/nfc/NfcStatsLog.java"],
}
显然这个类就是编译过程中按照这个规则生成的,经过查找源代码,这个工具的位置为:
frameworks\base\tools\stats_log_api_gen
而具体的标签内容存放在
frameworks\base\cmds\statsd\src\atoms.proto
例如其中有这样的配置
message Atom {
......
NfcTagOccurred nfc_tag_occurred = 138 [(module) = "nfc"];
......
}
......
/**
* Logs when a NFC Tag event occurred.
* Logged from:
* packages/apps/Nfc/src/com/android/nfc/NfcDispatcher.java
*/
message NfcTagOccurred {
enum Type {
UNKNOWN = 0;
URL = 1;
BT_PAIRING = 2;
PROVISION = 3;
WIFI_CONNECT = 4;
APP_LAUNCH = 5;
OTHERS = 6;
}
optional Type type = 1;
}
......
注释中已经写明了是在NfcDispatcher.java中用到的,查看NfcDispatcher.java代码可以看到有如下log语句:
NfcStatsLog.write(NfcStatsLog.NFC_TAG_OCCURRED, NfcStatsLog.NFC_TAG_OCCURRED__TYPE__BT_PAIRING);
可以看出这里的NFC_TAG_OCCURRED是在message Atom{}中定义的,编译时message NfcTagOccurred{}中定义的所有Type都可以组合使用,格式为:
NFC_TAG_OCCURRED__TYPE__XX[_XX]
因为同在com.android.nfc,所以NfcDispatcher不需要import,而在AidRoutingManager中就需要import com.android.nfc.NfcStatsLog;
Android中的StatsLog
最新推荐文章于 2024-03-29 15:26:04 发布