gpt4 book ai didi

android - 将 Kotlin 运行时库添加到 android 中的 aar

转载 作者:行者123 更新时间:2023-11-29 18:27:22 53 4
gpt4 key购买 nike

我想要什么 :smile: :

构建 Kotlin 图书馆,将其作为 .aar 文件交付使用我的 .aar 的 Java 项目不需要配置任何东西,只需包含我的 .aar 即可开始播放。第一问:这甚至可能吗?因为我正在失去希望:微笑:

如果使用我的库的项目没有配置 Kotlin,则会显示 ClassNotFoundException。

-为什么会这样?

如果 kotlin 具有与 Java 字节码相同的字节码,(并且 100% 兼容),

那为什么我在 JAVA 项目中使用 .aar writen in kotlin 时需要有 kotlin?

经过一些研究,我发现我必须在我的项目中包含 kotlin 运行时库,但我不知道如何,我已经尝试了网上基本上所有的解决方案,

我认为 Android 不支持 fat aar,

谢谢大家的关注。

更新在我的 aar 项目中,我有一个包含以下 build.gradle 的模块

apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'

/////
.
.

dependencies {
////
.
.

api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

}

在我使用 .aar 的应用程序中我在项目 build.gradle 中有以下内容

 dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}


在build.gralde模块中

    implementation(name: 'my-aar-library', ext: 'aar')

当我运行该应用程序时,它崩溃了,这是堆栈:


09-25 15:14:22.814 3239-3239/com.example.mymodule E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mymodule, PID: 3239
java.lang.NoClassDefFoundError: kotlin.jvm.internal.Intrinsics
at com.com.example.mymodule.views.MyCustomView.<init>(PCMajorHeadereView.kt)
at .
.
.
.
.
.

更新 2:附言:

很明显,我必须将 kotlin 运行时库添加到我的 .aar我在网上试遍了,还是不行:'(

最终更新:由于 cilling 找到了解决方案,请注意,您必须将运行时库包含到本地 Maven 存储库中,它无法访问在线内容

谢谢大家

最佳答案

问题是您的 aar 不包含依赖树(.pom 文件),因此 Gradle 无法在同步期间下载它们。

那么,正确的解决方案是什么?您应该使用存储库管理器,例如 Maven。您可以查看@Robyer 发布的如何包含所有依赖项并将其发布到 MavenLocal 上: https://stackoverflow.com/a/42160584/7508302该帖子是关于提供库的源代码,但也准备使用 gradle publish 脚本。

然后,在您的“本地专家”中将发布一个库。然后,您可以添加到您的 gradle 文件(在您要使用该库的项目中):repositories { mavenLocal() } 然后像这样添加依赖项:

implementation ('com.example.android:library:0.0.1-SNAPSHOT@aar') {
transitive = true
}

完整说明:

1) 在您的库中添加一个负责在 mavenLocal() 上发布的 gradle 文件。参见 https://stackoverflow.com/a/42160584/7508302详情并准备好使用脚本。

2) 将库推送到mavenLocal。它是本地 Maven 存储库。您不需要安装任何东西,因为 Maven 存储库只需要具有适当的目录结构。

3) 检查 mavenLocal 目录。应该有一个包含您的域名的目录树,例如:com -> mycompany -> library -> 0.0.1 并且在该文件夹中您应该找到 .pom 文件.打开它,查看您的库的依赖项。

4) 将 mavenLocal() 添加到项目级 gradle 文件中的 repository 部分。请注意,mavenLocal 只是指向文件中的某个位置。

5) 使用限定名称添加库依赖(例如:com.mycompany:library:0.0.1@aar。如果要获取传递依赖,请添加参数传递(传递参数意味着该库可能依赖于其他模块)。

这样 gradle 应该获取声明的依赖项并将它们包含到项目中。

关于android - 将 Kotlin 运行时库添加到 android 中的 aar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58114708/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com