Android-зависимости aar

Я новичок в системе сборки Gradle, у меня есть проект библиотеки, который включает в себя такие зависимости, как Retrofit, okhttp и т. д.

Я скомпилировал свой проект и создал файл aar. Я создал фиктивный проект и добавил свою библиотеку aar в качестве зависимости.

Теперь, если я не добавлю Retrofit и okhttp в качестве зависимости в файл build.gradle моего фиктивного приложения, мое приложение вылетает с исключением class not found.

Мой вопрос: поскольку файл библиотеки aar уже включает в себя Retrofit и okhttp в качестве зависимости, то зачем мне нужно явно добавлять их в файл build.gradle фиктивного приложения? Есть ли обходной путь.

Вот моя библиотека build.gradle

    apply plugin: 'com.android.library'
    buildscript {
        repositories {
            mavenCentral()
            jcenter()
        }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.+'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}
android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }}
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.+'
    compile 'com.android.support:recyclerview-v7:21.+'
    compile 'com.android.support:cardview-v7:21.+'
    compile 'com.google.android.gms:play-services:6.5.87'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    }

person Akhil Latta    schedule 15.04.2015    source источник


Ответы (1)


Я смог решить эту проблему, добавив файл aar в локальный репозиторий maven. Каким-то образом просто добавление aar в папку libs и включение его в качестве зависимости не решает проблему.

Если вы столкнулись с подобной проблемой, просто измените свой проект библиотеки build.gradle с помощью этих дополнений.

 apply plugin: 'maven'

   version = "1.0"
   group = "com.example.lib"



buildscript {
    repositories {
        mavenCentral()
        mavenLocal()
    }

    dependencies {
        classpath 'com.github.dcendents:android-maven-plugin:1.0'
    }
}
    repositories {
       mavenLocal()
     }

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://${System.env.HOME}/.m2/repository/")
        }
    }
}

Запустите задачу в терминале, предоставленном в самой студии Android, как ./gradlew uploadArchives

Затем в файле build.gradle вашего модуля приложения добавьте библиотеку в качестве зависимости.

compile ('com.example.app:ExampleLibrary:1.0@aar') {
        transitive = true;
    }  
person Akhil Latta    schedule 07.05.2015
comment
вы спасли мой день, но чтобы было ясно, нам нужно добавить mavenLocal() к build.gradle приложения, которое будет использовать библиотеку, а не в самой библиотеке - person Guillaume; 08.02.2017