🤖 안드로이드 Android

[안드로이드/Android] 디바이스의 내장메모리에 .txt 파일로 Logcat 저장

핑크빛연어 2021. 5. 4. 10:53


안드로이드 디바이스 장치에 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 파일이 생성된 것을 확인할 수 있습니다!

 

 

 

감사합니다~😸

 

더보기

프로젝트 첨부합니당~ !

MyApp01.zip
0.14MB

 

 

 

 

 

참고 : www.javaer101.com/ko/article/3356453.html
참고 : https://nonameunknown.tistory.com/10

728x90
반응형