代码之家  ›  专栏  ›  技术社区  ›  Seva Alekseyev

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

  •  5
  • Seva Alekseyev  · 技术社区  · 14 年前

    我正在尝试在Eclipse中建立一个依赖于Android库项目的Android应用程序。我建立了一个名为antest的项目和一个名为anlib的图书馆项目。我已经在Antest的项目属性中提供了一个参考。现在我试图引用Antest中的一些库代码(静态公共方法)。Eclipse抛出“com.anlib.hello无法解析为类型”。

    这并不是说引用悬而未决——我可以看到资源被正确地合并了。但在antest中,包com.anlib中唯一的类是“r”。

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

    编辑:我在ANTEST项目属性中添加了ANILB到Java构建路径/项目。现在它编译,但是运行会引发一个noclassDefoundError异常…

    2 回复  |  直到 12 年前
        1
  •  5
  •   Seva Alekseyev    12 年前

    在仔细查看了示例项目(tictactoe)之后,我注意到在classpath下有一些东西。它是一个链接到库源的文件夹。App,Java构建路径的项目属性,在“源”点击“链接源”下,提供一个到库\ SRC的路径。

    毕竟没有魔法。

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

    edit2:本地库的行为似乎取决于adt和/或eclipse的版本。此外,资产也不会合并,但后一位实际上是文档化的。

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

        2
  •  0
  •   mbafford    14 年前

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

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