首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android :找不到符号

Android :找不到符号
EN

Stack Overflow用户
提问于 2016-01-02 22:28:30
回答 3查看 10.1K关注 0票数 13

我正在准备我的Android库并将其上传到Bintray,该过程的一部分运行了以下javadoc任务:

代码语言:javascript
运行
复制
task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

此任务是此处更大的gradle脚本的一部分:https://raw.githubusercontent.com/attwellBrian/JCenter/master/bintrayv1.gradle

javadoc任务运行时,会出现以下问题:

  1. 项目中的每个@NonNull和@Nullable注释都报告了一个错误:" error :无法找到符号“。
  2. 我为Android类编写的每个Javadoc引用,比如{@link },都报告了一个错误:" error : reference“

在生成Javadocs时,如何纠正这些引用问题?

编辑看起来并不是所有的Android类链接都会产生问题,可能只是来自Android库的类(这也是注释的来源)。是否需要做一些特殊的工作来链接到gradle依赖项中的源文件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-03 01:54:14

还应该将所有依赖项添加到javadoc.classpath中。试试这个:

代码语言:javascript
运行
复制
task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

afterEvaluate {
    javadoc.classpath += files(android.libraryVariants.collect { variant ->
        variant.javaCompileProvider.get().classpath.files
    })
}
票数 31
EN

Stack Overflow用户

发布于 2017-11-19 01:05:13

因此,这些错误意味着JavaDoc无法链接不在同一个模块中的类(没有进一步的配置)。如果你不关心这个的话。拥有指向模块外类的超链接),您可以忽略以下错误

代码语言:javascript
运行
复制
task javadoc(type: Javadoc) {
    failOnError false
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

有关Javadoc任务的更多信息,请参见此处

票数 0
EN

Stack Overflow用户

发布于 2022-11-03 22:17:17

我也遇到了同样的问题(不仅是android类,还有androidx类),我无法得到"Patrick“的建议。我在构建脚本时使用kts而不是Groovy,我在将Groovy转换为KTS构建脚本时遇到了问题。我永远无法让javadoc使用android "Tools/Generate“。为了解决这个问题,我所做的就是将我自己的Javadoc任务添加到我的build.gradle.kts脚本文件中。当然,问题是javadoc缺少了一些android类的类路径依赖项。这是爱国者的解决方案想要解决的问题。在我的例子中,我的构建脚本有点不合常规。它们通常不包括一个android块。它们是通过包含一些自定义插件来动态构建的。这可能是Patricks解决方案不适合我的原因;"android“还没有定义。我还有其他一些需求,因为我只想为我的项目中的16个模块中的4个生成Javadoc (这4个模块是我公开的公共API )。这也是我添加自己的javadoc任务的另一个原因。我也不认为Patrick的解决方案解决了androidx类的问题。现在我将解释我的自定义javadoc任务是如何工作的:

我只将定制的javadoc任务添加到根项目模块中。下面是依赖块的样子:

代码语言:javascript
运行
复制
val javadocDeps = configurations.create("javadocDeps")

dependencies {
implementation (libs.androidx.appcompat)
implementation (libs.androidx.fragment)
implementation (libs.androidx.navigation.fragment)
implementation (libs.androidx.navigation.ui)
implementation (libs.androidx.constraintlayout)
implementation(libs.androidx.drawerlayout)
implementation (project(":CoreInterfaces"))
implementation (project(":CoreInternalInterfaces"))
implementation (project(":CoreAndroidInterfaces"))
implementation (project(":CoreAndroidInternalInterfaces"))
implementation (project(":OsgiFrameworkConfiguration"))
implementation (project(":Log"))
implementation (project(":CryptoImpl"))
implementation (project(":SystemProperties"))
implementation (project(":CommunicationImpl"))
implementation (project(":CommunicationAndroidImpl"))
implementation (project(":Executor"))
implementation(project(":OsgiFramework"))
implementation(project(":OsgiInterface"))
implementation(project(":OsgiWrapper"))
implementation(project(":InstallPlanImpl_1_0_0"))
implementation (project(":InstallPlanInterfaces_1_0_0"))
javadocDeps(project(":OsgiFramework"))
javadocDeps (libs.androidx.appcompat)
javadocDeps (libs.androidx.fragment)
javadocDeps (libs.androidx.navigation.fragment)
javadocDeps (libs.androidx.navigation.ui)
javadocDeps (libs.androidx.constraintlayout)
javadocDeps (libs.androidx.drawerlayout)
}

注意,我创建了一个名为"javadocDeps“的配置。

下面是我的定制javadoc任务的定义:

代码语言:javascript
运行
复制
    tasks {
    register<Javadoc>("createCoreJavadoc") {
        setFailOnError(true)
        val docDir: File = File(project.projectDir.parentFile.parentFile, "Doc/Core")
        println("javadoc destination dir: " + docDir.absolutePath)
        setDestinationDir(docDir)
        var sourcepaths: FileCollection = project(":CoreInterfaces").files("src/main/java")
        sourcepaths =
            sourcepaths.plus(project(":CoreInternalInterfaces").files("src/main/java"))
        sourcepaths = sourcepaths.plus(project(":CoreAndroidInterfaces").files("src/main/java"))
        sourcepaths =
            sourcepaths.plus(project(":CoreAndroidInternalInterfaces").files("src/main/java"))
        sourcepaths = sourcepaths.plus(project(":OsgiInterface").files("src/main/java"))
        sourcepaths =
            sourcepaths.plus(project(":InstallPlanInterfaces_1_0_0").files("src/main/java"))
        setSource(sourcepaths.asFileTree)
        options.overview = "src/main/java/Overview.html"
        android.bootClasspath.forEach{
            classpath += fileTree(it)
        }
        val tmpDir:File = File(project.buildDir, "\\tmpAar\\")
        if (tmpDir.exists()) tmpDir.delete()
        tmpDir.mkdirs()
        javadocDeps.forEach {
            val zipFileSystem: com.phinneyridge.ZipFileSystem = ZipFileSystem(it.absolutePath,null)
            if (it.name.endsWith(".aar")) {
                val tmpFile:File = File(tmpDir, it.name.replace(".aar", ".jar"))
                zipFileSystem.extractEntry("classes.jar", tmpFile)
            } else {
                classpath += fileTree(it)
            }
        }
        classpath += fileTree(tmpDir)
        //classpath += depCollection
        //classpath += javadocDeps
        println("classpath: " + classpath.asPath)

    }
}

所以你可以看到,1.)我定义了我想为之生成javadoc的模块的源路径,以及2)。添加缺少的android引导类。下一部分可能有点让人困惑。我创建了一个临时目录,并遍历了一组JavaDoc依赖项。如果依赖项是jar文件,我只是将其添加到任务类路径中。如果是aar文件,我从aar文件中提取classes.jar文件,给它一个唯一的名称,并将该文件添加到临时目录中。当这些完成后,我将临时目录添加到类路径中。

这对我有用,我不再得到未定义的android类和androidx类。注意,我必须特别处理aar文件。javadoc任务不知道如何直接处理aar文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34571371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档