Подключаем исходники Android в Eclipse

  • Tutorial
Буквально вчера наткнулся на простую и, казалось бы, такую очевидную функцию в IDE Eclipse, как подключение исходников от внешних библиотек. Возможно кому то это покажется слишком простым и банальным, но опросив несколько знакомых разработчиков, я обнаружил, что не только я не знал о такой функции, потому для всех любителей и профессионалов, которые занимается разработкой под Android, прошу под кат, и вы узнаете, как дебажить не только ваш код, но смотреть «в корень» — а именно, дебажить ваш проект «до основания».



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

Оказывается, разработчики Eclipse и Android предусмотрели прекрасную возможность видеть исходники наших библиотек (при их наличии, естественно) и использовать на полную их потенциал. Это не касается случаев, когда библиотека в исходниках импортируется как отдельный проект. Все нижесказанное касается того случая, когда библиотека лежит в jar-файле (так подключается библиотека Android API или JDK).

Ну что же, начнем. Кликаем правой кнопкой мышки на нашем проекте в Package Explorer и ищем пункт Propreties (в самом низу).



Открываем свойства так как показано на картинке и жмем Edit.



В открывшемся меню выбираем External folder и ищем папочку с исходниками Android (в папке %android_sdk%/sources/android-%api_version%. Если исходников нету, запустите SDK Manager и загрузите Sources for Android SDK, соответствующие Target API вашего проекта. В итоге получаем вот такую штуку:



Сохраняем настройки, снова жмем правой кнопкой мышки на папке проекта и выбираем пункт Resresh. А теперь пробуем зажать Ctrl и левой кнопкой кликнуть в тексте вашей программы на любой Android-овский класс. Я жертвой выбрал класс Activity.



Таким образом можно подключить исходники (а вместе с ними или вместо них и Java-doc) к любой библиотеке, которая предоставляет то или другое в виде файла или архива. К примеру, библиотека ORMLite выпускает исходники и Java-doc, которые подключаются абсолютно аналогично.

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

P. S. Абсолютно аналогичным способом можно подключить исходники JDK, если вы работаете чисто на Java. Для этого к библиотеке rt.jar надо подключить в качестве исходников файл src.zip, лежащий в корне папки, где уставлен ваш JDK.

От автора: Искренне надеюсь, что это поможет многим новичкам (и не только) лучше освоиться в системе Android.
Поделиться публикацией

Комментарии 14

    0
    ctrl + o?
      0
      Это дебаг же. Чем там просмотр методов поможет?
      0
      А я в свою очередь желаю многим разработчикам, которые этого не знали, учить английский и читать что написано.
      На картинке всё простым английским языком написано.
        0
        Я настолько привык работать именно таким образом, что уже даже забыл что кто-то может это делать иначе.
          –1
          К сожалению, я не видел нигде явного упоминания этой фичи… и год проработал без исходников :(
          +3
          Почти 3000 символов и 5 скриншотов, чтобы объяснить пользователям хабра(!) в хабе для разработчиков(!!!), как сделать элементарное однокликовое действие. Круто.

          Извините — не удержался.
            0
            На момент написания коммента 39 человек добавили «это» в избранное. На всякий случай, вдруг забудут последовательность действий.
              0
              И это печально.
            0
            Лучше напишите, почему подключенный таким образом Javadoc периодически отваливается
              0
              о капитан мой капитан!
              увы не тянет это на статью, так заметочка для очень начинающих…
                0
                А можно просто установить плагин, который содержит в себе все исходники и сам их прописывает куда надо.
                  0
                  От автора: Искренне надеюсь, что это поможет многим новичкам (и не только) лучше освоиться в системе Android.
                  Посоветуйте новичкам использовать IDEA, я с ней и думать не знал, что существует такая проблема подключения исходников. Если они скачаны для конкретной платформы, то и подключаются сами, при добавлении платформы в список глобальных SDK.
                    0
                    Было бы неплохо, если бы написали статью как туда перейти с Эклипса. Редактор кода там очарователен, ради него можно даже пожертвовать слабеньким редактором разметки. Но я 2 раза пытался переключится туда, первый раз смог подцепить после долгого ковыряния все либы, но он так и стал компилировать, сыпя ошибками на ABS. А второй раз даже и того не получилось, в том проекте была куча либ, которые ссылались одна на другую…
                      0
                      Я уже не помню как именно работается с библиотеками в Эклипсе, но в Идее всё просто. Есть глобальные либы (доступные во всех проектах) и локальные (внутри проекта, для модулей и подмодулей). Циклическая зависимость недопустима, но можно подключать либу как Provided вместо Compile (если она реально будет скомпилирована одним из модулей и доступна внутри приложения). Именно так, кстати, можно подключить android.jar с реального устройства и получить все скрытые методы и поля (в случае совпадающих классов/методов её надо поставить выше SDK'шной либы), это может быть удобно в некоторых случаях, но недопустимо для публичного продукта. Но такая зависимость не поддерживается ant'ом, поэтому это лишь для «внутреннего» использования.
                      Если либы требуются нескольким модулям, они должны быть подключены в каждом. Можно создать одну локальную либу, указывающую на папку с библиотеками (исходники или бинарники) и подключить её в каждый модуль — при компиляции дублирующийся код будет добавлен один раз, а при использовании proguard или других оптимизаторов будут выкинуты неиспользуемые классы/методы/поля.

                      Для миграции имеется импорт проектов, выполняющийся в пару кликов. Иногда проще импортировать проект не как эклипсовый, а как просто явовый, а затем выставить корректные SDK андроида и подключить библиотеки.
                      Касательно редактора интерфейсов — он там достаточен для того, чтобы накидать элементы в нужном порядке. Я, например, не доверяю сгенерированным интерфейсам, потому что там может оказаться такой порядок элементов, что на разных экранах он будет рисоваться абсолютно по-разному, поэтому без ручной правки никогда не обходится, а предпросмотр помогает контролировать результат, но опять же, он может сильно отличаться от результата в эмуляторе или на реальном устройстве.

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

                  Самое читаемое