"Open Declaration" в Eclipse переходит к файлам классов вместо исходных файлов для Android-библиотек
У меня есть два Android-проекта "A" и "B" . "B" зависит от "A" и является библиотекой. Всякий раз, когда я нахожусь в Project 'B' и нажимаю "Open Declaration" для исходного файла Java, который находится в "A", Eclipse переходит к файлу класса вместо исходного файла. Это, конечно, имеет несколько недостатков!
Я посмотрел путь сборки проекта "B" , чтобы увидеть, имеет ли ссылка на библиотеку "A" правильный путь к исходному проекту.
Кто-нибудь знает, как это исправить?
Вот файлы .classpath и project.properties для каждого проекта:
ProjectA.classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
ProjectA project.properties
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "ant.properties", and override values to adapt the script to your
# project structure.
# Project target.
target=android-8
android.library=true
ProjectB.classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
ProjectB project.properties
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "ant.properties", and override values to adapt the script to your
# project structure.
# Project target.
target=android-8
android.library.reference.1=../ProjectA
Ответы
Ответ 1
Вы можете импортировать проект библиотеки не только как Android Lib (так оно и должно быть сделано), но и как связанный проект в обычном меню "Java Build Path".
Затем не забудьте перенести этот импорт в верхнюю часть (по крайней мере, больше, чем запись "Библиотечные проекты" ) на вкладке "Заказ и экспорт".
Это работает, но это взломать и это грязно. Это не так, как это должно быть сделано... и когда вы развертываете приложение на телефоне, eclipse напишет сообщение об ошибке в консоли, в котором говорится, что некоторые apk не могут быть найдены...
Тем не менее, мне удобнее соединять файл класса.
Я не знаю, что это происходит. Мои приятели в офисе работают с той же конфигурацией, что и я, и у них нет этой проблемы, но, похоже, мы не единственные, у кого есть эта проблема: http://code.google.com/p/android/issues/detail?id=20731
Ответ 2
У меня была такая же проблема, когда моя версия проекта библиотеки A находилась в "Свойствах > Путь сборки Java > Библиотеки", но не в "Свойствах > Путь сборки Java > Проекты".
Проблема была решена после того, как я сделал следующее:
- Удалите "Библиотечные проекты" из "Свойствa > Путь сборки Java > Библиотеки", который был добавлен в "Свойствa > Путь сборки Java > " (я не уверен, нужен ли этот шаг, но это то, что я сделал).
- Добавьте проект A в "Свойствa > Путь сборки Java > Проекты".
- Перезапустить Eclipse (Индиго). Как-то Eclipse воссоздает проекты библиотеки в "Свойствах > Путь сборки Java > Библиотеки"
.classpath должен иметь следующее:
<classpathentry combineaccessrules="false" kind="src" path="/A"/>
На самом деле переход к файлам классов был не самым раздражающим, но нарушение файлов классов вместо java файлов во время отладки сводило меня с ума до того, как эта проблема была решена.
Ответ 3
Что сработало для меня: перемещение проектов lib на вкладке Заказ и Экспорт - прямо под /src
и /gen
основного проекта.
Ответ 4
Мое первое предположение заключалось в том, что у вас есть JAR с классами A в нем на пути сборки B. Откройте вкладку "Библиотеки". Можете ли вы показать нам свои файлы .classpath и project.properties?
Ответ 5
Для меня работает следующее решение:
Перейдите в проект библиотеки Android (в вашем случае это A) → Java Build Path → Order and Export, убедитесь, что первая запись является исходной папкой библиотеки (A). Затем очистите проект библиотеки и целевой проект. Теперь он работает отлично.