Android — Android Studio — Debug — локальные переменные


Содержание

Глобальные переменные и их значения

29.07.2012, 17:43

Глобальные и локальные переменные
Здравствуйте подскажите почему метод getBuy() возвращает ноль?? public class MainActivity.

Глобальные переменные, методы — где лучше заводить?
Добрый день! Только начинаю осваивать Android разработку. Бывает так, что для удобства.

При компилировании в gcc глобальные переменные теряют значения
Несмотря на то, что переменным присваивается значения курсор встает на место 0,0 int cursor_x = 0;.

Глобальные переменные — передача значения из одной формы в другую
На одном форуме нашел следующее решение: Создать отдельный модуль без форму. Объявить в нем в.

Andro >

У меня странное поведение с использованием отладчика Android при выполнении следующего кода. Значение переменной исчезает сразу после ее инициализации виджетом. Я перенес его на часы, но там написано «Cannot find local variable value» , Неважно, где я размещаю переменную, перед циклом for или внутри, она ведет себя одинаково, несмотря ни на что. Я также напечатал переменную, как вы можете видеть в коде, и он говорит «value is null» но когда я проверяю это if (value == null) он не останавливается и, наконец, выдает ошибку при попытке привести его к целому числу.

6 ответов

Вы используете proguard с запутыванием?

Если да, это может быть проблема — отключите его с

который вы должны поместить в свой файл с правилами proguard (обычно proguard-rules.txt, проверьте конфигурацию proguard в файле build.gradle, как в следующем примере:

У меня такая же проблема. Наконец, решается удалением «testCoverageEnabled true» из файла сборки Gradle.

Аналогичная проблема, вызванная ошибкой в ​​Gradle version 1.0.0 который был решен позже version 1.0.1

Поиск вашего проекта для ‘com.android.tools.build:gradle:1.0.0’ который будет найден в build.gradle файлы. у вас может быть более одного build.gradle файл, если вы включаете модули.

когда у вас есть:

Измените это на:

Затем синхронизируйте Gradle. Android Studio загрузит новый файл gradle jar и скомпилирует его.

Имея ту же проблему здесь: Cannot find local variable ‘[variable_name]’ , и единственное отличие состоит в том, что мое приложение полностью отлаживаемо, в то время как проблема возникает с кодом библиотеки.

debug Отладчик Android Studio не показывает локальные переменные

developer options andro > (7)

Я пытаюсь отладить по сети в Android Studio. Я подключился через порт 5555 и вообще возможно пройти через точки останова. Но часто для выполнения одной строки кода часто требуются минуты, а другая причина в том, что я не вижу переменных, которые не являются членами. Все, что я вижу, this объект this , но нет переменных внутри методов. Как я могу включить это?

Как вы можете видеть, я нахожусь в методе и, по крайней мере, объект действия инициализирован, но он не виден в мониторе переменных.

Проблема остается при использовании отладки по USB. Локальные переменные не видны, даже при попытке оценить выражения во время отладки:

Android Studio 2.1, Gradle 2.1.0, Java 1.8

Я попробовал пробную версию и сделал так, чтобы она работала с настройками, как показано во вложении. К вашему сведению, с использованием последней версии Android Studio 3.3.1 и Gradle версии 4.6.

Java 1.8 не поддерживает доступ к значениям переменных.

Обновите Gradle до версии 2.2.0-бета3:

В вашем gradle-wrapper.properties

В вашем проекте файл build.gradle

У меня были такие же проблемы. Я полностью переустановил свою IDE, и проблема исчезла. Я надеюсь, что мой подход поможет вам.

Была такая же проблема.

Они рекомендуют удалить в build.gradle (приложение), это исправило проблему для меня.

Для меня я должен был установить testCoverageEnabled в false, например, так:

Когда мне было присвоено значение true, я не получал локальные переменные

Хотя это не является постоянным решением этой проблемы, наиболее последовательное решение (после попытки найти другие ответы здесь безрезультатно) просто перезагружало мой компьютер.

Через некоторое время выяснения этой же проблемы я понял, что запускаю сборку релиза, а не отладочную сборку.

Окно вариантов сборки может не открываться в Android Studio по умолчанию. Перейдите в Инструмент Windows -> Варианты сборки. В окне «Варианты сборки» выберите соответствующую сборку.

В вашем файле app.gradle убедитесь, что для debuggable задано значение true в варианте сборки, который вы хотите отлаживать:


Если вы хотите отладить сборку релиза, добавьте debuggable true в сборку релиза.

Debug your app

Android Studio provides a debugger that allows you to do the following and more:

  • Select a device to debug your app on.
  • Set breakpoints in your Java, Kotlin, and C/C++ code.
  • Examine variables and evaluate expressions at runtime.

This page includes instructions for basic debugger operations. For more documentation, also see the IntelliJ IDEA debugging docs.

Enable debugging

Before you can begin debugging, you need to prepare as follows:

    Enable debugging on your device:

If you’re using the emulator, this is enabled by default. But for a connected device, you need to enable debugging in the device developer options.
Run a debuggable build variant:

You must use a build variant that includes debuggable true in the build configuration. Usually, you can just select the default «debug» variant that’s included in every Andro >build.gradle file). But if you define new build types that should be debuggable, you must add `debuggable true` to the build type:

This property also applies to modules with C/C++ code. (The jniDebuggable property is no longer used.)

If your app depends on a library module that you also want to debug, that library must also be packaged with debuggable true so it retains its debug symbols. To ensure that the debuggable variants of your app project receive the debuggable variant of a library module, be sure that you publish non-default versions of your library.

