如何将源代码附加到android.jar

73

我对安卓开发不熟悉。我使用Eclipse IDE在Windows操作系统上工作。我的简单应用程序有一个下拉列表,从数据库列中填充列表。当我点击下拉列表的类时,编辑器显示源代码未找到,且android.jar没有源代码附件。

我下载了源代码并将其放置在以下位置:

android-sdk-windows\platforms\android-8

然后,我通过以下步骤附加了此源代码:

右键单击项目 => 构建路径=> 配置构建路径=> 库 => 源代码附件 => 提供已下载源代码的路径。

但是,我没有解决我的调试问题。再次点击下拉列表时,它会打开调试,指出android.jar没有源代码附件。

7个回答

90

现在非常容易了!

前往窗口-> Android SDK 管理器并安装“Android SDK源代码”。

现在尝试控制点击一些Android标识符,你将得到通常的“未附加源”的页面。单击“附加源”并获取选择外部文件夹的选项。

现在浏览到 /home/me/android-sdks/sources/android-16(或者您的SDK所安装的任何位置;这是默认值),然后单击确定。

它会稍稍想一下,然后显示源代码!太好了!


这只包括了API 14-16,对我来说是首选的方式,谢谢! - Cdr. Powell
2
直到API 14,他们在SDK管理器中没有添加任何“Android SDK源代码”。此后的每个版本都迄今包括了该选项。大多数开发人员应该能够增加他们所针对的API(而不是minSDK)并在Eclipse中使用最新的API源代码。 - Austyn Mahoney
2
如果这个方法不起作用,可以看看 fsbmain 的答案,那个最终对我有用。 - crobicha
2
这对我没用:附加源代码对话框期望找到一个.zip或.jar文件,并且不允许仅在目录上“点击确定”。这是使用ADT v21,Eclipse Juno。 - Joe
关于Joe的评论:“附加源对话框期望找到.zip或.jar文件,并且不允许仅在目录上点击“确定”。”...实际上,您可以通过单击路径字段右侧的“外部文件夹”按钮来解决这个问题。默认情况下,外部位置路径设置为EXTERNAL FILE。(在SOURCE ATTACHMENT CONFIGURATION窗口内)。 - Sandi Laufenberg-Deku
继续我上面的评论:不幸的是,那对我没有解决问题,但刚开始似乎可以,因为它接受了文件夹选择。读取此页面上的所有其他评论,尽管我还没有尝试过所有方法,但似乎共识是“android.jar”应该在SOURCES/ANDROID-XX文件夹中。它不在那里,我已经安装了针对我的目标版本和SDK中可用的每个其他可能版本的所有源文件(通过SDK管理器)。所以仍在寻找解决方案。 - Sandi Laufenberg-Deku

85

如果您不需要旧版API源,则使用Timmmm的答案可能更好。 如果您确实需要早于14的源代码,请继续阅读...

在Eclipse中,只需转到

帮助 -> 安装新软件

然后添加更新网站

http://adt-addons.googlecode.com/svn/trunk/source/com.android.ide.eclipse.source.update/

并按照提示进行安装。

这将为所有已安装的API版本提供源,并且对我来说非常有效。 此处提供了一些更多文档

http://code.google.com/p/adt-addons/

查找标题Android Sources


1
thomanski的回答中提到的方法是我唯一的选择。我使用的是Windows XP和Eclipse 3.7。很抱歉只能将此作为答案发布,因为我还不能发表评论。 - Hoang Tran
@CarlManaster 不,没有更多的事情要做了。如果您已经添加了更新站点并重新启动了Eclipse,则应该可以访问源代码。正如Dean所指出的那样,并非所有版本的源代码都包含在内。您可能正在使用蜂巢版本吗? - thomanski
1
非常好。不幸的是,似乎没有办法只选择某些Android版本,您必须下载所有版本的源代码。 - Roland
1
在我身上也起作用了。我也希望我可以选择特定的Android版本。 - Cliff
1
SDK管理器现在具有下载Android源代码的选项。不幸的是,在安装后似乎没有任何效果。等等,我弄清楚了,详见下面的答案。 - Timmmm
显示剩余2条评论

14
如果将文件夹android-sdks/sources/android-17添加为外部源无法生效(就像我的情况一样),您可以尝试创建文件夹android-sdks/platforms/android-17/sources/android-17并将源代码复制到其中,然后重新启动Eclipse(我使用的是Eclipse Juno Service Release 1)。只有这种方法对我有效。
实现android-17的步骤如下:
  1. 前往adroid-sdk安装文件夹,例如我的是d:\ws\android-sdks\
  2. android-sdks\sources\android-17\中复制android-17源代码文件夹,将其粘贴到android-sdks\platforms\android-17\sources\(您必须在此处手动创建文件夹sources),最终路径应为:android-sdks\platforms\android-17\sources\android-17\
  3. 重新启动Eclipse,它会自动附加android-17的源代码

更新:有关symlinks的相同解决方案:

Windows Vista+(感谢@saleemrashid1在评论中提到的mklink):

1. cd platforms\android-17
2. mklink /D "sources\android-17" "..\..\..\sources\android-17"

对于基于Unix的操作系统(@Joe评论):

创建目录并将“sources/android-XX”符号链接到“../../../sources/android-XX”是有效的。

mkdir platforms/android-19/sources && 
ln -s ../../../sources/android-19 platforms/android-19/sources/android-19. 

