Оглавление
Время чтения: 3 минуты
Всем доброго времени суток. Это статья будет о том, как проводить отладку приложения/игры на Android.
Альтернативные готовые решения:
- В Android SDK входит набор инструментов, предназначенных для отладки. Самый важный инструмент при отладке - это LogCat. Класс android.util.Log позволяет разбивать сообщения по категориям в зависимости от важности.
- Можно найти на 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());
}
}
Вывод: Решение хорошо тем, что оно кросс платформенное.
Заметно улучшилось качество лога, удобность чтения и можно получить развернутый лог.
В студии AppFox можно подать заявку на программирование, создание игр или заказать разработку приложений https://appfox.ru/ и получить бесплатную консультацию по ценам и услугам.