Start debugging

You can start a debugging session as follows:

  1. Set some breakpoints in the app code.
  2. In the toolbar, select a device to debug your app on from the target device drop-down menu.

If you don’t have any devices configured, then you need to either connect a device via USB or create an AVD to use the Android Emulator.

In the toolbar, click Debug .

If you see a dialog asking if you want to «switch from Run to Debug,» that means your app is already running on the device and it will restart in order to begin debugging. If you’d rather keep the same instance of the app running, click Cancel Debug and instead attach the debugger to a running app.

Otherwise, Android Studio builds an APK, signs it with a debug key, installs it on your selected device, and runs it. If you add C and C++ code to your project, Android Studio also runs the LLDB debugger in the Debug window to debug your native code.

If the Debug window is not open, select View > Tool Windows > Debug (or click Debug in the tool window bar), and then click the Debugger tab, as shown in figure 1.

Figure 1. The Debugger window, showing the current thread and the object tree for a variable

Attach the debugger to a running app

If your app is already running on your device, you can start debugging without restarting your app as follows:

  1. Click Attach debugger to Android process .
  2. In the Choose Process dialog, select the process you want to attach the debugger to.

If you’re using an emulator or a rooted device, you can check Show all processes to see all processes.

From the Debugger drop-down menu, you can select a different debug type. By default, Android Studio uses the Auto debug type to select the best debugger option for you, based on whether your project includes Java or C/C++ code.

The Debug window appears.

Note: The Andro >Thread object is not garbage collected until the debugger disconnects, even if the thread has terminated.

Change the debugger type

Because different debugger tools are required to debug Java/Kotlin code and C/C++ code, the Android Studio debugger allows you to select which debugger type to use. By default, Android Studio decides which debugger to use based on which languages it detects in your project (with the Auto debugger type). However, you can manually select the debugger in the debug configuration (click Run > Edit Configurations) or in the dialog that appears when you click Run > Attach debugger to Android process.

The debug types available include the following:

  • Auto: Select if you want Android Studio to automatically choose the best option for the code you are debugging. For example, if you have any C or C++ code in your project, Android Studio automatically uses the Dual debug type. Otherwise, Android Studio uses the Java debug type.
  • Java: Select if you want to debug only code written in Java or Kotlin—the Java debugger ignores any breakpoints or watches you set in your native code.

Native: (Available only with C/C++ code.) Select if you want to use only LLDB to debug your code. When using this debug type, the Java debugger session view is not available. By default, LLDB inspects only your native code and ignores breakpoints in your Java code. If you want to also debug your Java code, you should switch to either the Auto or Dual debug type.


Note: Native debugging does not work on 32-bit Windows in Android Studio 3.0 and higher. If you are using 32-bit Windows and you need to debug native code, you should use Android Studio 2.3.

Dual: (Available only with C/C++ code.) Select if you want to switch between debugging both Java and native code. Android Studio attaches both the Java debugger and LLDB to your app process, one for the Java debugger and one for LLDB, so you can inspect breakpoints in both your Java and native code without restarting your app or changing your debug configuration.

In figure 2, notice the two tabs to the right of the Debug window title. Because the app has both Java and C++ code, one tab is for debugging the native code, and the other for debugging Java code, as indicated by -java.

Figure 2. Tab for debugging native code and tab for debugging Java code

Note: If you are debugging native code that is optimized by the compiler, you may get the following warning message: This function was compiled with optimizations enabled. Some debugger features may not be available . When using optimization flags, such as -O flags, the compiler makes changes to your compiled code to make it run more efficiently. This can cause the debugger to report unexpected or incorrect information because it’s difficult for the debugger to map the optimized compiled code back to the original source code. For this reason, you should disable compiler optimizations while debugging your native code.

Use the system log

The system log shows system messages while you debug your app. These messages include information from apps running on the device. If you want to use the system log to debug your app, make sure your code writes log messages and prints the stack trace for exceptions while your app is in the development phase.

Write log messages in your code

To write log messages in your code, use the Log class. Log messages help you understand the execution flow by collecting the system debug output while you interact with your app. Log messages can tell you what part of your application failed. For more information about logging, see Write and view logs.

The following example shows how you might add log messages to determine if previous state information is available when your activity starts:

Kotlin

During development, your code can also catch exceptions and write the stack trace to the system log:

Kotlin

Note: Remove debug log messages and stack trace print calls from your code when you are ready to publish your app. You could do this by setting a DEBUG flag and placing debug log messages inside conditional statements.

View the system log

You can view and filter debug and other system messages in the Logcat window. For example, you can see messages when garbage collection occurs, or messages that you add to your app with the Log class.

To use logcat, start debugging and select the Logcat tab in the bottom toolbar as shown in figure 3.

Figure 3. Logcat window with filter settings

For a description of logcat and its filtering options, see Write and view logs with Logcat.

Work with breakpoints

Android Studio supports several types of breakpoints that trigger different debugging actions. The most common type is a line breakpoint that pauses the execution of your app at a specified line of code. While paused, you can examine variables, evaluate expressions, then continue execution line by line to determine the causes of runtime errors.

To add a line breakpoint, proceed as follows:

  1. Locate the line of code where you want to pause execution, then either click the left gutter along that line of code or place the caret on the line and press Control+F8 (on Mac, Command+F8).
  2. If your app is already running, you don’t need to update it to add the breakpoint—just click Attach debugger to Andro >Figure 3. A red dot appears next to the line when you set a breakpoint

