Java.lang.NoClassDefFoundError при использовании Kotlin AAR в приложении Android Java

Мне нужно создать библиотеку (aar) в Kotlin и использовать ее в приложении Android, созданном с использованием Java. В библиотеке Kotlin есть класс с сопутствующими функциями для статического использования в приложении Java. Когда я использую этот статический метод в своем приложении для Android на Java, я получаю «ClassNotFoundException». Может ли кто-нибудь помочь мне, как использовать методы-компаньоны в aar из приложения Android Java. Пожалуйста, найдите мои фрагменты кода и исключение, которое я получаю при запуске моего приложения. И я получаю эту ошибку только при использовании Kotlin AAR в Android Java Project, но не в Android Kotlin Project. Есть ли что-то, чего мне не хватает в библиотеке 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) 
5
0
3 496
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отсутствующий класс является частью Стандартная библиотека Kotlin. Вы должны полагаться на него вручную, если вы не используете Котлин в своем проекте:

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

Также вы можете убедиться, что экспортировали зависимость из вашей библиотеки как:

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

Я считаю, что это следует добавить в приложение Android Java при использовании библиотеки Kotlin AAR.

MaheshGupta 14.06.2018 14:59

да .. Это сработало, когда я использую эту зависимость в Java-приложении Android .. Я думаю, почему я должен указывать эту строку .. потому что у меня есть эта зависимость в Kotlin AAR. Так что финальный apk должен включать его ..

MaheshGupta 14.06.2018 16:09

Если это не происходит автоматически, вы можете определить stdlib как зависимость api в своей библиотеке.

tynn 14.06.2018 17:36

Хорошо, но что такое зависимость api ... у нас есть список зависимостей в gradle, вы имеете в виду этот список.

MaheshGupta 14.06.2018 21:59

Другие вопросы по теме