Android Studio:如何附加javadoc

63

可能是非常琐碎的问题,但我找不到任何选项来附加本地jar依赖项(位于libs文件夹中)的javadoc/source到Android项目中。我无法相信我已经在处理这么简单的事情上花费了一小时:(

谷歌搜索结果只是告诉如何添加安卓文档或在eclipse中添加javadoc。那不是我正在寻找的!

10个回答

39

我刚刚找到了一个解决方案,因为我长时间找不到其他的解决方案。

假设:

  1. 你的库名称是:libxxx.jar
  2. javadoc 名称是 docs.zip

在文件夹 .idea/libraries 下,你可以找到 libxxx.xml 文件。将 JAVADOC 替换为

<JAVADOC>
  <root url="jar://C:/yourpath/doc.zip!/" />
</JAVADOC>

然后按下ctrl+alt+y同步项目。(不要选择“Sync Project with Gradle files”,否则会删除更改)


3
+1 是因为它有效,但无法与Gradle文件同步远非完美。 - cprcrack
1
+1(根据上面的评论)因为它有效 -1 因为这是一个hack :) 谷歌让我感到沮丧,而且这不是第一次。 - Toochka
+1,这对我很有用。我导出了一个带有资源(源代码、javadoc)的.jar文件,并只需添加相同的片段来处理_CLASSES_、_JAVADOC_和_SOURCES_:<root url="jar://$PROJECT_DIR$/app/libs/LibraryName.jar!/" /> - bobasti

38
我已经找到并测试了一种方法,可以在 gradle 同步后不丢失 javadocs 的情况下添加它们。
  1. 项目面板中右键单击 > 外部库 > lib-name
  2. 点击库属性 Lib props
  3. 点击指定文档URL
  4. 然后指定一个URL。对于我的机器,它是 file:///opt/android-sdk/extras/google/google_play_services/docs/reference Add doc url
  5. 结果是:added jdoc
  6. 在项目同步之后,我可以浏览Google Play服务的javadoc google play services maps javadoc

注意:

这将在由Jason标识的xml中放置相同的JAVADOC条目,但在使用gradle进行同步后不会消失。


这是问题的最佳答案。 - Radu Cugut
2
这仅适用于已附加Maven库的情况。 - JensV
1
@JensV 请参考 Robyer 的回答,了解如何在本地使用此 .jar 文件。 - tir38

17

可以这样操作:

  1. 打开 项目结构
  2. 导航到所需的依赖项
  3. 点击截图中的按钮,并提供文件或文件夹

截图1

另一种附加源代码的方法:

  1. 进入库中的类(将鼠标悬停在类名上,然后执行CMD +左键单击或CMD + B)
  2. 您将在那里看到反编译版本的类,在编辑器的右上角菜单中选择“附加源代码..”

截图2


10
当我打开项目结构并选择Android SDK时,我看到完全不同的视图,并且没有任何添加任何东西的可能性。 - AdamVe
7
此回答在Android Studio 0.4.5中无效。 - Evan Leis
1
@EvanLeis 你仍然可以使用第二种方法在Android Studio 0.4.5中添加资源。 - Imanol
5
编辑提出的解决方案在附加Javadoc时无效。 - Moritz
3
0.6版本有没有将Javadoc文件夹附加到项目的解决方案?这真的很烦人。 - AndroidGecko
显示剩余6条评论

14

我的问题是我在“外部库”列表中没有看到本地的 .jar 库,因为它只显示了Maven附加的库,需要解决。

解决方法在这里提到:https://code.google.com/p/android/issues/detail?id=73087#c26

  1. 右键单击“Structure”选项卡并检查“Split Mode”(这样你就可以同时打开“Project”和“Structure”选项卡)。
  2. 同时打开“Project”和“Structure”选项卡。
  3. 在“Project”选项卡中选择“Android”透视图,然后选择您的模块文件夹(例如“app”)
  4. 在“Structure”窗口中,现在您应该看到所有库的列表,包括您的本地 * .jar 文件。

