Как отладить код Java в Android-приложении Cordova с вашего устройства с помощью ADB в Windows

Очевидным недостатком работы с Cordova с использованием интерфейса командной строки (а не непосредственно Android Studio) является то, что вы не можете правильно отладить или получить подробную информацию о собственной ошибке (если только во время выполнения приложения на устройстве), например, анализировать следующий класс плагинов Cordova:

package com.ourcodeworld.plugins;
import org.apache.cordova.*;
import org.json.JSONArray;
import org.json.JSONException;
import android.content.Intent;
import android.content.Context;
import android.widget.Toast;
public class randomClass extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException {
if (action.equals("executeAwesomeFunction")) {
/**
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* The following code will throw an exception and will make your app crash !
**/
Intent intent = new Intent("com.nononsenseapps.filepicker.FilePickerActivity");
intent.putExtra("some_data", "data");
cordova.startActivityForResult((CordovaPlugin) this, intent, 0);
return true;
} else {
return false;
}
}
@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
showToast("Enviar aquí resultado cordova");
if(resultCode == cordova.getActivity().RESULT_OK){
// Some Code to Handle response
return;
}else if(resultCode == cordova.getActivity().RESULT_CANCELED){
// Some Code to Handle response
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* Show a toast with some message
*/
public void showToast(String toLog){
Context context = cordova.getActivity();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, toLog, duration);
toast.show();
}
}

Теоретически, предыдущий код будет скомпилирован и не будет отображать никаких ошибок при сборке или запуске приложения с помощью cordova run android в консоли (однако ошибка в функции execute, и мы объясним вам, почему позже). Теперь предыдущий класс будет представлен и запущен в Javascript с помощью myApp.executeAwesomeFunction() так что если вы компилируете приложение и запускаете функцию, boom:

Приложение остановлено Android Cordova

Ваше приложение просто перестанет работать без какой-либо полезной или видимой информации о том, что произошло. В общем, если вы работаете в своем плагине и не имеете ни малейшего представления о том, что не работает, вы, вероятно, захотите покончить с собой прямо сейчас. Однако не все потеряно, если не пока. Если у вас есть устройство Android, USB-кабель вы можете узнать, как проверить на наличие ошибок.

отладка

Для отладки с вашего устройства нам нужно полагаться на adb logcat. Logcat — это инструмент командной строки, который выводит журнал системных сообщений, включая трассировки стека, когда устройство выдает ошибку, и сообщения, которые вы написали из своего приложения с помощью класса Log (узнайте больше о классе в официальной документации).

Этот инструмент (исполняемый в Windows) доступен в Android SDK, поэтому, если вы можете скомпилировать свое приложение, вы уже установили Android Studio. Теперь, чтобы отладить ваше приложение на устройстве, выполните следующие действия:

1. Подключите ваше устройство

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

2. Выполнить АДБ

В качестве хорошей практики (практики, упрощающей процесс отладки), мы собираемся перенаправить все выходные данные инструмента командной строки в файл журнала (log.txt находится где-то в вашей системе).

Откройте командную строку (cmd.exe) и выполните следующую команду, чтобы она работала в фоновом режиме во время отладки (остановите ее, когда не выполняете отладку, чтобы предотвратить бесполезный вывод):

adb logcat > C:\Users\sdkca\Desktop\log.txt

Команда должна создать файл log.txt на рабочем столе, и он будет постоянно обновляться с выводом из ADB, пока вы используете ваше приложение. Вообще в винде adb недоступен в качестве переменной среды поэтому, если вы хотите сделать это быстро, вы можете указать абсолютный путь к исполняемому файлу в консоли.

В этом случае, adb.exe находится в следующей папке в нашей Windows:

Android ADB windows

Итак, вместо этого мы бы использовали следующую команду:

C:\Users\sdkca\AppData\Local\Android\sdk\platform-tools\adb.exe logcat > C:\Users\sdkca\Desktop\log.txt

Теперь ADB должен быть запущен в командной строке и не остановится, если вы этого не сделаете.

3. Создайте и установите приложение на устройстве

Скомпилируйте Cordova CLI ваше приложение, используя Wheter cordova run android --device или что вы используете. Обратите внимание, что с момента, когда приложение установлено и выполняется в вашем приложении, logcat начнет генерировать и сохранять выходные данные в файле log.txt. Порядок, который мы указали в этом руководстве (подключите устройство, запустите logcat, а затем установите приложение), полезен, потому что для некоторых разработчиков приложение вначале аварийно завершает работу (поэтому logcat обнаружит ошибку и сохранит содержимое в файле журнала). ,

4. Проверьте и проверьте, что не работает

Предполагая, что ваше приложение работает нормально, но когда вы выполняете какой-то Javascript, он падает, самое время проверить ошибки! В нашем примере приложение вылетает, когда мы выполняем myApp.executeAwesomeFunction() в JavaScript Это должно остановить приложение в Android, теперь нам нужно проверить, что logcat получил в выводе.

Если ваше приложение уже упало, остановите ADB в вашей команде, используя CTRL+BREAK или просто закрыв окно командной строки (это предотвращает генерацию большего количества текста в журнале или позволяет открыть файл, потому что иногда, так как adb пишет на нем, он не откроется, пока ADB не будет закрыт), и откройте log.txt файл.

Наконец, наступает, возможно, неудобный момент, вам нужно проверить файл журнала (сфокусируйтесь на времени, когда вы тестировали свое приложение, и вы быстро обнаружите ошибку):

Выходной логкат андроид

Как видите, log.txt файл дает нам некоторую ценную информацию, которой у нас не было до использования ADB. Сообщение об ошибке:

Причина: android.content.ActivityNotFoundException: невозможно найти явный класс активности {com.ourcodeworld.sandbox / com.nononsenseapps.filepicker.FilePickerActivity}; Вы объявили об этой активности в вашем AndroidManifest.xml?

Теперь мы знаем, что мы называем несуществующую деятельность, поэтому нам просто нужно ее создать и все. Помните, что вы можете фильтровать вывод, сгенерированный logcat, предоставляя такие параметры, как -f, чтобы показывать только фатальные ошибки (подробнее об API LogCat в официальной документации здесь).

Повеселись !

Ссылка на основную публикацию
Adblock
detector