Since 2008

Бесплатно по России:

+7 (499) 112-03-83

info@appfox.ru

Как не рутать телефон и выводить данные в консоль

Всем доброго времени суток. Это статья будет о том, как проводить отладку приложения/игры на Android.

Альтернативные готовые решения:

1) В Android SDK входит набор инструментов, предназначенных для отладки. Самый важный инструмент при отладке - это LogCat. Класс android.util.Log позволяет разбивать сообщения по категориям в зависимости от важности.

2) Можно найти на Play Market много приложений для отлавливания логов, но 90% из них требуют Root права. Что есть не безопасно для нас.




Часто сам сталкивался с ситуацией, когда нужно было знать о состоянии приложения на данный момент, знать результат работы функций и результат условных операторов. Решений готовых особо не было. Поэтому, при отсутствии большого количества времени было принято решение, реализовать первую идею которая появилась в и без того уставшем от костылей мозгу.

Решение #1 (так делать не нужно)

Создаем на Canvas элемент Text. Растягиваем этот элемент по всей ширине экрана и в этот textbox будем выводить весь log. Данное решение в свое время мне было необходимо для отладки при интеграции рекламных сетей AdColony AppLovin.

Пример консоли был использован только в одном скрипте (AdsManager) и не требовал вызовов из вне. Так как сам скрипт имел singleton – Instance, то элемент Text в теории можно было вызвать из любого места. Но не стоит этого делать. Так как значение переменной Text может быть равно null.


Рис -1 создаем текстовый элемент


Рис -2 размещаем текстовый элемент

Рис -3 назначаем переменную скрипту в инспекторе




Пример кода

using UnityEngine;

using UnityEngine.UI;

 

public class AdsManager : MonoBehaviour {

 

    public static AdsManager Instance;

    void Awake()

    {

        Instance = this;

    }

 

    public Text consoleTxt;

 

    void Start () {

        consoleTxt.text = "";

 

        for (int i = 0; i < 10; i++)

        {

            LogToConsole(System.Math.Pow( Random.Range(0,1000),i));

        }

    }

 

    private void LogToConsole(object log)

    {

        consoleTxt.text += "\n" + log.ToString();

    }


Рис -4 Результат работы

Вывод: решение не оптимальное. Нельзя видеть полный log, так как текстовое поле не бесконечно и всему есть предел. Вторая причина – это неудобный вывод и чтение лога. Конечно можно было бы подзаморочиться и сделать вывод скролящейся панели по нажатию кнопки, НО игра не стоит свеч.

 

Решение #2 (оптимальное)

Решение простое как божий день. Будем выводить в тестовый файл весь лог с пометками LOG ERROR WARNING. Файл можно найти по исходному пути приложения или же в Streaming Assets. Файл перезаписываем после каждого запуска приложения. Так же для удобства можно после записи выводить время с момента запуска приложения и до момента лога.

Путь к файлу на Android:

.../Android/data/com.YourCompany.ProjectName/files/log.txt


Рис -5 Создаем папку StreamingAssets иначе в редакторе получим ошибку о отсутствии пути


Важно, для редактора и Android разные пути для записи файла.


         

Рис - 6 Результат работы для Win10

 


Рис -7 Результат работы для Android

 

Пример кода

using UnityEngine;

using System.IO;

 

public class AndroidLog : MonoBehaviour {

 

    static string pathFile = "";  

 

    void Start () {

 

#if UNITY_EDITOR

    pathFile = Application.dataPath + "/StreamingAssets//log.txt";

#endif

#if UNITY_ANDROID && !UNITY_EDITOR

        pathFile = Application.persistentDataPath+"//log.txt";

#endif

 

        if (File.Exists(pathFile))

            File.WriteAllText(pathFile, "LOG " + Application.productName);

        else

            File.Create(pathFile);

    }

 

    public static void LogComment(object str)

    {

        File.AppendAllText(pathFile,"\nLOG: " + str.ToString());

    }

 

    public static void LogError(object str)

    {

        File.AppendAllText(pathFile, "\nERROR: " + str.ToString());

    }

    public static void LogWarning(object str)

    {

        File.AppendAllText(pathFile,"\nWARNING: " + str.ToString());

    }

}

Вывод: Решение хорошо тем, что оно кросс платформенное. 

Заметно улучшилось качество лога, удобность чтения и можно получить развернутый лог.


Возврат к списку статей

ПОДПИШИТЕСЬ НА ОБНОВЛЕНИЯ

Осмысленное изучение обучающих материалов позволит профессионально повысить квалификацию. Подпишитесь на бесплатные советы и статьи по ключевым этапам разработки.

Ваше имя: * E-mail: * Ваш комментарий или вопрос: * - обязательные поля для заполнения ПОДПИСАТЬСЯ


Разработка мобильных приложений Appfox
г. Москва, Профсоюзная улица, д. 27
Телефон:
Мы работаем ежедневно с 10:00 до 22:00
Appfox
350.000 рублей
Appfox Контакты:
Адрес: Профсоюзная улица, 27 117418 Москва,
Телефон:+7 499 112–03–83, Электронная почта: info@appfox.ru

Оставьте ваши контактные данные и наш консультант свяжется с вами

Нажимая на кнопку «Отправить», Вы даете согласие на обработку своих персональных данных