Добавление библиотеки времени выполнения Kotlin в AAR в Android - PullRequest
0 голосов
/ 26 сентября 2019

ЧТО Я ХОЧУ: smile::

собирая библиотеку kotlin, поставьте ее в виде файла .aar. Java-проекту, использующему мой .aar, не нужно ничего настраивать, просто включите мой .aar и начните играть.Первый вопрос: ЭТО ДАЖЕ Возможно?потому что я теряю надежду: smile:

если в проекте, использующем мою библиотеку, не настроен Kotlin, то там написано ClassNotFoundException.

-ЧТО ТАКОЕ?

если kotlin имеет тот же байт-код, что и байт-код Java (и совместим на 100%),

, тогда зачем мне нужен kotlin при использовании .aar writen в kotlin в проекте JAVA?

После некоторого исследования я обнаружил, что должен включить библиотеку времени выполнения kotlin в свой проект, но я не знаю, как, я уже попробовал в основном все решения в сети,

Я думаю, что толстый аар 't поддерживается на Android,

Спасибо всем за внимание.

Обновление в моем проекте 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: PS:

ясно, что я должен добавить библиотеку времени выполнения kotlin к моему .aar. Я перепробовал всю сеть, это не работает: '(

Окончательное обновление: решение найдено благодаря уплате, обратите внимание, что вы должны включить runtime-библиотеку в локальное хранилище maven, он не может получить доступ к онлайн-контенту

Thnx для всех

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Вызовите приведенный ниже вызов для файла smile.aar в файле build.gradle.

implementation project(':smile)

Предполагая, что 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"
0 голосов
/ 26 сентября 2019

Проблема в том, что ваш aar не включает в себя дерево зависимостей (файл .pom), поэтому Gradle не может загрузить их во время синхронизации.

Итак, каково правильное решение?Вы должны использовать менеджер репозитория, как Maven.Вы можете увидеть сообщение @Robyer о том, как включить все зависимости и опубликовать его в MavenLocal: https://stackoverflow.com/a/42160584/7508302 Это сообщение о предоставлении исходного кода для библиотеки, но также есть готовый сценарий публикации 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 просто должен иметь правильную структуру dir.

3) Проверьте mavenLocal dir.Там должно быть дерево каталогов с вашим доменным именем, например: com -> mycompany -> library -> 0.0.1, и в этой папке вы найдете файл .pom.Откройте его, чтобы увидеть зависимости вашей библиотеки.

4) Добавьте mavenLocal() в раздел repository в файле уровней проекта.Обратите внимание, что mavenLocal просто указывает на какое-то место в ваших файлах.

5) Добавьте зависимость библиотеки, используя только определенное имя (например: com.mycompany:library:0.0.1@aar. Добавьте параметр transitive, если вы хотите получить транзитивные зависимости (которыетранзитивный параметр означает, что эта библиотека может зависеть от других модулей).

Таким образом, gradle должен получить объявленные зависимости и включить их в проект.

...