Добавление локального.файлы aar для моей сборки gradle



поэтому я создал Android-библиотеку и успешно скомпилировал ее в a .файл aar я назвал этот файл aar:"projectx-sdk-1.0.0.aar" Теперь я хочу, чтобы мой новый проект зависел от этого aar, поэтому я сделал следующее сообщение: http://life.nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/



но сообщение смущает меня, так как я не получаю желаемого результата:



имя пакета AAR является : com.projectx.photosdk и модуль внутри называется sdk



вот моя текущая структура проекта:



|-SuperAwesomeApp
|--.idea
|--gradle
|--App
|---aars
|----projectx-sdk-1.0.0.aar
|---build
|---jars
|---src
|---build.gradle


и он мой файл сборки gradle:



apply plugin: 'android'

buildscript {
repositories {
mavenCentral()
flatDir {
dirs 'aars'
}
}
}

android {
compileSdkVersion 19
buildToolsVersion "19.0.1"

defaultConfig {
minSdkVersion 11
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}

dependencies {
compile 'com.android.support:gridlayout-v7:19.0.1'
compile 'com.android.support:support-v4:19.0.1'
compile 'com.android.support:appcompat-v7:19.0.1'


compile 'com.projectx.photosdk:sdk:1.0.0@aar'
// compile files( 'aars/sdk-1.0.0.aar' ) // Does not work either
}


/ / EDIT



ошибки, которые я получаю:



Failed to refresh Gradle project 'SuperAwesomeApp'
Could not find com.projectx.photosdk:sdk:1.0.0.
Required by:
SuperAwesomeApp:App:unspecified
886   6  

6 ответов:

вы кладете flatDir блок в неположенном repostories блок. Элемент repositories внутри блока buildscript говорит Gradle, где найти плагин Android-Gradle, но не остальные зависимости. Вам нужно иметь еще один топ-уровень repositories вот так:

repositories {
    mavenCentral()
    flatDir {
        dirs 'aars'
    }
}

Я проверил это, и это работает нормально на моей установке.

С последними версиями Android Studio, протестированными с 1.3, чтобы использовать local .Файл AAR, а не один, полученный из репозитория maven/jcenter, просто перейдите в Файл > Новый > новый модуль и выбрать импорт .СОСУД./Пакет AAR.

в конечном итоге вы получите новый модуль в своем проекте, который содержит очень простой построить.gradle файл, который выглядит примерно так:

configurations.create("default")
artifacts.add("default", file('this-is-yours-package-in-aar-format.aar'))

конечно, другие проекты должны ссылаться на это новое модуль с регулярным компиляция проекта

в эти дни (более 1 года после этого вопроса) с Android Studio > 1.0 локальная зависимость работает правильно:

  • Android sdk ищет зависимости в локальном репо по умолчанию: $ANDROID_HOME/extras/android/m2repository/
  • в проекте локальной библиотеки вы можете опубликовать aar в этом каталоге. Вот фрагмент кода, который можно добавить в модуль build.gradle файл (например: sdk / build.gradle)

    apply plugin: 'maven'
    
    uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: "file://localhost" + System.getenv("ANDROID_HOME")
                    + "/extras/android/m2repository/")
                pom.version = '1.0-SNAPSHOT'
                pom.groupId = 'your.package'
                pom.artifactId = 'sdk-name'
            }
        }
    }
    
  • в проекте библиотеки запустите ./gradlew uploadArchives чтобы опубликовать aar в этом каталоге
  • в проекте приложения, в котором вы хотите использовать библиотеку, добавьте зависимость в свой проект/приложение/сборку.градля. compile 'your.package:sdk-name:1.0-SNAPSHOT'

для локальной зависимости следующая сборка gradle должна найти ранее развернутый архив и вот это!


в моем случае я использую вышеизложенное для локального разработчика, но также имею сервер непрерывной интеграции Bamboo для библиотеки, которая публикует каждую сборку в общий репозиторий артефактов Nexus. Полный код библиотеки для развертывания артефакта становится следующим:

uploadArchives {
    repositories {
        mavenDeployer {
            if (System.getenv("BAMBOO_BUILDNUMBER") != null) {
                // Deploy to shared repository
                repository(url: "http://internal-nexus.url/path/") {
                    authentication(userName: "user", password: "****")
                }
                pom.version = System.getenv("BAMBOO_BUILDNUMBER")
            } else {
                // Deploy to local Android sdk m2repository
                repository(url: "file://localhost" + System.getenv("ANDROID_HOME")
                        + "/extras/android/m2repository/")
                pom.version = '1.0-SNAPSHOT'
            }

            pom.groupId = 'your.package'
            pom.artifactId = 'sdk-name'
        }
    }
}

чтобы сообщить приложениям о загрузке из моего внутреннего репозитория Nexus, я добавил внутренний репозиторий Nexus maven чуть выше jcenter() в обоих блоках " репозитории построение проекта.gradle

repositories {
    maven {
        url "http://internal-nexus.url/path/"
    }
    jcenter()
}

и зависимость приложения тогда выглядит как compile 'your.package:sdk-name:45' когда я обновляю версию 45 до 46, мой проект захватит новый артефакт с сервера Nexus.

В Android Studio 3.1.3 с gradle 3.0.1.
Просто добавив implementation fileTree(dir: 'libs', include: ['*.aar']) или implementation files('libs/app-release.aar') без каких-либо других flatdir строительство.

С новейшей версией Gradle теперь есть немного обновленный способ сделать то, что предложил Стэн (см. maving publishing)

apply plugin: 'maven-publish'

publishing {
    publications {
        aar(MavenPublication) {
            groupId 'org.your-group-id'
            artifactId 'your-artifact-id'
            version 'x.x.x'

            // Tell maven to prepare the generated "*.aar" file for publishing
            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
        }
    }
    repositories {
        maven {
            url("file:" + System.getenv("HOME") + "/.m2/repository")
        }
    }
}

кажется, добавив .файлы aar как локальная зависимость еще не поддерживаются (планируется поддержка в бета-версии 0.5.0)

https://code.google.com/p/android/issues/detail?id=55863

но то, как вы используете свою библиотеку в зависимости, будет работать только в том случае, если ваша библиотека находится в Центральном репозитории maven или в локальном репозитории maven.

см. Это для того, чтобы использовать локальный репозиторий Maven для использования .aar в модуле зависимости.

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds

Comments

    Ничего не найдено.