SampleSyncAdapter Точки останова не работают - PullRequest
10 голосов
/ 19 декабря 2011

Я использую Eclipse, чтобы узнать, как работает пример SampleSyncAdapter.Я не могу заставить мои контрольные точки работать.Я установил точку останова в нескольких местах, но ни один не получил ударНапример, AuthenticatorActivity.onCreate () никогда не вызывается.Кто-нибудь знает почему?

Спасибо.

Ответы [ 6 ]

22 голосов
/ 05 января 2014

На самом деле, адаптер синхронизации работает в процессе, в котором он настроен.Документация предлагает установить android: process = ": sync", но это только предложение.Для отладки вы всегда можете удалить эту строку.

Для Android Studio + Gradle вы можете подумать о добавлении отладочной версии манифеста в src / debug /.Оказывается, что плагин Gradle не может объединить только атрибут android: process, поэтому вам нужно определить службу и провайдера в src / release / AndroidManifest.xml и src / debug / AndroidManifest.xml отдельно, чтобы не было конфликта слияния.

14 голосов
/ 20 декабря 2011

Поток выполнения SyncAdapter происходит в порожденном фоновом процессе, а не в процессе самого приложения, к которому подключен ваш Java-отладчик.

Простой и уродливый способ: log () - этоВаш друг.

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

2 голосов
/ 13 мая 2015

У меня была эта проблема, и решение было довольно простым. Как уже было сказано, SyncAdapter работает в другом потоке, поэтому вам нужно указать отладчику на этот поток. В Android Studio вы добавляете (код ниже) в класс SyncAdapter:

android.os.Debug.waitForDebugger();

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

Подключите отладчик к процессу Android (Это значок рядом с зеленой ошибкой)

Должно работать нормально

0 голосов
/ 18 июня 2019

После проверки нескольких ответов у меня сработало

  1. процесс тега с: синхронизация в манифесте

  2. запуск в режиме отладки

  3. установите точку останова там, где вы хотите

  4. во время отладки нажмите «Подключить отладчик к процессу Android»

Attach Debugger to Android process

  1. Активируйте синхронизацию один раз - если ваш адаптер синхронизации синхронизируется с элементом (например, контактами), вы можете перейти в настройки / Учетные записи и резервное копирование / Учетные записи / Ваша учетная запись / Синхронизировать учетную запись и нажать «Синхронизировать сейчас», чтобы активировать ,

  2. При первой активации синхронизации вы увидите имя пакета: синхронизация в окне «Выбор процесса». Выберите его и нажмите OK

  3. В следующий раз, когда синхронизация активируется, она перейдет к вашей точке останова

0 голосов
/ 27 августа 2016
android:process=":sync"

Как указано в других ответах, прекрасно работает.

Кроме того, если ваш вызов ContentResolver.requestSync (mAccount, AUTHORITY, settingsBundle) имеет что-то не так, ваша служба не будет вызвана без каких-либо ошибок.Вы должны дважды проверить, что строка Authority совпадает в манифесте и XML, и код Java.Также объект Account создается правильно с правильным типом учетной записи и добавляется в AccountManager с помощью:

accountManager.addAccountExplicitly(newAccount, null, null)

(имена переменных названы в честь официального руководства по Android здесь :

0 голосов
/ 26 ноября 2014

После ответа @Eric Woodruff мне пришла идея, которой я поделюсь для тех, кто хочет сеанс отладки в Eclipse, предназначенный исключительно для адаптера синхронизации: 1. Переключиться на перспективу DDMS 2. В процессе устройства / эмулятора найдите: synch (см.рисунок) 3. Затем нажмите зеленую кнопку с ошибкой (отладка выбранного процесса: при условии, что его исходный проект присутствует и открыт в рабочей области) enter image description here

это прекрасно работает для меня и дает мне более реалистичныйточка зрения: enter image description here

...