When your code execution reaches the breakpoint, Android Studio pauses execution of your app. You can then use the tools in the Debugger tab to identify the state of the app:

To examine the object tree for a variable, expand it in the Variables view. If the Variables view is not visible, click Restore Variables View .

To evaluate an expression at the current execution point, click Evaluate Expression .

To advance to the next line in the code (without entering a method), click Step Over .

To advance to the first line inside a method call, click Step Into .

To advance to the next line outside the current method, click Step Out .

To continue running the app normally, click Resume Program .

If your project uses any native code, by default the Auto debug type attaches both the Java debugger and LLDB to your app as two separate processes, so you can switch between inspecting Java and C/C++ breakpoints without restarting your app or changing settings.

Note: For Android Studio to detect breakpoints in your C or C++ code, you need to use a debug type that supports LLDB, such as Auto, Native, or Dual. You can change the debug type Android Studio uses by editing your debug configuration. To learn more about the different debug types, read the section about using other debug types.

When Android Studio deploys your app to your target device, the Debug window opens with a tab or debug session view for each debugger process, as shown in figure 4.

Figure 4. Debugging native code using LLDB

    Android Studio switches to the tab when LLDB debugger encounters a breakpoint in your C/C++ code. The Frames, Variables, and Watches panes are also available and work exactly as they would if you were debugging Java code. Although the Threads pane is not available in the LLDB session view, you can access your app processes using the drop-down list in the Frames pane. You can learn more about these panes in the sections about how to debug window frames and inspect variables.

