Подтвердить что ты не робот

Android Studio публикует локальную библиотеку

Недавно я переключился на Android Studio из Eclipse и, по большей части, стал лучше.

Но теперь я хочу создать библиотеки для повторного использования позже. Я знаю о модулях, но не хочу их использовать, поскольку он копирует дубликат в каждом проекте (я бы предпочел ссылку на lib, как в Eclipse).

Итак, я обратил мое внимание на решение Maven/ Gradle. В идеале я хотел бы иметь возможность экспортировать свою библиотеку в локальное репо и/или maven-репо и ссылаться на нее через gradle. Я искал довольно долгое время, и каждый ответ отличается, и никто из них не работал на меня. Это является самым близким, что я нашел к тому, что я ищу, но в создании javadoc есть ошибка.

Эти сайты (ссылка и ссылка) требуют, чтобы учетная запись Bintray или Sonatype публиковала библиотеки по всему миру. Публикация библиотеки - это конечная цель для меня, поэтому я хотел бы оставить эту опцию открытой, если это возможно, но на данный момент я просто хочу, чтобы мои библиотеки были закрытыми.

Было бы здорово, если бы был плагин, в котором я мог бы просто указать maven repo для экспорта, но я еще не нашел ничего, что выглядит многообещающим.

Итак, мой вопрос: есть ли рекомендуемый "простой" способ экспортировать библиотеку в Android Studio, которую я могу ссылаться затем через Gradle?

Бонусные отметки: смогу ли я когда-нибудь публиковать библиотеки с proguard? В настоящее время установка minifyEnabled=true в моем lib приводит к тому, что файл .aar не создается при создании.

4b9b3361

Ответ 1

Вы можете использовать плагин maven-publish для публикации ваших артефактов в любом репозитории, к которому у вас есть доступ. Я использую его в сочетании с Amazon S3. Репозиторий может быть вашим местным maven-репо (каталог .m2), локальным Artifactory, Archiva или любым другим сервером репозитория maven или размещенным решением. S3 работает хорошо, и я уверен, что там размещены Artifactories и т.д. Там.

Если вы используете внешний репозиторий, добавьте его в раздел репозиториев, но просто используя плагин, вы должны выбрать публикацию на локальном maven. Задача gradle называется publishToMavenLocal. Вы должны определить свою публикацию. Публикация - это просто набор артефактов, созданных вашей сборкой, в вашем случае это, вероятно, будет банкой, но это может быть что угодно. Короткий пример, как использовать его с S3.

apply plugin: 'maven'
apply plugin: 'java'
apply plugin: 'maven-publish'

repositories {
    maven {
        name "s3Repo"
        url "your S3 URL"
        credentials(AwsCredentials) {
            accessKey awsAccessKey
            secretKey awsSecretKey
        }
    }
    maven {
        ... any other repo here
    }
}

publishing {
    publications {
        maven(MavenPublication) {
            artifactId 'artifact that you want'
            from components.java
            artifact distZip {
                ... example artifact created from zip distribution
            }
        }
    }
    repositories {
        add "s3Repo"
    }
}

Публикация → репозитории → добавление - это место, где вы указываете все репозитории, где вы хотите загрузить свои архивы.

Если вы хотите использовать библиотеку из своего локального maven, просто добавьте:

repositories {
...
    mavenLocal()
...
}

И затем обратитесь к своему lib как к любой другой зависимости с идентификатором группы, идентификатором и версией артефакта.


Насколько я знаю, обфусканные библиотеки такие же, как и не обфускации, только с измененными именами идентификаторов. Если требование заключается в публикации обфускационной библиотеки, это должно быть хорошо. Просто не обфускайте интерфейсы API и классы (точки входа). Если вы публикуете библиотеку, отличную от обфускации, я не уверен, запутан ли она в финальном архиве.