【问题标题】:java.lang.NoClassDefFoundError when using Kotlin AAR in Android Java application在 Android Java 应用程序中使用 Kotlin AAR 时出现 java.lang.NoClassDefFoundError
【发布时间】:2018-06-14 05:31:32
【问题描述】:

我必须在 Kotlin 中创建一个库 (aar),并且必须在使用 Java 制作的 Android 应用程序中使用它。 Kotlin 库有一个带有伴随函数的类,可以在 Java 应用程序中静态使用。当我在 Java 中的 Android 应用程序中使用该静态方法时,我确实得到了“ClassNotFoundException”。谁能帮助我如何在 Android Java 应用程序的 aar 中使用伴随方法。请在运行我的应用程序时找到我的代码 sn-ps 和异常。 只有在 Android Java 项目中使用 Kotlin AAR 而不是在 Android Kotlin 项目中时,我才会收到此错误。 Kotlin 库或 Android Java 项目中是否缺少我的东西。 Kotlin 库 sn-p:

class LogUtil {
    companion object {
        private const val LOG_TAG = "KOTLIN_LIBRARY"
        @JvmStatic
        fun log(message: String) {
            Log.i(LOG_TAG, message)
        }
    }
}

Android Activity sn-p:

public class MainActivity extends AppCompatActivity {

    private HaloSDK haloSDK;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        testKotlinSDK();
    }


    private void testKotlinSDK() {
        LogUtil.log("Hello");
    }

    public void showKotlinWebView(View view) {
        Intent intent = HaloWebActivity.Companion.createIntent(this, "www.abc.com");
        startActivity(intent);
    }
}

例外:

java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/jvm/internal/Intrinsics;
        at com.abcd.kotlinlibrary.utils.LogUtil$Companion.log(Unknown Source:2)
        at com.abcd.kotlinlibrary.utils.LogUtil.log(Unknown Source:2)
        at com.abcd.thirdpartyapp.MainActivity.testKotlinSDK(MainActivity.java:25)
        at com.abcd.thirdpartyapp.MainActivity.onCreate(MainActivity.java:20)
        at android.app.Activity.performCreate(Activity.java:7174)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6940)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "kotlin.jvm.internal.Intrinsics" on path: DexPathList[[zip file "/data/app/com.abcd.thirdpartyapp-k2I71L3n7Qa6TEETe1GejQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.abcd.thirdpartyapp-k2I71L3n7Qa6TEETe1GejQ==/lib/arm64, /system/lib64, /system/vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.abcd.kotlinlibrary.utils.LogUtil$Companion.log(Unknown Source:2) 
        at com.abcd.kotlinlibrary.utils.LogUtil.log(Unknown Source:2) 
        at com.abcd.thirdpartyapp.MainActivity.testKotlinSDK(MainActivity.java:25) 
        at com.abcd.thirdpartyapp.MainActivity.onCreate(MainActivity.java:20) 
        at android.app.Activity.performCreate(Activity.java:7174) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
        at android.os.Handler.dispatchMessage(Handler.java:105) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6940) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 

【问题讨论】:

    标签: android kotlin kotlin-android-extensions kotlin-extension


    【解决方案1】:

    缺少的类是 Kotlin 标准库的一部分。如果您的项目中没有使用 Kotlin,则必须手动依赖它:

    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.50'
    

    您还可以确保将依赖项从您的库中导出为:

    api 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.50'
    

    【讨论】:

    • 我认为在使用 Kotlin AAR 库时应该添加到 Android Java 应用程序中
    • 是的..当我在 Android Java 应用程序中使用该依赖项时它起作用了..我在想为什么我应该给出那条线..因为我在 Kotlin AAR 中有那条依赖线。所以最终的 apk 应该包括它..
    • 如果它没有自动发生,您可以将 stdlib 定义为库中的 api 依赖项。
    • 好的,但是什么是 api 依赖.. 我们在 gradle 中有依赖列表,你的意思是那个列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多