Контрольные точки SampleSyncAdapter не работают

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

Спасибо.

Ответ 1

Нить исполнения SyncAdapter выполняется в вызванном фоновом процессе, а не в процессе самого приложения, к чему вы подключили свой отладчик java.

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

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

Ответ 2

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

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

Ответ 3

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

android.os.Debug.waitForDebugger();

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

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

Он должен работать просто отлично

Ответ 4

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

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

Ответ 5

android:process=":sync"

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

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

accountManager.addAccountExplicitly(newAccount, null, null)

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

Ответ 6

Проверив несколько ответов, это то, что у меня сработало

  1. помечать процесс с помощью: sync in manifest

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

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

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

Attach Debugger to Android process

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

  2. Когда синхронизация активирована впервые, вы увидите свое имя пакета: синхронизация в окне "Выбор процесса". Выберите его и нажмите ОК

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