按照Matyas的答案继续:

  1. 右键单击所需的库并选择“库属性...”。
  2. 如果您本地有带有 javadocs 的 *.jar,则可以按“添加”按钮(绿色“+”)并搜索磁盘上的文件(您不必手动输入“file://”路径)。

已验证此解决方案适用于Android Studio 3.0.1。 - beyeriii
我发现同时使用“项目”和“结构”选项卡的提示非常有用。不仅可以为本地库添加javadoc,而且因为“结构”显示模块依赖关系,我们的项目有二十多个模块。 - demaksee
我有一个包含.jar文件的javadocs的zip文件,但是Android Studio 4.1没有显示任何类/方法的文档。是否有什么变化? - DarkNeuron
@DarkNeuron 试着将ZIP文件解压到某个地方并链接到该文件夹,或者使用JAR文件代替ZIP文件来获取文档,因为我刚刚发现了这篇旧帖子:https://intellij-support.jetbrains.com/hc/en-us/community/posts/206824245-Java-8-JRE-javadoc-for-offline(也许与此无关,但值得一试)。 - Robyer
@Robyer 谢谢,我已经尝试过了;可惜没有起作用。 :( 或许 Android Studio 在这种情况下只是有些问题。 - DarkNeuron

2

1

该链接项目已被弃用,因为此功能已内置于Android Studio 1.4+中。 - user1531971

1

我也在这上面浪费了很多时间...

下面是一个Gradle任务,它通过位置/命名约定查找源代码和Javadoc,并在同步时将它们注册到.idea文件中。它属于根Gradle文件的allProjects部分。原样情况下,它期望在[projectname]/libs/lib.jar旁边找到lib-sources.jar和/或lib-javadoc.jar。此外,如注释所述,如果您的Javadoc未在jar文件内的“/”路径下,则可能需要更改脚本以在"jar://$doc!/"的末尾添加“docs / html”(例如)。

allprojects {

    task addJavaDoc {
        afterEvaluate {
            // Specify paths, this will be run per non-root project
            def projectDir = project.getProjectDir().getCanonicalPath()
            def rootDir = project.getRootDir().getCanonicalPath()
            def lib = projectDir + '/libs'

            // println lib // Uncomment this to troubleshoot
            // Get any jar dependencies register in the lib folder
            fileTree(include: ['*.jar'], exclude: ['*-source.jar', '*-javadoc.jar'], dir: lib ).each { File jar ->
                def jarName = jar.getName()
                def moduleName = jarName.substring(0, jarName.lastIndexOf("."))
                // IntelliJ does this to file names when making the xml files
                def escapedName = moduleName.replace("-", "_").replace(".", "_")
                def xmlFile = "$rootDir/.idea/libraries/${escapedName}.xml"
                // println xmlFile // Uncomment this to troubleshoot
                if (new File(xmlFile).exists()) {
                    ['javadoc', 'sources'].each {String docType ->
                        // Get sources or java doc by naming convention, (expects name-sources or name-javadoc
                        def doc = "$lib/$moduleName-${docType}.jar"
                        // println doc // Uncomment this to troubleshoot
                        if(new File(doc).exists()) {
                            def xml = new XmlParser().parse(xmlFile);
                            def xmlTag = docType.toUpperCase()
                            // Perform xml replacement by convention
                            xml.library[xmlTag].replaceNode {
                                "$xmlTag" {
                                    root(url: "jar://$doc!/")
                                }
                            }
                            // Write out changes
                            new XmlNodePrinter(new PrintWriter(new FileWriter(xmlFile))).print(xml)
                            // Notify that changes worked
                            println "Fixed up reference to $doc"
                        }
                    }
                }
            }
        }
    }
}

此外,如果您正在使用jcenter或mavencentral,则下载的jar包应该可以使用javadocs和源码而无需使用该任务,但您可能需要在每个非根gradle文件中添加以下内容:
apply plugin: 'idea'

idea{
    module {
        downloadJavadoc = true
        downloadSources = true
    } 
}

0

个人测试成功!

1.项目结构(ctrl+alt+shift+s)

2.SDK位置

3.JDK位置

4.取消勾选“使用嵌入式JDK(推荐)”

5.选择您自己的jdk路径(我的路径:C:\Program Files\Java\jdk1.8.0_111)

6.Synchronized(ctrl+alt+y)

成功


这可能会为JavaSE启用javadoc(如果JDK附带javadoc/source),但不适用于Android SDK。 - ccpizza

-1

有一个解决方案,这个过程是通过终端进行的,

我已经在MAC OS上测试了解决方案。

1)移动到您的项目文件夹

2)ls -al(显示隐藏文件)

3)移动到.idea文件夹,命令:cd .idea

4)移动到libraries文件夹,命令:cd libraries/

5)现在您可以看到所有库或jar的xml文件列表。像这样编辑它:vi open androidasync_2_1_7.xml

6)在编辑器屏幕中,插入以下内容

Press i 

现在你看到了<SOURCES />标签,我们必须在这里提供一个路径,比如,
<SOURCES>
  <root url="file://$PROJECT_DIR$/androidasync/src/main/java" />
</SOURCES>

退出

Press Esc

    :wq //for exiting and saving
    :q! //for exiting without saving

7) 重新启动Android Studio(有时还需要同步Gradle)。


-1

在Android Studio中,如果您在build.gradle中使用compileSdkVersion 23并且已经下载了SDK 23文档文件和源文件,在SDK管理器中,Android API和Java API的文档和源文件将自动显示,您无需手动设置。


这仅适用于Android平台,这个问题是关于其他库的。 - nasch

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