Библиотека Android: ресурсы объединены, код не - PullRequest
5 голосов
/ 19 июня 2010

Я пытаюсь настроить приложение Android с зависимостью проекта библиотеки Android в Eclipse. Я создал проект под названием AnTest и проект библиотеки под названием AnLib. Я предоставил ссылку на AnLib в свойствах проекта AnTest. Теперь я пытаюсь сослаться на некоторый библиотечный код (статический публичный метод) из AnTest. Eclipse выдает «com.anlib.Hello не может быть преобразован в тип».

И дело не в том, что ссылка свисает - я вижу, что ресурсы правильно объединены. Но изнутри AnTest, единственный класс в пакете com.anlib - это «R».

Пожалуйста, что я делаю не так? Какой-то очень простой шаг должен быть пропущен ...

РЕДАКТИРОВАТЬ: я добавил AnLib к пути сборки Java / Projects в свойствах проекта AnTest. Теперь он компилируется, но при запуске генерируется исключение NoClassDefFoundError ...

Ответы [ 2 ]

5 голосов
/ 21 июня 2010

После тщательного изучения примеров проектов (TicTacToe) я заметил кое-что в classpath.Это связанная папка с источниками библиотеки.Свойства проекта приложения, путь сборки Java, в разделе «Источник» нажмите «Источник ссылки», укажите путь к библиотеке \ src.

В конце концов, волшебства нет.

РЕДАКТИРОВАТЬ:NDK (основанные на JNI, нативные) библиотеки также не выбираются по умолчанию.Нужно создать связанную папку с именем libs в соответствующих библиотеках в проекте библиотеки.

EDIT2: поведение нативных библиотек зависит от версии ADT и / или Eclipse.Также активы не объединяются, но этот последний бит фактически задокументирован.

EDIT3: под последними инструментами Android библиотеки больше не реализованы как связанные источники.Пожалуйста, не обращайте внимания на этот ответ;это было правдой и актуально в то время, но теперь это не так.

0 голосов
/ 19 июня 2010

У меня есть эта настройка, но без ресурсов в проекте "библиотека". Мой основной проект - проект Android, но «библиотечный» - это просто стандартный проект Java. Кажется, это хорошо работает.

В пути сборки (вкладка «Проекты») для основного проекта Android я добавил проект библиотеки.

Файл .project проекта библиотеки выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>DataExchange</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.wst.common.project.facet.core.builder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.wst.validation.validationbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
        <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    </natures>
</projectDescription>

Файл .project проекта Android выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>Project</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>com.android.ide.eclipse.adt.ApkBuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

Я не помню, чтобы я делал что-то особенное в настройке.

...