也对我有用。我也遇到了类似的问题。非常感谢。 - user1938357
我在我的回答中添加了步骤。 - fsbmain
2
这对我也起作用了。注意:您不必复制(cp -R)源代码,只需创建目录并将“sources/android-XX”符号链接到“../../../sources/android-XX”即可正常工作:mkdir platforms/android-19/sources && ln -s ../../../sources/android-19 platforms/android-19/sources/android-19。当然,这假定您所在的平台和文件系统支持符号链接(Mac OS X 和 Linux -- Windows 不支持)。 - Joe
1
mklink.exe 是 Windows Vista 及更高版本的类似于 ln 命令。 - user1974640
1
@Joe和saleemrashid1,感谢你们的建议,我已经将它们包含在答案中。 - fsbmain
显示剩余3条评论

13

你真的会为一个明显错误的答案请求点赞吗? - Michael Mrozek
@MichaelMrozek,谢谢你的负评,我只是想给其他人提供另一个选择。已按照你的意愿删除,希望能让你满意。 - thanhbinh84
@MichaelMrozek“无法删除已接受的答案”,已删除“乞讨”句子。 - thanhbinh84
2
@doreamon 我知道,我简直不敢相信我是多么的混蛋,给一个完全错误的答案投了反对票。我希望你对我的一堆正确回答进行负面评价让你感觉好些了。 - Michael Mrozek
上面答案中的第一个链接已经不存在了。显示“404.文件未找到”。 - Sandi Laufenberg-Deku
显示剩余2条评论

1
我的解决方法来自于Murach的Android编程书中提供的答案。我在尝试调试时卡住了,花了大约3个小时试图解决问题,最后翻到下一页(真的)上面写着“有时Eclipse会显示源代码未找到的消息,因为......”(-头撞桌-)
我的解决方案是打开步骤过滤器,并添加我想要跳过调试的包。显然,有时候Eclipse会遍历所有源代码库,而你只想遍历你的代码。你可以通过将要跳过的包添加到过滤器中来绕过这个问题。根据Murach的说法,你需要通过试错来进行操作,首先选择所有包并将它们添加到过滤器中。随着你继续调试,你可能会发现需要添加更多的包到过滤器中。
具体步骤: 1. 打开步骤过滤器;点击顶部工具栏上看起来像这样的按钮:http://i57.tinypic.com/x3iccp.png 2. 转到“窗口”->“首选项”,然后在“首选项”对话框中,选择“Java”->“调试”->“步骤过滤器” 3. 选择所有包。 4. 要添加其他过滤器,请单击“添加过滤器”,键入包名,并在末尾加上“.*”,然后单击“确定”。Murach建议开始添加这些常见包: - android.* - com.android.* - com.google.* - dalvik.* - libcore.* - org.apache.* 因此,要添加其中一个包,请单击“添加过滤器”,键入“android.*”,然后单击“确定”。我最终在我的步骤过滤器首选项中拥有以下所有包。 android.,android.app.,com.android.,com.google.,com.ibm.,com.sun.,dalvik.,java.,javax.,jrockit.,libcore.,org.apache.,org.omg.,sun.,sunw.*,(最后一个是类,而不是包)java.lang.ClassLoader

我在对话框顶部勾选了“使用步骤过滤器”,并在底部勾选了“逐步执行过滤器”。单击“应用”,然后单击“确定”以关闭对话框。它应该可以工作。

祝你好运!


我发现这很有帮助。我还添加了:--com.paypal.* --com.samsung.android.*,我仍在寻找更多要添加的内容。一旦我添加了Kate使用的所有内容以及上述两个内容,我就可以在进程中更深入地进行,而不会遇到“源未找到”的问题。有趣的是,我只在调试期间遇到这些“源未找到”的问题,而不是在常规运行期间。我的应用程序在执行过程中出现致命异常。因此,我的想法是“源未找到”错误可能不会导致我的致命异常。我可能错了。 - Sandi Laufenberg-Deku

0

我添加了appengine sdk和其他一些源代码,结果毁了我的ADT :-(

我发现对于android-16和android-17,SDK Manager下载的平台库开始放在./sdk/sources,而在我添加appenginge sdk之前,SDK Manager将平台放在./sdk/platforms。

看起来这个变化是由于appengine sdk引起的,但对于ADT,平台API应该放在./sdk/platforms。

路径./sdk/sources似乎是一个更通用的Java位置,可能是“正确”的路径。因此,像往常一样,Android成了问题。从这一点开始,我相当确定我需要同时使用./sdk/sources和./sdk/platforms,具体取决于我正在编译什么。

所以,我把./sdk/sources中的所有内容移动到./sdk/platforms中,删除了./sdk/sources,然后创建了一个链接'cd sdk && ln -s platform sources'

现在一切都正常工作了 ;-)


0

对我来说,唯一有效的解决方案是fsbmain的答案。向他致敬。由于我的声望计数很低,我无法评论他的解决方案。但我想分享我的知识;)

我正在Windows上工作,不想将整个源代码树复制到另一个位置。并在更新时再次复制等等。因此,我使用了插入符号链接的可能性,自Windows Vista以来就像Linux一样运行良好。对于Linux,您必须查看fsbmain答案下的Joe的评论。

假设您的平台位于D:\ sdk \ platforms \ android-19中。现在,您必须创建一个子目录sources,然后创建到实际源文件夹的相对链接。

D:\sdk\platforms\android-19>mkdir sources
D:\sdk\platforms\android-19>cd sources
D:\sdk\platforms\android-19\sources>mklink /D android-19 ..\..\..\sources\android-19

现在重新启动Eclipse...完成!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接