gradle库中的模糊接口参数名称

时间:2018-04-28 10:03:58

标签: android gradle android-gradle

我创建了一个带有一些接口的库(github上的HybridMediaPlayer)。当我在新项目中从gradle导入它并使用这些接口时,我会更改参数名称,例如:

player.setOnPositionDiscontinuityListener(new ExoMediaPlayer.OnPositionDiscontinuityListener() {
     @Override
     public void onPositionDiscontinuity(int i, int i1) {

     }
});

“i”是“reason”,“i1”是“currentWindowIndex”。 为什么在其他项目中改变它以及如何解决这个问题? Proguard被禁用。

3 个答案:

答案 0 :(得分:2)

我认为这是因为Maven repo仅存在Android存档库(AAR)并且没有源jar。 AAR只包含已编译的类,在编译的类中,不再知道完整的变量名。因此,当您的IDE实现该方法时,它不再知道名称,因此它默认为基于参数类型的标准命名(因此i为整数)。

如果你想要正确的变量名,你应该将你的项目的源jar发布到Jitpack repo。 This回答可能提供了一种在AAR旁边发布源jar的方法。当还发布了源jar时,IDE将使用Gradle将源jar拉入项目,并在实现获取参数名称等方法时使用它。

答案 1 :(得分:1)

出现这种情况有两个原因:

<强> 1。您尚未在AAR

中添加任何文档作为工件

如果是这种情况,那么您需要在AAR的build.gradle中添加以下任务,如下所示:

task javadoc(type: Javadoc) {

    description "Generates Javadoc for ${archivesBaseName}-${version} API"
    group JavaBasePlugin.DOCUMENTATION_GROUP

    title = "${archivesBaseName}-${version} API References"

    source android.sourceSets.main.java.srcDirs, configurations.doc.collect { zipTree(it) }
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))

    options {
        memberLevel = JavadocMemberLevel.PUBLIC
        linksOffline('http://developer.android.com/reference/', "${android.sdkDirectory}/docs/reference");
    }

    include '<path of your public api>/*.java'
    exclude '**/BuildConfig.java'
    exclude '**/R.java' 
    exclude '**/test/**/*.java'

    failOnError false
}

task androidJavadocsJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives androidJavadocsJar
}

<强> 2。您已完成第1步

如果是这种情况,您需要通知android studio下载javaDoc。将以下代码放在目标应用的主build.gradle

apply plugin: 'idea'
...
idea {
    module {
        downloadJavadoc = true
        downloadSources = true
    }
}

或者,您可以按照此SO通过android studio进行操作。

注意:您需要在AAR的用户指南中正确记录Javadoc下载,以便AAR的用户知道如何克服障碍

答案 2 :(得分:0)

jitpack的解决方案是为接口添加javadoc,这在lib gradle构建文件中:

// build a jar with source files
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    failOnError  false
    source = android.sourceSets.main.java.sourceFiles
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    classpath += configurations.compile
}

// build a jar with javadoc
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives sourcesJar
    archives javadocJar
}