当前位置: 首页 > 知识库问答 >
问题:

gradle库中模糊的接口参数名

夹谷沛
2023-03-14

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

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

     }
});

其中“i”是“原因”,“i1”是“currentWindowIndex”。为什么在其他项目中更改了它以及如何修复它?Proguard 已禁用。

共有3个答案

虞展
2023-03-14

发生这种情况的原因有两个:

1.您没有将任何留档作为工件包含在您的AAR

如果是这种情况,则需要在AAR的<code>构建中添加以下任务。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下载< code>javaDoc。将以下代码放入目标应用程序的主< code>build.gradle

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

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

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

云昊阳
2023-03-14

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
}
方通
2023-03-14

我认为这是因为在Maven repo上只存在一个Android归档库(AAR ),而没有源代码jar。AAR只包含编译过的类,在编译过的类中,完整的变量名不再为人所知。因此,当您的IDE实现该方法时,它不再知道名称,所以它默认为基于参数类型的标准命名(因此I代表整数)。

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

 类似资料:
  • 在我简单的gradle构建中,我想使用暗影罐和ProGuard一起。我发现了一些例子,其中shadowJar任务的输出是proguard任务的输入,这很好地工作,但是在我的例子中,我希望首先创建一个小的模糊jar,首先我很好地指定库依赖关系,让proguard只关注我的代码,然后我想把它传递给shadowJar插件进行fatjar打包。 我的问题是shadowJar输出包含所有未混淆的库(fine

  • 问题内容: 我以mysql映像为例,但是问题很普遍。 用于在docker中启动mysqld的密码在docker ps中不可见,但在docker inspect中可见: 有没有一种方法可以隐藏/混淆启动容器时传递的环境参数。或者,是否可以通过引用文件来传递敏感参数? 问题答案: 从文档http://docs.docker.com/reference/commandline/run/中 提取出来,您说

  • 问题内容: 我有两组数据。现有客户和潜在客户。 我的主要目标是弄清楚是否有任何潜在客户已经是现有客户。但是,跨数据集的客户命名约定不一致。 现有客户 潜在客户 我想写一些如下所示的选择语句来达到我的目标: 结果如下所示: 我对Levenshtein距离和Double Metaphone的概念含糊其词,但我不确定如何在此处应用它。 理想情况下,我希望SELECT语句的JOIN部分读取类似以下内容:但

  • 问题内容: 我几天前接受采访时,被问到这样的问题。 问:反向链接列表。给出以下代码: 我很困惑,因为我不知道接口对象可以用作方法参数。面试官解释了一下,但我仍然不确定。有人可以启发我吗? 问题答案: 实际上,这是使用接口的最常见和最有用的方法之一。该接口定义了一个契约,您的代码可以与实现该接口的任何类一起使用,而无需了解具体的类- 它甚至可以与编写代码时尚不存在的类一起使用。 Java标准API中

  • 可以使用model('ModelName')->get($id)和model('ModelName')->all来生成数据的ORM封装对象。 $content = $model->get(1); //这里返回的是一个Record对象 $content->title = 'hello world'; //Update操作 $content->save(); //

  • 如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数),例如strcpy的函数原型为 char *strcpy(char *dest, const char *src); 其中src参数是传入参数,dest参数是传出参数。有些函数的指针参数同时担当了这两种角色,如select函数。其函数原型为: int