Подтвердить что ты не робот

Gradle исключить R.java в Android Javadocs, когда внутренние классы зависят от R.java

Я создаю JavaDoc для API, в котором классы API зависят от R.java. Я хочу создать ошибки Javadoc w/o, ссылающиеся на отсутствующий файл R.java, так как даже когда я установил failOnError false, сборка завершается успешно, но наше задание Jenkins сообщит о сборке как "Сбой", когда ошибки происходят в успешных сборках. Задача, приведенная ниже, будет успешно создавать javadocs, но будет сообщать о ошибках во время сборки, связанных с не обнаружением R.java.

android.libraryVariants.all { variant ->
def name = variant.name.capitalize()

task("generate${name}Doclava", type: Javadoc) {

    description "Generates Javadoc for $variant.name."
    source = variant.javaCompile.source
    title = null
    // use android.bootClasspath instead of building our own path to android jar
    //ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
    // hardcoded path to generated R.java file to avoid javadoc compile issues
    ext.R = "build/generated/source/r/minSDK15/release"
    classpath += project.files(android.sourceSets.main.java.srcDirs, variant.javaCompile.classpath.files, android.bootClasspath)
    destinationDir = file("${project.docsDir}/${name}/doclava")
    options {
        docletpath = configurations.jaxDoclet.files.asType(List)
        doclet "com.google.doclava.Doclava"
        bootClasspath new File(System.getenv('JAVA_HOME') + "/jre/lib/rt.jar")
        addStringOption "XDignore.symbol.file", "-quiet"
        addStringOption "hdf project.name", "${project.name}"
        addStringOption "federate android", "http://d.android.com/reference"
        addStringOption "federationxml android", "http://doclava.googlecode.com/svn/static/api/android-10.xml"
        addStringOption "federate JDK", "http://download.oracle.com/javase/6/docs/api/index.html?"
        addStringOption "federationxml JDK", "http://doclava.googlecode.com/svn/static/api/openjdk-6.xml"
        addStringOption "templatedir", "${project.docsDir}/${name}/doclava/templates"
        addStringOption "apixml", "${project.docsDir}/${name}/doclava/api-${project.version}.xml"
        addStringOption "since doclava/since/api-1.0.0.xml", "1.0.0"
        addStringOption "apiversion", "${project.version}"
        failOnError false
    }
    // exclude generated files
    exclude '**/BuildConfig.java'
    exclude '**/R.java'
    // exclude internal packages
    exclude '**/internal/**'
    options.addStringOption "apixml", "${project.docsDir}/${name}/doclava/api-${project.version}.xml"
  }
}

Некоторые вещи, которые я пробовал:

  • Hardcode путь к сгенерированному файлу R.java и добавление к пути к классам.

classpath += project.files(android.sourceSets.main.java.srcDirs, variant.javaCompile.classpath.files, android.bootClasspath, ext.R)

Это успешно удаляет ошибки, поэтому сборка завершается успешно, но в результате javadoc имеет пустые ссылки на класс R. *. в javadoc.

  • Удалите строку exclude '**/R.java' из списка исключений и не включите путь к R.java в пути к классам.

Это успешно удаляет ошибки, и сборка завершается успешно, но в результате javadoc имеет ссылки на файлы типа R. *. class.

Кажется, оператор exclude исключается из класса, а не javadoc. Любое понимание того, как генерировать javadoc, где классы зависят от R.java, но не включает R.java в выход javadoc, будет глубоко оценено.

4b9b3361

Ответ 1

В Android Studio перейдите к следующим настройкам (доступ к настройкам можно получить через File > Settings):

Внешний вид и поведение > Области

Вы должны иметь возможность просматривать ваши файлы проектов здесь. Теперь выберите свои файлы и используйте кнопки в правом углу, чтобы включить/исключить их в свою область (вы можете исключить или не включать файлы R.java и BuildConfig.java). Удостоверьтесь, что флажок внизу "Share scope" отмечен галочкой, а ваша область имеет запоминающееся имя.

Далее перейдите в диалог генератора Javadoc (Tools > Generate Javadoc). Выберите нижний переключатель ( "Пользовательский масштаб" ), а затем в меню выберите область, созданную ранее. Существуют другие настройки, которые вы можете настроить для своих Javadocs.

Наконец, нажмите "ОК", и вы должны были создать Javadocs.

Надеюсь, это должно решить вашу проблему.