【问题标题】:Android library: resources are merged, code is notAndroid 库:资源合并,代码不合并
【发布时间】:2010-06-18 21:19:41
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你用ant试过这个吗?如果是这样,并且它确实可以编译,则可能是 Eclipse 项目设置问题,在这种情况下,如果您可以发布有关设置的更多详细信息会有所帮助。
  • 据我了解,为 Android 项目正确设置 ant 需要一段时间。这不是简单的 Java,还有资源、签名等。现在,我想坚持 Eclipse 自己的构建系统。

标签: android eclipse android-2.2-froyo


【解决方案1】:

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

毕竟没有魔法。

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

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

EDIT3:在最新的 Android 工具下,库不再作为链接源实现。请忽略这个答案;这在当时是真实且相关的,但现在并非如此。

【讨论】:

    【解决方案2】:

    我有这个设置,但在“图书馆”项目中没有资源。我的主要项目是一个 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>
    

    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>
    

    我不记得在设置时做过什么特别的事情。

    【讨论】:

    • 对不起,这与我的情况无关。我希望资源和代码合并。
    • 是否有地方表明这应该有效?在 Eclipse 中,我只看到对 Android 项目的引用,这似乎是一个成熟的项目,而不是一个库。如果您有指向提及/执行此操作的页面或项目的链接,它可能有助于我们进行故障排除。
    • 这里:developer.android.com/intl/de/guide/developing/… 我的 ADT 显然已经够新了;我可以设置“是库”复选框并建立依赖关系。 Eclipse Ganymede,以防万一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多