java.lang.NoClassDefFoundError 在 Android Java 应用程序中使用 Kotlin AAR
java.lang.NoClassDefFoundError when using Kotlin AAR in Android Java application
我必须在 Kotlin 中创建一个库 (aar),并且必须在使用 Java 制作的 Android 应用程序中使用它。 Kotlin 库有一个 class 以及可在 Java 应用程序中静态使用的配套函数。当我在 Java 的 Android 应用程序中使用该静态方法时,我得到了 "ClassNotFoundException"。任何人都可以帮助我如何在 Android Java 应用程序的 aar 中使用伴随方法。请找到我的代码片段和我在 运行 我的应用程序时遇到的异常。
只有在 Android Java 项目中使用 Kotlin AAR 时才会出现此错误,但在 Android Kotlin 项目中不会出现此错误。 Kotlin 库或 Android Java 项目中是否缺少某些内容。
Kotlin 库片段:
class LogUtil {
companion object {
private const val LOG_TAG = "KOTLIN_LIBRARY"
@JvmStatic
fun log(message: String) {
Log.i(LOG_TAG, message)
}
}
}
Android Activity 片段:
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)
缺少的 class 是 Kotlin 标准库 的一部分。如果您在项目中没有使用 Kotlin,则必须手动依赖它:
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.50'
您还可以确保将依赖项从库中导出为:
api 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.50'
我必须在 Kotlin 中创建一个库 (aar),并且必须在使用 Java 制作的 Android 应用程序中使用它。 Kotlin 库有一个 class 以及可在 Java 应用程序中静态使用的配套函数。当我在 Java 的 Android 应用程序中使用该静态方法时,我得到了 "ClassNotFoundException"。任何人都可以帮助我如何在 Android Java 应用程序的 aar 中使用伴随方法。请找到我的代码片段和我在 运行 我的应用程序时遇到的异常。 只有在 Android Java 项目中使用 Kotlin AAR 时才会出现此错误,但在 Android Kotlin 项目中不会出现此错误。 Kotlin 库或 Android Java 项目中是否缺少某些内容。 Kotlin 库片段:
class LogUtil {
companion object {
private const val LOG_TAG = "KOTLIN_LIBRARY"
@JvmStatic
fun log(message: String) {
Log.i(LOG_TAG, message)
}
}
}
Android Activity 片段:
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)
缺少的 class 是 Kotlin 标准库 的一部分。如果您在项目中没有使用 Kotlin,则必须手动依赖它:
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.50'
您还可以确保将依赖项从库中导出为:
api 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.50'