2016-11-03 2 views
6

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

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

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

Я ссылался на эту ссылку также Create an AAR with multiple AARs/JARs. Это говорит transitive = true. Но не понимаю, где использовать этот флаг. В третьей стороне используется приложение или при создании AAR внутри зависимостей проекта AAR.

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

My Mini Project Gradle Файл:

Mini проект, который только преобразование в .AAR файл. Затем, этот файл только собирается использовать другой НовыйПроект

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 
} 
+0

Вы должны добавить 'transitive = true' в зависимости, которую вы включаете в свой основной проект. –

+0

Я добавил в MainProject для transitive = true. Но, я получаю ту же ошибку. В определенном классе отображается ошибка noclassdeffound из импортированного aar. – harikrishnan

+0

Пожалуйста, отправьте код 'build.gradle'. –

ответ

1

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

+0

Это решение не работает. –

+0

Вышеупомянутый метод fat-aar работает только для создания AAR-библиотеки в Android. Студия успешно. – harikrishnan

2

Когда вы обратитесь к ААР и банке в ваших зависимости, то вы можете составить новую AAR со ссылками на первый.

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

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

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

Edit:

Вы можете по крайней мере объединить банки. смотреть на эти ответы:

gradle - how do I build a jar with a lib dir with other jars in it?

Can Gradle jar multiple projects into one jar?

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

+0

Позвольте мне попробовать этот вариант yar. я опубликую мой базовый аар с банком в центральном репозитории maven и передам зависимости MiniProject. то я конвертирую как .AAR и буду использовать и проверять с помощью New Project. – harikrishnan

+0

Привет, Бипи, у меня есть файл AAR и Jar поставщика. во всяком случае, они не позволяют публиковать jcenter.как правило, они будут давать только как .aar и .jar. – harikrishnan

+0

Объединить aar с другими аарами и банками невозможно, если не использовать инструменты, такие как android-fat-aar, которые имеют ограничения. Не могли бы вы подумать о настройке локального репозитория maven, который будет обрабатывать проблемы зависимостей для вас? Мы используем artifactory в нашей компании. – Bipi

Смежные вопросы