Android Studio Создайте AAR, используя другой файл AAR и jar внутри

Я создаю файл AAR, используя другую зависимость файлов aar и jar. Я успешно создал файл выпуска .aar.

Затем я импортировал свой новый файл AAR в образец проекта. проект работает нормально. когда вы собираетесь получить доступ к этим классам aar и jar, это означает, что отображается ошибка NoClassDefFound.

Примечание: сначала я хочу знать, возможен ли AAR внутри другого AAR. может ли кто-нибудь помочь мне выйти из этой новой проблемы?

Я также сослался на эту ссылку Создайте AAR с несколькими AAR / JAR . Он говорит, что переходный = истина. Но, не понимаю, где использовать этот флаг. В сторонних приложениях или при создании AAR внутри зависимостей проекта AAR.

Спасибо заранее.

Файл Gradle My Mini Project:

Мини-проект, который конвертируется только в файл .AAR. тогда этот файл будет использовать только другой NewProject

Файл Mini Project Build.gradle

/*
This would be enabled for development purpose and to debug and check the same
*/

apply plugin: 'com.android.application'

/*
This would be enabled for exporting as aar file
apply plugin: 'com.android.library'
*/

//apply plugin: 'com.android.library'

android {

    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    dexOptions {
        javaMaxHeapSize "4g"
        preDexLibraries = false
    }
    defaultConfig {

        /*
        This application id would be used for development purpose and to debug and check the same.
        This would be commented when exporting as library
        */
        applicationId 'com.pss.pssplayer'
        minSdkVersion 18
        targetSdkVersion 23
        multiDexEnabled true
        versionCode 1
        versionName "1.0"
    }

    aaptOptions {
        cruncherEnabled = false
    }

    buildTypes {

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
 'proguard-rules.pro'

        }
    }

    productFlavors {
    }
}

dependencies {

    compile fileTree(include: ['*.jar'], dir: 'libs')

    testCompile 'junit:junit:4.12'

    compile 'com.android.support:appcompat-v7:23.1.1'

    compile 'com.android.support:support-v4:23.1.1'

    compile files('libs/ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar')

    compile files('libs/secure.jar')

    compile(project(':getSubProject')) {

        transitive = true

    }// this getSubProject also contains one classes jar
}

person harikrishnan    schedule 03.11.2016    source источник
comment
Вы должны добавить transitive=true в зависимости, которые вы включаете в свой основной проект.   -  person Vipul Asri    schedule 10.11.2016
comment
Я добавил в MainProject для transitive = true. Но я получаю ту же ошибку. Определенный класс показывает ошибку noclassdeffound из импортированного файла aar.   -  person harikrishnan    schedule 10.11.2016
comment
Пожалуйста, разместите код build.gradle.   -  person Vipul Asri    schedule 10.11.2016
comment
у меня градл наклеен Випул Асри. ты можешь проверить однажды   -  person harikrishnan    schedule 14.11.2016


Ответы (2)


Используйте плагин Gradle android-fat-aar, он очень полезен!

person Nicola De Fiorenze    schedule 10.11.2016
comment
Вышеупомянутый метод fat-aar работает только для успешного создания библиотеки AAR в Android Native с помощью Android Studio. - person harikrishnan; 26.09.2017
comment
Привет, Николь, сборка Android aar отлично работает в самой студии 2.2.2. если мы обновимся до Android Studio 3.0.1, AAR не будет правильно строиться. какие-нибудь обновления в этом году?. при интеграции этого AAR в другой проект он не работает должным образом. это связано с поддержкой AppCombat 7. Target, compile, buildtool 26 и выше используют наш проект. - person harikrishnan; 21.03.2018

Когда вы ссылаетесь на свои aar и jar в своих зависимостях, вы можете скомпилировать свой новый aar со ссылками на первый.

Но они не встроены в ваш aar. Вместо этого приложению, использующему «большой aar», также нужна зависимость от двух первых.

Для этого вы можете развернуть весь свой aar в репозитории, например maven, сообщив maven, что «большой aar» зависит от первых двух. (-> pom.xml)

В файле build.gradle приложения вы можете добавить зависимость только от «большого aar» с помощью transitive=true, чтобы система просматривала зависимости зависимости.

Изменить:

Можно хотя бы баночки слить. посмотрите на эти ответы:

gradle - как мне создать jar-файл с каталогом lib с другими jar-файлами в нем?

Может ли Gradle объединить несколько проектов в одну банку?

Слить aar сложнее, потому что вам нужно объединить все ресурсы, манифесты и так далее ...

person Bipi    schedule 10.11.2016
comment
позвольте мне попробовать этот вариант яр. Я опубликую свой базовый файл aar с jar в центральном репозитории maven и буду ссылаться на зависимости MiniProject. затем я конвертирую как .AAR и буду использовать и проверять с помощью New Project. - person harikrishnan; 10.11.2016
comment
Привет, Бипи, у меня есть файл AAR и Jar от поставщика. в любом случае они не позволяют публиковать jcenter. как правило, они будут давать только подобные .aar и .jar. - person harikrishnan; 14.11.2016
comment
Слияние aar с другими aar и jar невозможно, если не используются такие инструменты, как android-fat-aar, у которых есть ограничения. Не могли бы вы подумать о настройке локального репозитория maven, который будет решать проблемы с зависимостями за вас? Мы используем артефакты в нашей компании. - person Bipi; 14.11.2016
comment
Я готов использовать URL-адрес репозитория Maven. но клиент не будет передавать jar и .aar URL-адресу maven lib. они предоставляют этот формат .AAR и Jar только в настоящее время. только по этой причине я пытаюсь это сделать, - person harikrishnan; 15.11.2016
comment
Вы по-прежнему можете вручную упаковать клиентские jar-файлы и aar в репозиторий maven. - person Bipi; 15.11.2016
comment
Можно ли включить aar в другой aar без maven? - person Pablo Cegarra; 12.02.2019
comment
@PabloCegarra Я так не думаю. Вы должны использовать репо, например maven, или вам нужно объединить файлы aar в один. - person Bipi; 13.02.2019