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

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

潘琨
2023-03-14

我想要的:微笑...

构建kotlin库,将其作为.aar文件Java项目提供,使用我的.aar不需要配置任何内容,只需包含我的.aar并开始播放即可。第一个Q:它甚至可能?因为我失去了希望:微笑:

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

-这是为什么?

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

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

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

我认为Android不支持胖aar,

谢谢大家的关注。

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

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

/////
.
.

dependencies {
////
.
.

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

}

在使用.aar的应用程序中,我在project 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:PS:

显然,我必须将kotlin运行时库添加到我的. aar中,我在网上都试过了,它不起作用:'(

最终更新:感谢cilling找到了解决方案,注意你必须将运行时库包含到本地maven repo中,它不能访问在线内容

Thnx for all

共有2个答案

谷梁永年
2023-03-14

调用下面的 call for smile.aar file in build.gradle file。

implementation project(':smile)

假设微笑是。aar文件名。

若要运行Kotlin,必须在项目build.gradle中包含以下内容:

buildscript {
    ext.kotlin_version = '1.3.31'
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

还包括应用程序级build.gradle

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


//in dependencies
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
沈皓君
2023-03-14

问题是你的aar不包含依赖关系树(.pom文件),所以Gradle在同步期间无法下载它们。

那么,合适的解决方案是什么?你应该像Maven一样使用存储库管理器。你可以在maven local:https://stackoverflow.com/a/42160584/7508302上看到@Robyer帖子如何包含所有依赖项并发布它。该帖子是关于提供库的源代码,但也有现成的gradle发布脚本。

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

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

完整说明:

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

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

3) 检查mavenLocal目录。应该有一个包含您的域名的目录树,例如:<code>com-

4) 将<code>mavenLocal()部分。注意,mavenLocal只指向文件中的某个位置。

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

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

 类似资料:
  • 错误:任务“:app:TransformResourcesWithMergeJavaResforDebug”执行失败。 exception:com.android.build.api.transform.transformexception:com.android.builder.packaging.duplicateFileexception:APK meta-inf/license.txt文件

  • 我写了一些库,其中有一部分UI。此外,这个库使用另一个库。我想提供发行版来在任何应用程序中使用这部分UI。 我得库有下一个依赖项: /home/user/projects/mainapp/app/build/intermediates/explodede-aar/com.my.sdk/sdk/0.0.1/res/values/values.xml:78:21-29:找不到与给定名称匹配的资源:at

  • 问题内容: 我有一个和上。 在运行时添加到单击时。 我使用以下代码: 但没有显示任何在。 问题答案: 我看到您创建了一个名为: 但您永远不会将其添加到面板中。相反,您将没有文本的新内容添加到面板中: 当然,这将构造一个不可见的空标签。 添加类似后,还尝试在您的实例上调用和,如下所示: 这样,您可能还需要调用您的框架实例,以便调整大小以适合新组件。 另外,请不要使用/ 布局,这是非常糟糕的做法(除非

  • 下载并安装了最新的Kotlin插件后,我从Android Studio收到了过时的Kotlin运行时警告,告诉我: 'kotlin-stdlib-1.1.2'库中的Kotlin运行时版本为1.1.2,而插件版本为1.1.2-release-studio2.3-3。应更新运行库以避免兼容性问题。 我尝试单击Update Runtime按钮,但收到另一条消息: 当前不支持Gradle项目的自动库版本更

  • 问题内容: 我收到以下错误,因为Java 11排除了JavaFX作为最新版本的一部分。 那么如何在Java 11中将JavaFX添加到Eclipse?谢谢。 问题答案: 按照入门指南,这些是从Eclipse运行JavaFX 11的必需步骤。 1安装Eclipse 2018-09 。 2安装JDK 11 。 3将Java 11作为已安装的JRE添加到Eclipse:Eclipse->窗口->首选项-