안드로이드 디바이스 장치에 Logcat 저장하는 방법 입니다.
앱을 전달하였는데 안드로이드 스튜디오 연결해서 로그를 보지 못할때!
안드로이드 디바이스 장치의 내장메모리에 .txt 파일로 Logcat 을 저장하는 방법입니다.
저도 어제 그런 상황이 있어서 찾아보다가 알게된 방법이라 포스팅을 해보려고 합니다.
작성한 파일 목록입니다.
1. MyApp.java
2. AndroidManifest.xml
1. MyApp.java
Application 을 상속하는 클래스 파일 을 하나 만들어 줘야합니다~
onCreate() 안에 저장소 접근권한을 확인하고 read/write 에 대한 접근이 둘다 가능하다면
logcat 텍스트파일이 저장되는 경로와 로그파일 이름을 설정해줍니다.
해당 경로가 없다면 .mkdirs() 을 통해 폴더를 생성해주세요!
저는 경로를 /storage/emulated/0/MyApp/logs 로 하였고
로그파일 이름은 logcat_현재날짜시간(yyyyMMddhhmmss).txt 로 하였습니다.
해당 경로는 갤럭시 디바이스 기준으로 내파일 > 내장메모리 > MyApp 폴더 > logs 폴더 > 안에 .txt 파일이 생성됩니다.
package com.eun.myapp;
import android.app.Application;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.IOException;
public class MyApp extends Application {
public String TAG = MyApp.class.getSimpleName();
/**
* Application 이 시작되기 전 MyApp 의 onCreate 실행
*/
public void onCreate() {
super.onCreate();
Log.d(TAG, " *** onCreate()");
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmss");
String time = format.format(date);
if ( isExternalStorageWritable() ) {
//read, write 둘다 가능
File appDirectory = new File( Environment.getExternalStorageDirectory()+"/MyApp" );
File logDirectory = new File( appDirectory + "/logs" );
Log.d(TAG, "*** onCreate() - appDirectory :: "+appDirectory.getAbsolutePath());
Log.d(TAG, "*** onCreate() - logDirectory :: "+logDirectory.getAbsolutePath());
//appDirectory 폴더 없을 시 생성
if ( !appDirectory.exists() ) {
appDirectory.mkdirs();
}
//logDirectory 폴더 없을 시 생성
if ( !logDirectory.exists() ) {
logDirectory.mkdirs();
}
File logFile = new File( logDirectory, "logcat_" + time + ".txt" );
Log.d(TAG, "*** onCreate() - logFile :: "+logFile);
//이전 logcat 을 지우고 파일에 새 로그을 씀
try {
Process process = Runtime.getRuntime().exec("logcat -c");
process = Runtime.getRuntime().exec("logcat -f " + logFile);
} catch ( IOException e ) {
e.printStackTrace();
}
} else if ( isExternalStorageReadable() ) {
//read 만 가능
} else {
//접근 불가능
}
}
/**
* 외부저장소 read/write 가능 여부 확인
* @return
*/
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if ( Environment.MEDIA_MOUNTED.equals( state ) ) {
return true;
}
return false;
}
/**
* 외부저장소 read 가능 여부 확인
* @return
*/
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if ( Environment.MEDIA_MOUNTED.equals( state ) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals( state ) ) {
return true;
}
return false;
}
}
2. AndroidManifest.xml
이제 AndroidManifest.xml 에서 권한 3개를 추가해야 합니다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_LOGS"/>
그리고 <application> 태그 안에 android:name=".MyApp" 이런식으로
Application 을 상속하는 파일을 만들었던 클래스의 이름으로 android:name 을 지정해주세요!
그리고 주의할 점은 android 10 버전 이상에서는
<application> 안에 android:requestLegacyExternalStorage="true" 를 추가 해야 외부 저장소를 사용할 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.eun.myapp">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_LOGS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
android:name=".MyApp"
android:requestLegacyExternalStorage="true" >
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
안드로이드 디바이스 내파일 확인하기
내파일 > 내장메모리 에 들어가서 보면 이렇게 logcat~.txt 파일이 생성된 것을 확인할 수 있습니다!
감사합니다~😸
프로젝트 첨부합니당~ !
참고 : www.javaer101.com/ko/article/3356453.html
참고 : https://nonameunknown.tistory.com/10
'🤖 안드로이드 Android' 카테고리의 다른 글
[안드로이드/Android] 앱 데이터&캐시 (App Data&Cache) 삭제 (0) | 2021.05.11 |
---|---|
[안드로이드/Android] EditText 자동 하이픈(-) 설정, 키보드 자동으로 올리기 (1) | 2021.05.04 |
[안드로이드/Android] 휴대폰 번호 정보 가져오기 (0) | 2021.05.03 |
[안드로이드/Android] 앱 정보 가져오기 (앱아이디, 앱이름, 패키지명, 버전이름, 버전코드) (1) | 2021.05.03 |
[안드로이드/Android] 기기 단말정보 가져오기 (단말ID, 제조사, 브랜드, 모델명, OS버전, SDK 버전) (0) | 2021.04.23 |