【问题标题】:I'm not able to use top level functions from my custom Kotlin library我无法使用自定义 Kotlin 库中的顶级函数
【发布时间】:2020-05-19 14:01:44
【问题描述】:

我想为 android 创建一个包含一些顶级函数的 kotlin 库。

我已经创建了一个 android 库项目。

我添加了一些顶级函数和一些类

// filename TestMethodFirst.kt
fun testMethodFirst() {}
// filename TestClass.kt
class TestClass() {}

我已经使用 ./gradlew build 构建了库

我已将此库作为 aar 库包含到另一个项目中

库中的类已解决并顺利导入。顶级函数未解析,因此无法使用。我尝试手动添加导入,但它也不起作用。当我尝试使用 java 中的顶级函数作为静态方法执行时,它正在工作。

这行不通

// filename Test1.kt
fun test1() {
    testMethodFirst()
}

这行得通

// filename Test2.kt
fun test1() {
    TestClass()
}

这行得通

// filename Test3.java
class Test {
    void test() {
        TestMethodFirstKt.testMethodFirst();
    }
}

我已经在 AS 4.1 Canary 7 和 AS 3.6.2 上尝试过

附件包含库项目和aar库

Project

Generated aar

【问题讨论】:

    标签: java android kotlin aar


    【解决方案1】:

    对于 Android Studio 4.1 Canary,this is a known bug, until Canary 9, fixed in Canary 10。基于this comment,尝试添加:

    android {
        packagingOptions {
            excludes -= "/META-INF/*.kotlin_module"
        }
    }
    

    这对我有用,并且计划在 Canary 10 上进行更永久的修复。

    【讨论】:

    • 我无法使用 -= 运算符,但这工作正常 excludes = getExcludes().apply { remove("/META-INF/*.kotlin_module") }
    • @user2875643:感觉就像你在使用 Gradle KTS;我发布的 sn-p 适用于基于 Groovy 的经典 Gradle 构建脚本。
    猜你喜欢
    • 2015-05-18
    • 2015-10-04
    • 2019-07-18
    • 1970-01-01
    • 2017-12-08
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多