Android库:资源合并,代码不合并

时间:2010-06-18 21:19:42

标签: android eclipse android-2.2-froyo

我正在尝试在Eclipse中设置一个Android库项目依赖的Android应用程序。我已经建立了一个名为AnTest的项目和一个名为AnLib的库项目。我在AnTest的项目属性中提供了对AnLib的引用。现在我试图从AnTest引用一些库代码(静态公共方法)。 Eclipse抛出“com.anlib.Hello无法解析为类型”。

并不是引用是悬空 - 我可以看到资源正确合并。但是从AnTest中,com.anlib包中唯一的类是“R”。

拜托,我做错了什么?必须缺少一些非常基本的步骤......

编辑:我已将AnLib添加到AnTest项目属性中的Java构建路径/项目中。现在它编译,但运行抛出NoClassDefFoundError异常......

2 个答案:

答案 0 :(得分:5)

仔细查看示例项目(TicTacToe)之后,我注意到了类路径下的一些东西。它是库源的链接文件夹。应用程序的项目属性,Java构建路径,在“源”下单击“链接源”,提供库\ src的路径。

毕竟没有魔法。

编辑:默认情况下也不会选择NDK(基于JNI的本机)库。必须为库项目中的各个库建立一个名为“libs”的链接文件夹。

EDIT2:本机库的行为似乎取决于ADT和/或Eclipse的版本。资产也没有合并,但实际记录了后一部分。

EDIT3:根据最新的Android工具,库不再作为链接源实现。请忽略这个答案;它当时是真实和相关的,但现在不是。

答案 1 :(得分:0)

我有这个设置,但“库”项目中没有资源。我的主要项目是Android项目,但“库”只是一个标准的Java项目。这似乎运作良好。

在主Android项目的构建路径(“Projects”选项卡)下,我添加了库项目。

库项目的.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>

Android项目的.project文件如下所示:

<?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>

我不记得在设置它时做了一些特别的事情。