在Eclipse中,如何从使用它的项目源中快速访问“android库项目”的源?

Posted

技术标签:

【中文标题】在Eclipse中,如何从使用它的项目源中快速访问“android库项目”的源?【英文标题】:In Eclipse, how can I quickly access the source of an "android library project" from the source of a project that uses it? 【发布时间】:2011-12-15 08:39:28 【问题描述】: 项目 A 是我工作区中的一个 android 库项目(通过项目属性->android->library:is library)。 项目 A 声明类 A。 项目 B 使用项目 A(通过项目属性->android->库:添加...)。 项目 B 实例化类 A。

当我在项目 B 中的 classA 实例上使用 F3 ("open declaration") 时,它将我带到 A.jar 中的 classA.class,即包含在 B 中,从 A 构建。

有没有办法直接进入项目 A 中的源 classA.java 而不是在包资源管理器中查找?

我认为这是 ADT14 的新功能,以前每个包含的库项目都有 X_src 文件夹:例如A_src 将作为项目根目录中的源文件夹出现在 B 中。

【问题讨论】:

项目 A 的 Eclipse 中是否定义了 A.jar 的源?如果是这样,我认为 B 也应该能够利用它。 我能做的最好的事情,虽然它的工作有些不一致,是查看包含在库 jar 文件中的源代码,但这与原始文件不同.java 源代码。我已经尝试弄乱设置以使其正常工作,但我还没有找到一种方法,而且更常见的是,甚至没有破坏在库 jar 中查找源代码,这使得调试变得不可能。如果 Android 尝试在 eclipse 中做更少的“魔术”并且只是在库创建上强制执行更多步骤,它可能会更好地工作。 经过进一步思考,这可能是 ADT 如何构建和包含库的问题。似乎将库构建为包含 src 的 jar。最重要的是,在使用库 ADT 的项目中,使用内部机制来包含防止覆盖 src 位置的 jar(尝试更改它只会重置)。如果一个人正在构建一个没有资源的库,则可以像普通库一样只包含 jar,但这有点违背了目的。修复此问题可能需要针对 ADT 的错误,但我希望不会。 【参考方案1】:

右键点击非库项目(Project B)并选择Build Path

Projects 选项卡中,添加库项目 Project A 作为依赖项。 在 Order and Exports 选项卡中,确保 Project A 的优先级高于占位符/bundle Library Projects

对于 ADT15、Eclipse 3.7 和新项目,我必须执行这两个步骤才能解决此问题。

【讨论】:

恐怕我有您显示的确切配置,并且已经执行了参考中显示的步骤。但行为是我解释的。即使使用新的 ADT15。你用的是什么ADT?可以直接导航到源吗? 这行得通,构建路径中的这两个步骤都是解决开放声明问题所必需的。我没有机会进行调试,但我认为它也会导致 .java 文件在断点处持续打开。这确实意味着它正在有效地针对 jar 和库源进行构建。我无法验证它是否对库项目中的任何资源有影响(android 构建过程中的主要复杂点),但我认为不会。 检查过并且......它有效!我不明白为什么 ADT 不自动执行此操作...如果有人知道如何向 Google 建议此功能以进行下一次具有一定效果的 ADT 升级,请告诉我们,我们可以尝试向他们施压以包含此功能!顺便说一句,我将此设置为正确答案! 当我这样做时,我的调用层次结构包含重复的所有调用方法。有没有办法解决这个问题? @MarkCarter 在调用层次结构视图中,单击右下三角,选择“搜索范围”,然后取消选择“应用程序库”。

以上是关于在Eclipse中,如何从使用它的项目源中快速访问“android库项目”的源?的主要内容,如果未能解决你的问题,请参考以下文章

将单元添加到项目正在从项目源中删除编译器指令

如何在代码中使用eclipse项目变量

在保存文件时,如何让 eclipse m2e 构建当前项目和引用它的 EAR 项目?

linq - 您如何查询一个查询源中不在另一个查询源中的项目?

如果我在项目的构建阶段从编译源中删除所有文件会怎样?

自动生成项目时如何在源中排除 FxCop?