Note: While inspecting a breakpoint in your native code, the Android system suspends the virtual machine that runs your app’s Java bytecode. This means that you are unable to interact with the Java debugger or retrieve any state information from your Java debugger session while inspecting a breakpoint in your native code.


  • Android Studio switches to the -java tab when the Java debugger encounters a breakpoint in your Java code.
  • While debugging with LLDB, you can use the LLDB terminal in the LLDB session view to pass command line options to LLDB. If you have certain commands that you would like LLDB to execute each time you start debugging your app, either just before or just after the debugger attaches to your app process, you can add those commands to your debug configuration.
  • While debugging C/C++ code, you can also set special types of breakpoints, called watchpoints, that can suspend your app process when your app interacts with a particular block of memory. To learn more, read the section about how to add watchpoints.

    View and configure breakpoints

    To view all the breakpoints and configure breakpoint settings, click View Breakpoints on the left side of the Debug window. The Breakpoints window appears, as shown in figure 5.

    Figure 5. The Breakpoints window lists all the current breakpoints and includes behavior settings for each

    The Breakpoints window lets you enable or disable each breakpoint from the list on the left. If a breakpoint is disabled, Android Studio does not pause your app when it hits that breakpoint. Select a breakpoint from the list to configure its settings. You can configure a breakpoint to be disabled at first and have the system enable it after a different breakpoint is hit. You can also configure whether a breakpoint should be disabled after it is hit. To set a breakpoint for any exception, select Exception Breakpoints in the list of breakpoints.

    Debug window frames

    In the Debugger window, the Frames pane lets you inspect the stack frame that caused the current breakpoint to be hit. This enables you to navigate and examine the stack frame and also inspect the list of threads in your Android app. To select a thread, use the thread selector drop-down and view its stack frame. Clicking the elements in the frame opens the source in the editor. You can also customize the thread presentation and export the stack frame as discussed in the Window Frames guide.

    Inspect variables

    In the Debugger window, the Variables pane lets you inspect variables when the system stops your app on a breakpoint and you select a frame from the Frames pane. The Variables pane also lets you evaluate ad-hoc expressions using static methods and/or variables available within the selected frame.

    The Watches pane provides similar functionality except that expressions added to the Watches pane persist between debugging sessions. You should add watches for variables and fields that you access frequently or that provide state that is helpful for the current debugging session. The Variables and Watches panes appear as shown in figure 5.

    To add a variable or expression to the Watches list, follow these steps:

    1. Begin debugging.
    2. In the Watches pane, click Add .
    3. In the text box that appears, type the name of the variable or expression you want to watch and then press Enter.

    To remove an item from the Watches list, select the item and then click Remove .

    You can reorder the elements in the Watches list by selecting an item and then clicking Up or Down .

    Figure 6. The Variables and Watches panes in the Debugger window

    Add watchpoints

    While debugging C/C++ code, you can set special types of breakpoints, called watchpoints, that can suspend your app process when your app interacts with a particular block of memory. For example, if you set two pointers to a block of memory and assign a watchpoint to it, using either pointer to access that block of memory triggers the watchpoint.

    In Android Studio, you can create a watchpoint during runtime by selecting a specific variable, but LLDB assigns the watchpoint to only the block of memory the system allocates to that variable, not the variable itself. This is different from adding a variable to the Watches pane, which enables you to observe the value of a variable but doesn’t allow you to suspend your app process when the system reads or changes its value in memory.

    Note: When your app process exits a function and the system deallocates its local variables from memory, you need to reassign any watchpoints you created for those variables.

    To set a watchpoint, you must meet the following requirements:

    • Your target physical device or emulator uses an x86 or x86_64 CPU. If your device uses an ARM CPU, then you must align the boundary of your variable’s address in memory to either 4 bytes for 32-bit processors, or 8 bytes for 64-bit processors. You can align a variable in your native code by specifying __attribute__((aligned( num_bytes ))) in the variable deceleration, as shown below:
    • You have assigned three or fewer watchpoints already. Android Studio only supports up to four watchpoints on x86 or x86_64 target devices. Other devices may support fewer watchpoints.

    If you meet the requirements above, you can add a watchpoint as follows:

      While your app is suspended on a breakpoint, navigate to the Variables pane in your LLDB session view.

    Right-click on a variable that occupies the block of memory you want to track and select Add Watchpoint. A dialog to configure your watchpoint appears, as shown in figure 7.

    Figure 7. Adding a watchpoint to a variable in memory

  • Configure your watchpoint with the following options:
    • Enabled: You can deselect this option if you want to tell Android Studio to ignore the watchpoint for the time being. Android Studio still saves your watchpoint so you can access it later in your debug session.
    • Suspend: By default, the Android system suspends your app process when it accesses a block of memory you assign to a watchpoint. You can deselect this option if you don’t want this behavior—this reveals additional options you can use to customize behavior when the system interacts with your watchpoint: Log message to console and Remove [the watchpoint] when hit.
    • Access Type: Select whether your app should trigger your watchpoint when it tries to Read or Write to the block of memory the system allocates to the variable. To trigger your watchpoint on either a read or write, select Any.
  • Click Done.

  • To view all your watchpoints and configure watchpoint settings, click View Breakpoints on the left side of the Debug window. The Breakpoints dialog appears, as shown in figure 8.

    Figure 8. The Breakpoints dialogue lists your current watchpoints and includes behavior settings for each

    After you add your watchpoint, click Resume Program on the left side of the Debug window to resume your app process. By default, if your app tries to access a block of memory that you have set a watchpoint to, the Android system suspends your app process and a watchpoint icon appears next to the line of code that your app executed last, as shown in figure 9.

    Figure 9. Android Studio indicates the line of code that your app executes just before triggering a watchpoint

    View and change resource value display format

    In debug mode, you can view resource values and select a different display format for variables in your Java code. With the Variables tab displayed and a frame selected, do the following:

    1. In the Variables list, right-click anywhere on a resource line to display the drop-down list.
    2. In the drop-down list, select View as and select the format you want to use.

    The available formats depend on the data type of the resource you selected. You might see any one or more of the following options:

    • Class: Display the class definition.
    • toString: Display string format.
    • Object: Display the object (an instance of a class) definition.
    • Array: Display in an array format.
    • Timestamp: Display date and time as follows: yyyy-mm-dd hh:mm:ss.
    • Auto: Android Studio chooses the best format based on the data type.
    • Binary: Display a binary value using zeroes and ones.
    • MeasureSpec: The value passed from the parent to the selected child. See MeasureSpec .
    • Hex: Display as a hexadecimal value.
    • Primitive: Display as a numeric value using a primitive data type.
    • Integer: Display a numeric value of type Integer .

    You can create a custom format (data type renderer), as follows:

    1. Right-click the resource value.
    2. Select View as.
    3. Select Create. The Java Data Type Renderers dialog displays.
    4. Follow the instructions at Java Data type renderers.

    Content and code samples on this page are subject to the licenses described in the Content License. Java is a registered trademark of Oracle and/or its affiliates.

    Область видимости переменных андроид студио

    Проблема в том, что при запуске приложение вылетает, показывая при этом в логкате:

    1 ответ 1

    Всё ещё ищете ответ? Посмотрите другие вопросы с метками java android-studio videoview или задайте свой вопрос.

    Похожие

    Подписаться на ленту

    Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

    дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.13.35425

    Andro >

    Статья содержит ответы на вопросы, как правильно провести Android Studio тестирование на реальном устройстве, какие при этом используются настройки и команды для разных девайсов.

    Разработка мобильного приложения предполагает процесс тестирования на работающем гаджете. Для Android Studio отладка на реальном устройстве возможна несколькими способами. Это можно сделать при помощи:

    • эмулятора;
    • сетевого подключения TCP,IP;
    • USB.

    Чтобы провести Android Studio отладка по USB, подключаются соответствующие драйвера. Они первыми установятся автоматически после запуска на ПК.

    Android предлагает разработчикам редактирование языка программирования (Java, C++, Kotlin), является компилятором создания АРК-файлов. Включает дополнительные инструменты:

    Что означает ADB для Android studio

    Android Debug Bridge или adb – утилита командной строки. С ее помощью проводится Android Studio тестирование на реальном устройстве:

    • копируются файлы на смартфон и обратно;
    • удаляются приложения;
    • выполняются опции резервного копирования;
    • восстановление приложений на устройствах.

    Работает на модели клиент-сервер. Утилита размещается на компьютере в каталогах на диске С.

    Adb устанавливается также через Wi-Fi. Для этого обеспечивается подключение устройств к одному Wi-Fi, иначе они не смогут распознать друг друга. Опция разрешает Android Studio запуск приложения на телефоне с операционной системой Android.

    Android Debug Bridge – консольное приложение для использования в тестовой среде на мобильных гаджетах. Специализированные команды помогают взаимодействовать с устройствами по специализированным функциям.

    Настройка Android-устройства для тестирования с ADB


    После установки Android Studio на устройство применяется инструментарий SDK. Далее в настройках приспособления проводятся изменения, которые отличаются из-за разных моделей гаджета, производителя и версии программного обеспечения. Действия, как в Андроид Студио подключить устройство, сводятся к обобщенным этапам:

      Перейти в настройках телефона или планшета Andro >

    Android требует, чтобы приложение Android Studio получило разрешение прописать USB. Утилита располагает опциями:

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

    Настройка ADB на Windows

    Настройка ADB под Windows прописывается с любой директории ПК. Для использования функций на компьютере устанавливается SDK. Вес установочного пакета составляет 9 Мб. Он поддерживает все версии Windows. Инструмент автоматически устанавливает драйвера, которые необходимы для тестирования на устройстве. Набор для разработки программного обеспечения выпускается компанией Google. Отправляет команды терминала из внешних источников на телефон. Запуск происходит в Андроид Студио на телефоне с помощью Run App. После этого открывается окно выбора устройства, и запускается приложение.

    Проверяем настройки ADB для тестирования

    Проверка настроек проводится с помощью командной строки Windows. После запуска в поле для ввода поиска программ и файлов набирается строка «adb devices». В программе отразится перечень устройств, которые подключены к компьютеру. Если на экране появится непустой список, значит, настройки подключены правильно, и ADB работает в режиме реального времени.

    Тестирование приложения с помощью реального устройства

    Инструментарий SDK устанавливает и запускает программу каждый раз при компиляции. Система показывает диалоговое окно с вопросом о необходимости приема ключей.

    Что делать, если Android Studio не видит телефон Samsung? Настроить приложение, чтобы оно обнаружило устройство, использовать утилиту adb. Указанные способы рассказывают о Android Studio, показывают, как запустить проект на телефоне.

    Декомпиляция и отладка Andro > 07:40 / 20 Апреля, 2015

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

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

    Требования к тестовой среде:

    • Операционная система: Windows / Mac OS X / Linux
    • Java (рекомендуется версия 1.7)
    • >В статье будет использоваться следующая конфигурация: Windows 8, Android Studio и IntelliJ IDEA. Устройство: Nexus 4 с Android версии 4.4.4. Рекомендую все утилиты добавить в переменную окружения PATH, чтобы облегчить и ускорить доступ к этим инструментам.

    Android application package (APK), используемый в статье, можно скачать отсюда: com.netspi.egruber.test.apk.

    Инструкция ниже поможет вам подготовить устройство для экспериментов.

    Активация раздела Developer Options

    Для начала на Android-устройстве должна быть разрешена отладка через USB (опция USB debugging), что позволит «общаться» с девайсом при помощи инструментов из набора Android SDK. Однако перед этим необходимо активировать раздел Developer options. На устройстве зайдите в раздел Settings > About Phone и кликните несколько раз на пункт Build Number, после чего должно появиться сообщение о том, что раздел Developer options активирован.

    Рисунок 1: Для того чтобы активировать раздел Developer options, необходимо несколько раз кликнуть на Build number

    Разрешение отладки через USB

    Чтобы разрешить отладку через USB-порт, зайдите в раздел Settings > Developer options и отметьте флажок напротив USB debugging.

    Рисунок 2: Включение опции USB debugging

    Подключение устройства и запуск ADB

    После подключение устройства к компьютеру через USB-порт, должно появиться сообщение «USB debugging connected on the device». Также следует проверить, можно ли подключиться к устройству при помощи приложения Android Debug Bridge (ADB), входящего в состав Android SDK (пакет Android SDK Platform-tools). В командной строке введите следующую команду:

    Устройство должно отобразиться в списке.

    Рисунок 3: Список подключенных устройств

    Если устройство не отобразилось в списке, то наиболее вероятная причина в некорректно установленных драйверах (в Windows). В зависимости от устройства драйвер можно найти либо в Android SDK, либо на сайте производителя.

    Проверка приложения на возможность отладки

    Перед отладкой Android-приложений вначале необходимо проверить, есть ли такая возможность. Проверку можно выполнить несколькими способами.

    Первый способ – запустить Android Device Monitor, входящий в состав Android SDK (в папке tools). В Windows файл называется monitor.bat. При открытии Android Device Monitor устройство отобразится в разделе Devices.

    Рисунок 4: Приложение Android Device Monitor

    Если какое-либо приложение на устройстве можно отлаживать, это приложение также отобразится в списке. Я создал тестовую программу, но список пуст, поскольку программу отлаживать нельзя.

    Второй способ проверить приложение на возможность отладки – исследовать файл AndroidManifest.xml из пакета приложения (APK, Android application package). APK представляет собой zip-архив, содержащий всю информацию, необходимую для запуска приложения на Android-устройстве.

    Всякий раз, когда приложения загружается из Google Play Store, также загружается и пакет приложения. Все загруженные APK-файлы обычно хранятся на устройстве в папке /data/app. Если у вас нет прав суперпользователя, вы не сможете получить список файлов из директории /data/app. Хотя, если вы знаете имя APK-файла, можете скопировать его при помощи утилиты adb. Чтобы узнать имя APK-файла, введите следующую команду:

    Появится командная строка устройства. Затем введите следующую команду:


    pm list packages -f

    Отобразится список всех пакетов на устройстве.

    Рисунок 5: Перечень пакетов на устройстве

    Глядя на список, находим тестовое приложение.

    Рисунок 6: Пакет созданного тестового приложения (выделено белым)

    Теперь необходимо скопировать файл пакета. Открываем шелл и вводим следующую команду:

    adb pull /data/app/[.apk file] [location]

    Рисунок 7: Копируем APK-файл с устройства в систему

    Теперь нужно открыть файл пакета и исследовать содержимое AndroidManifest.xml. К сожалению, мы не можем просто так распаковать архив, поскольку APK-файл закодирован в бинарном формате. Для раскодировки чаще всего используется утилита apktool, хотя я использую APK Studio, поскольку у этого приложения дружелюбный графический интерфейс. Далее в статье будет рассказываться об APK Studio.

    В APK Studio кликните на маленькую зеленую иконку, задайте имя проекту и укажите путь к APK файлу. Затем укажите пусть для сохранения проекта.

    Рисунок 8: Создание нового проекта в APK Studio

    После открытия APK выберите файл AndroidManifest.xml и посмотрите параметры тега application. Если флаг android:debuggable отсутствует (или присутствует, но установлено значение false), значит, приложение отлаживать нельзя.

    Рисунок 9: Содержимое файла AndroidManifest.xml

    Модификация файла AndroidManifest.xml

    При помощи утилиты apktool или APK Studio мы можем модифицировать файлы и упаковывать содержимое обратно в пакет. Сейчас мы изменим файл Andro .

    Рисунок 10: Изменяем содержимое тега application

    После добавления флага кликаем на иконку «молоток» и заново собираем пакет. Пересобранный пакет будет находиться в директории build/apk.

    Рисунок 11: Повторная сборка пакета завершилась успешно

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

    Теперь нужно установить пересобранный пакет. Вначале удаляем старое приложение при помощи следующей команды:

    adb pm uninstall[package name]

    Затем устанавливаем новый пакет:

    adb install [.apk file]

    Также можно удалить и установить пакет одной командой:

    adb install -r [.apk file]

    Рисунок 12: Установка пересобранного пакета

    Проверьте, чтобы переустановленное приложение корректно запускалось на устройстве. Если все работает, переходим обратно в Android Device Monitor, где должно появиться тестовое приложение.

    Рисунок 13: Теперь пересобранное приложение можно отлаживать

    Настройка среды разработки (IDE)

    Теперь к пересобранному приложению можно подцепить отладчик, но вначале нужно создать проект в среде разработки (в статье используется IntelliJ IDEA). Создаем новый проект. В поле Application name указываем произвольное имя. В поле Package name указываем имя, в точности совпадающее с иерархией папок пересобранного пакета.

    Рисунок 14: Создание нового проекта в IntelliJ IDEA

    Обычно имя APK-файла совпадает со структурой папок, хотя, если вы не уверены, в APK Studio проверьте иерархию директорий до папки, где находятся файлы приложений. В моем случае имя и структура папок полностью совпадают (com.netspi.egruber.test).

    Рисунок 15: Иерархия директорий тестового приложения

    Снимите флажок «Create Hello World Activity» и завершите создание проекта (все остальные параметры остаются по умолчанию). Новый проект должен выглядеть примерно так:

    Рисунок 16: Иерархия папок и файлов нового проекта

    После создания проекта нужно добавить исходный код из APK-файла для того, чтобы отладчик «знал» имена символов, методов, переменных и т. д. Хорошая новость в том, что Android-приложения можно декомпилировать практически без потери качества (исходный код будет совпадать с оригиналом). После декомпиляции исходный текст импортируется в среду разработки (IDE).

    Получение исходных текстов из пакета приложения

    Для начала необходимо преобразовать APK в jar-файл. Затем мы при помощи java-декомпилятора получим исходный текст приложения. Преобразование в jar будем делать при помощи утилиты dex2jar. У dex2jar есть файл d2j-dex2jar.bat, используемый для конвертирования APK в jar. Синтаксис команды довольно прост:


    d2j-dex2jar.bat [.apk file]

    Рисунок 17: Преобразование APK в jar

    Затем открываем или перетаскиваем полученный файл в JD-GUI (это java-декомпилятор).

    Рисунок 18: Структура jar-файла

    Jar-файл должен отобразиться в виде иерархической структуры, внутри которой находятся java-файлы с читабельным исходным кодом. Заходим в File > Save All Sources, чтобы упаковать все исходные тексты в zip-архив.

    Рисунок 19: Сохранение исходных текстов декомпилированного файла

    После сохранения исходных текстов распаковываем архив в отдельную директорию.

    Рисунок 20: Распакованный архив

    Теперь нужно импортировать обе директории в созданный ранее проект в IDE. В IntelliJ заходим в папку src и копируем туда содержимое распакованного архива (две директории).

    Рисунок 21: Обе папки скопированы в директорию src

    Возвращаясь в Intellij, видим обновленный проект.

    Рисунок 22: В проекте появились исходные тексты

    Если мы кликнем на какой-нибудь элемент из списка, то увидим исходный текст. Как видно на скриншоте ниже (исходный текст класса LoginActivity), исходный код обфусцирован при помощи ProGuard.

    Рисунок 23: Обфусцированный исходный текст класса LoginActivity

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

    Рисунок 24: Поставлена точка останова на обфусцированный метод

    Как только появилась точка останова, подключаем отладчик к процессу на устройстве, кликнув на иконку с экраном в правом верхнем углу (на вашей IDE иконка может отличаться).

    Рисунок 25: Подключаем отладчик к процессу

    Далее вам будет предложено выбрать процесс, к которому нужно подключиться. Будут отображены только процессы с флагом andro .

    Рисунок 26: Перечень процессов для подключения отладчика

    После выбора процесса отладчик подсоединится к устройству.

    Рисунок 27: Отладчик подключен к процессу, запущенному на устройстве

    В текстовое поле я буду вводить число 42 (если помните, на соответствующем методе стоит точка останова).

    Рисунок 28: В текстовое поле вводим число 42

    После нажатия на кнопку «Enter Code» выполнение приложения прервется на точке останова, поскольку отладчик «осведомлен», какой метод вызывается на устройстве. Скомпилированное Android-приложение содержит отладочную информацию (например, имена переменных), доступную любому отладчику, совместимому с Java Debug Wire Protocol (JDWP). Если в приложении разрешена отладка, отладчик, совместимый с JDWP (в эту категорию попадает большинство отладчиков идущих в составе сред разработки для Java), сможет подсоединиться к виртуальной машине Android-приложения, а затем считывать и выполнять отладочные команды.

    Рисунок 29: Сработала точка останова

    На скриншоте ниже видно число, которое ранее мы ввели в текстовом поле.

    Рисунок 30: Перечень переменных текущего экземпляра класса

    Мы можем не только считывать данные в приложении, но и вставлять свои собственные. Это может быть полезно, если мы, например, захотим прервать поток выполнения кода и обойти некоторые участки алгоритма. При помощи отладчика мы можем лучше понять логику работы приложения и проанализировать то, что недоступно обычному пользователю. Например, может оказаться очень полезным просмотр используемых функций шифрования и динамические ключи. Кроме того, иногда при отладке полезно знать, как функции взаимодействуют с файловой системой или базой данных, чтобы понять какая информация сохраняется приложением. Подобные манипуляции доступны на любом Android-устройстве без привилегий суперпользователя.

    Подписывайтесь на каналы «SecurityLab» в Telegram и Яндекс.Дзен, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.

    Использование отладчика Android Studio по максимуму

    Это хитрость, о которой я узнал совсем недавно у Senior Android разработчика в моей компании, и теперь я чувствую себя несчастным, сожалея о времени, которое я провел в ожидании сборки Gradle, чтобы проверить свои изменения при написании Android приложений.

    Вот типичный сценарий, который каждый Android разработчик мог бы встретить, по крайней мере, один раз в течение своего жизненного цикла разработки. У вас есть список элементов, которые вы хотите показать в ListView или RecyclerView.

    Ниже приведен наш возлюбленный метод onBindViewHolder , который связывает вашу модель с вашими view-компонентами RecyclerView.

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

    Затем вы нажмёте Run и дождётесь завершения сборки и увидите ваши изменения, так?

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

    Твой выход, Android Studio! Да, нам не нужен внешний плагин или инструмент для достижения вышеупомянутой задачи и более того, нам даже не придется заново собирать проект. Вы не ослышались, мы обойдёмся без Gradle :) Вот как!


    Шаг 1 — Необходимо определить конфигурацию запуска

    Такая конфигурация запуска позволит нам запускать наше приложение и присоединять к нему отладчик из Android Studio, а также вы сможете присоединить его к уже запущенному процессу.

    Нажмите Run → Edit Configurations.

    В верхнем левом углу диалогового окна щелкните значок «+» и выберите Android App.

    Теперь дайте ему имя, мне нравится называть его Run-Only, но вы можете называть его как угодно.

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

    Важный шаг:

    В разделе Installation Options выберите Nothing;
    В Launch Options выберите Default Activity;
    В разделе Before Launch удалите Gradle-aware Make.

    Таким образом, конфигурация должна выглядеть следующим образом:

    Теперь вы можете применить и сохранить эту конфигурацию. Сейчас она должна быть выбрана автоматически. Если нет, то просто выберите её из списка.

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

    Щелкните правой кнопкой мыши на breakpoint и снимите флажок Suspend (рус. приостановить).

    Как только вы снимете флажок, диалог расширится и покажет больше опций.

    Нам интересен раздел Evaluate and log. Мы напишем там выражение, чтобы проверить изменения в нашем элементе RecyclerView. Нажмите на маленький значок голубого цвета справа от окна ввода Evaluate and log, чтобы развернуть его до более крупного редактора, и добавьте выражение для тестирования, и нажмите Ok, а затем Done.

    Теперь нажмите на иконку Debug с выбранной конфигурацией Run-Only и посмотрите на эту магию.

    Приложение должно запуститься с вашей Activity по умолчанию, и вы должны увидеть внесенные там изменения. Также, если вы уделяете пристальное внимание IDE, в самом низу вы увидите только одну запускаемую задачу: Launching Activity.

    Хотелось бы услышать ваши впечатления, когда вы опробуете эту хитрость!

    В Android Studio 2.0 не удается найти локальную переменную метода в режиме отладки

    После обновления версии для Android от 1.5 до 2.0 Preview4. Android Studio Debugger не может найти локальную переменную, определенную в определении метода. Для справки найдите приведенный ниже снимок экрана.

    Создан 02 янв. 16 2020-01-02 14:23:05 MANISH PATHAK

    Если это решило ваш pboelm, не могли бы вы принять ответ. – Raymond Chenon 12 апр. 16 2020-04-12 16:47:22

    4 ответа

    В вашем Gradle, вы включите тестовое покрытие?

    testCoverageEnabled = false , он исправил проблему. https://code.google.com/p/andro >

    Создан 11 фев. 16 2020-02-11 17:07:20 Raymond Chenon

    Сделано AS см. Пару переменных, но появляются дополнительные ошибки. – wtk 18 апр. 16 2020-04-18 09:37:07

    Спасибо, это действительно помогло! – G. Kh. 05 сен. 16 2020-09-05 11:00:17

    это действительно помогло мне, спасибо – milad zahedi 22 ноя. 16 2020-11-22 12:45:50

    Спасибо, это сработало для меня! Закончилось создание логического значения, основанного на том, что сборка выполняется на dev-машине или сервере CICD (в зависимости от наличия переменных среды в нашей среде сборки), поэтому она все равно может предоставлять отчеты о охвате тестирования в конвейере сборки. – Ani Fichadia 24 ноя. 16 2020-11-24 06:31:58

    @AniFichadia хорошая идея. Аналогично: установите переменную среды на CI, если это env. вар. нет (на машине разработчика) значение логического значения по умолчанию — false. – Raymond Chenon 24 ноя. 16 2020-11-24 09:59:17

    Это действительно принятый ответ. – elsennov 12 янв. 17 2020-01-12 11:08:13

    +100500 rep для этого ответа, спас меня много времени. Thx – Andriy Antoniv 26 июн. 17 2020-06-26 07:42:02

    В моем случае я должен был сказать правду при использовании jacoco, если я хочу, чтобы jacoco создавал отчет о покрытии. Положите его обратно на false. Йеай! – estoke 09 фев. 18 2020-02-09 12:44:23

    Отключить разъем для отладки типа сборки (build.gradle):

    Примечание: 1.8 Совместимость источника требует домкрат!

    Создан 16 июн. 16 2020-06-16 19:12:44 Miklós Keresztes

    Итак, это означает, что мы не можем отлаживать Java 1.8, верно? – francisco_ssb 21 июл. 16 2020-07-21 15:11:02

    Нет. Можно отлаживать с помощью java 1.8 и jack (точки останова, пошаговое выполнение и т. Д.), Но значения локальных переменных также не отображаются. Обратите внимание: мое решение является обходным решением, а не решением проблемы! – Miklós Keresztes 22 июл. 16 2020-07-22 15:45:13


    @Dori Andro > – Flow 09 авг. 16 2020-08-09 09:25:26

    Вы можете попробовать это решение — откройте для себя Монитор устройств Android, выполните сброс adb.

    Снимок экрана, где можно найти «Сбросить adb».

    Создан 13 сен. 16 2020-09-13 11:47:37 Mykola

    если вы minifyEnabled верно в

    удалить, что и с помощью так же, как тот отладки

    его работа для м e

    Создан 17 ноя. 17 2020-11-17 12:41:55 Krishna Mohan Singh

    То же, что и в моем случае, спасибо! – Hamzeh Soboh 23 дек. 17 2020-12-23 20:14:06

    В Android Studio 2.0 не удается найти локальную переменную метода в режиме отладки

    После обновления версии для Android от 1.5 до 2.0 Preview4. Android Studio Debugger не может найти локальную переменную, определенную в определении метода. Для справки найдите приведенный ниже снимок экрана.

    Создан 02 янв. 16 2020-01-02 14:23:05 MANISH PATHAK

    Если это решило ваш pboelm, не могли бы вы принять ответ. – Raymond Chenon 12 апр. 16 2020-04-12 16:47:22

    4 ответа

    В вашем Gradle, вы включите тестовое покрытие?

    testCoverageEnabled = false , он исправил проблему. https://code.google.com/p/andro >

    Создан 11 фев. 16 2020-02-11 17:07:20 Raymond Chenon

    Сделано AS см. Пару переменных, но появляются дополнительные ошибки. – wtk 18 апр. 16 2020-04-18 09:37:07

    Спасибо, это действительно помогло! – G. Kh. 05 сен. 16 2020-09-05 11:00:17

    это действительно помогло мне, спасибо – milad zahedi 22 ноя. 16 2020-11-22 12:45:50

    Спасибо, это сработало для меня! Закончилось создание логического значения, основанного на том, что сборка выполняется на dev-машине или сервере CICD (в зависимости от наличия переменных среды в нашей среде сборки), поэтому она все равно может предоставлять отчеты о охвате тестирования в конвейере сборки. – Ani Fichadia 24 ноя. 16 2020-11-24 06:31:58

    @AniFichadia хорошая идея. Аналогично: установите переменную среды на CI, если это env. вар. нет (на машине разработчика) значение логического значения по умолчанию — false. – Raymond Chenon 24 ноя. 16 2020-11-24 09:59:17

    Это действительно принятый ответ. – elsennov 12 янв. 17 2020-01-12 11:08:13

    +100500 rep для этого ответа, спас меня много времени. Thx – Andriy Antoniv 26 июн. 17 2020-06-26 07:42:02

    В моем случае я должен был сказать правду при использовании jacoco, если я хочу, чтобы jacoco создавал отчет о покрытии. Положите его обратно на false. Йеай! – estoke 09 фев. 18 2020-02-09 12:44:23

    Отключить разъем для отладки типа сборки (build.gradle):

    Примечание: 1.8 Совместимость источника требует домкрат!

    Создан 16 июн. 16 2020-06-16 19:12:44 Miklós Keresztes

    Итак, это означает, что мы не можем отлаживать Java 1.8, верно? – francisco_ssb 21 июл. 16 2020-07-21 15:11:02

    Нет. Можно отлаживать с помощью java 1.8 и jack (точки останова, пошаговое выполнение и т. Д.), Но значения локальных переменных также не отображаются. Обратите внимание: мое решение является обходным решением, а не решением проблемы! – Miklós Keresztes 22 июл. 16 2020-07-22 15:45:13

    @Dori Andro > – Flow 09 авг. 16 2020-08-09 09:25:26

    Вы можете попробовать это решение — откройте для себя Монитор устройств Android, выполните сброс adb.

    Снимок экрана, где можно найти «Сбросить adb».

    Создан 13 сен. 16 2020-09-13 11:47:37 Mykola

    если вы minifyEnabled верно в

    удалить, что и с помощью так же, как тот отладки

    его работа для м e

    Создан 17 ноя. 17 2020-11-17 12:41:55 Krishna Mohan Singh

    То же, что и в моем случае, спасибо! – Hamzeh Soboh 23 дек. 17 2020-12-23 20:14:06

    Цукерберг рекомендует:  Английский для начинающих
    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих