android — Добавление локальных файлов .aar в мою сборку Gradle" />

Добавление локальных файлов .aar в мою сборку Gradle

Итак, я создал библиотеку Android и успешно скомпилировал ее в файл .aar, который я назвал этим файлом aar: "projectx-sdk-1.0.0.aar" теперь я хочу, чтобы мой новый проект зависел от этого вопроса, так что я следовал за этим постом: Gradle основы-сборка-система /"> 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:[email protected]'
//    compile files( 'aars/sdk-1.0.0.aar' ) // Does not work either
}

//РЕДАКТИРОВАТЬ

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

Failed to refresh Gradle project 'SuperAwesomeApp'
     Could not find com.projectx.photosdk:sdk:1.0.0.
     Required by:
     SuperAwesomeApp:App:unspecified
65 голосов | спросил sn0ep 19 FebruaryEurope/MoscowbWed, 19 Feb 2014 18:03:47 +0400000000pmWed, 19 Feb 2014 18:03:47 +040014 2014, 18:03:47

6 ответов


0

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

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

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

ответил Scott Barta 19 FebruaryEurope/MoscowbWed, 19 Feb 2014 23:53:06 +0400000000pmWed, 19 Feb 2014 23:53:06 +040014 2014, 23:53:06
0

В последних версиях Android Studio, протестированных с версией 1.3, для использования локального файла .AAR, а не файла, извлеченного из репозитория maven /jcenter, просто перейдите в Файл> Новый> Новый модуль и выберите Импорт пакета .JAR /.AAR .

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

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

Конечно, другие проекты должны ссылаться на этот новый модуль с помощью регулярной директивы compile project . Таким образом, в проекте, который использует этот новый модуль, который является простым, локальный файл .aar имеет это в своем build.gradle

[...]
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    ompile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'
    [...]

    compile project(':name-of-module-created-via-new-module-option-described-above')
}
[...]
ответил pelotasplus 19 +03002015-10-19T15:46:05+03:00312015bEurope/MoscowMon, 19 Oct 2015 15:46:05 +0300 2015, 15:46:05
0

В наши дни (более 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 в этом каталоге
  • В проекте приложения, в котором вы хотите использовать библиотеку, добавьте зависимость в ваш проект /app /build.gradle. 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 () в обоих блоках «хранилища» в проекте /build.gradle

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

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

ответил Stan Kurdziel 6 Maypm15 2015, 22:16:49
0

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

ответил Yen 1 PM000000100000001331 2018, 22:02:13
0

В новейшей версии 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")
        }
    }
}
ответил mir 9 Jam1000000amTue, 09 Jan 2018 00:01:27 +030018 2018, 00:01:27
0

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

https://code.google.com/p/android/вопросы /детали? ID = 55863

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

Обратитесь к разделу Как использовать локальный репозиторий maven для использования .aar в зависимостях модуля.

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

ответил pyus13 19 FebruaryEurope/MoscowbWed, 19 Feb 2014 23:13:26 +0400000000pmWed, 19 Feb 2014 23:13:26 +040014 2014, 23:13:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132