2018년 3월 12일 월요일

am_create_activity event log 분석


분석은 아니고 안드로이드에서 앱이 실행될때, 어떤 형태로 로그가 생성되는지 정리해보았습니다.

알고 나면 다음과 같은 문제가 발생했을때 대처할 수 있습니다.
* android app들 중 소비자가 모르게 가끔 광고가 뜨는 경우가 있습니다. 이런 경우 분석이 가능합니다.

event log에서 am_create_activity 부분을 확인 하는것입니다.
아래와 같은 형태로 로그가 나오게 됩니다.

am_create_activity: [0,154297384,14015,(실행하게되는activity의이름),(Action),NULL,NULL,270532608,(실행시키는 주체)]

실행시키는 주체의 패키지 이름을 보면 어떤 앱에서 실행되는 알 수 있습니다.
주의할 점은 am_create_activity가 호출이 안되는 경우가 있습니다. 즉 activity destroy가 되지 않고 다시 문제점이 발생되는 경우 resume이 되면서 해당 로그가 나오지 않게 됩니다. 그런경우 전화기를 재시작해서 다시 재현하는 방법이 있습니다.

아래의 예에서는 런처에서 contacts을 실행시킨 로그 입니다.

event log
12-07 17:25:32.261  3837  4684 I am_create_activity: [0,154297384,14015,com.samsung.android.contacts/com.android.dialer.DialtactsActivity,android.intent.action.MAIN,NULL,NULL,270532608,com.sec.android.app.launcher]


214        ActivityStack.logStartActivity(
1215                EventLogTags.AM_CREATE_ACTIVITY, mStartActivity, mStartActivity.task);

xref: /frameworks/base/services/core/java/com/android/server/am/ActivityStack.java

4473    static final void logStartActivity(int tag, ActivityRecord r,
4474            TaskRecord task) {
4475        final Uri data = r.intent.getData();
4476        final String strData = data != null ? data.toSafeString() : null;
4477
4478        EventLog.writeEvent(tag,
4479                r.userId, System.identityHashCode(r), task.taskId,
4480                r.shortComponentName, r.intent.getAction(),
4481                r.intent.getType(), strData, r.intent.getFlags());
4482    }







댓글 없음:

댓글 쓰기