1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wan7451-fat-aar-android

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 10 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 06:31 3cfdadb

Fat AAR Android

Решение для объединения AAR работает с плагином Android Gradle, версия разработки плагина Android — 3.0.1 и выше. (Протестировано в Gradle Plugin 3.0.1–4.0.0 и Gradle 4.6–6.1.1)

Начало работы

Шаг 1: Применение плагина

Добавьте фрагмент ниже в корневой файл сценария сборки:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:xxx'
        classpath 'com.kezong:fat-aar:1.2.16'
    }
}

Добавьте фрагмент ниже в build.gradle вашей библиотеки Android:

apply plugin: 'com.kezong.fat-aar'

Шаг 2: Встраивание зависимостей

Измените реализацию или api на embed, если вы хотите встроить зависимость в библиотеку. Вот так:

dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
    // java dependency
    embed project(path: ':lib-java', configuration:'default')
    // aar dependency
    embed project(path: ':lib-aar', configuration:'default')
    // aar зависимость
    embed project(path: ':lib-aar2', configuration:'default')
    // локальная полная зависимость aar, просто сборка во вкусе1
    flavor1Embed project(path: ':lib-aar-local', configuration:'default')
    // локальная полная зависимость aar, только сборка в отладке
    debugEmbed (name:'lib-aar-local2',ext:'aar')
    // удаленная jar зависимость
    embed 'com.google.guava:guava:20.0'
    // удалённая зависимость aar
    embed 'com.facebook.fresco:fresco:1.11.0'
    // не хотим встраивать
    // реализация не рекомендуется, потому что зависимость может отличаться от версии в приложении, что приводит к тому, что класс R не найден.
    compileOnly 'com.android.support:appcompat-v7:27.1.1'
}

Транзитивные зависимости

Локальные зависимости

Если вы хотите включить локальные транзитивные зависимости в конечный артефакт, вы должны добавить embed для транзитивных зависимостей в свою основную библиотеку.

Например, mainLib зависит от subLib1, subLib1 зависит от subLib2. Если вы хотите включить все зависимости в конечный артефакт, вам необходимо добавить embed для subLib1 и subLib2 в mainLib build.gradle.

Удалённые зависимости

Если вы хотите включить все удалённые транзитивные зависимости из файла pom, вам нужно изменить значение embed's transitive на true в вашем build.gradle, вот так:

// значение по умолчанию — false
// недействительно для локальной зависимости aar
configurations.embed.transitive = true

Если вы измените транзитивное значение на true и хотите игнорировать зависимость в её файле POM, вы можете добавить ключевые слова exclude, вот так:

embed('com.facebook.fresco:fresco:1.11.0') {
    exclude(group:'com.facebook.soloader', module:'soloader')
}

Более подробное использование см. в примере.

Об AAR-файле

AAR — это формат файлов для библиотек Android. Сам файл представляет собой zip-файл, содержащий полезные данные для Android. Смотрите анатомию файла AAR здесь.

Поддержка списка на данный момент:

  • productFlavors
  • manifest merge
  • классы jar и внешние jar merge
  • res merge
  • assets merge
  • jni libs merge
  • proguard.txt merge
  • R.txt merge
  • R.class merge

Поддержка версий Gradle

Версия Gradle Plugin Gradle
1.0.1 3.1.0 - 3.2.1 4.4-6.0
1.1.6 3.1.0 - 3.4.1 4.4-6.0
1.1.10 3.0.1 - 3.4.1 4.1-6.0
1.2.6 3.0.1 - 3.5.0 4.1-6.0
1.2.8 3.0.1+ 4.1+
1.2.11+ 3.6.0+ 5.4.1+
1.2.15+ 4.0.0+ 6.1.1+

В следующей ссылке указано, какая версия Gradle требуется для каждой версии Android Gradle Plugin. Для лучшей производительности следует использовать самую последнюю возможную версию как Gradle, так и плагина. Version Log

  • 1.2.16 — поиск плагина для сборки Android в полном пути к классам (#172); исправлена ошибка, из-за которой ресурсы могли не находиться при сборке в Gradle версии 4.0 (#163).

  • 1.2.15 — адаптация плагина Gradle 4.0.0 (#147); поддержка индексации модуля в AS 4.0.0 (#148); исправление ошибки lint (#152).

  • 1.2.12 — добавлена поддержка зависимостей для конкретных типов сборки и вариантов продукта, таких как debugEmbed или flavorEmbed (#135, #137); исправлены некоторые предупреждения сборки.

  • 1.2.11 — исправлены ошибки вариантов сборки в плагине Gradle 3.6+ (#126); исправлена ошибка с символами удалённых ресурсов, которые не находились в R.class при сборке с плагином Gradle 3.6.0+.

  • 1.2.9 — адаптация плагина Gradle 3.6.1 (#120).

  • 1.2.8 — адаптация Gradle 6.0.0+ (#97).

  • 1.2.7 — исправление ошибок слияния манифеста в Gradle 3.5.0 (#62, #65).

  • 1.2.6 — адаптация плагина Gradle 3.5.0 (#53, #58).

  • 1.2.5 — исправление повторяющихся ошибок имени задачи (#48); если minifyEnabled, файлы jar будут собираться в classes.jar.

  • 1.2.4 — исправление проблем с встраиванием jni и активов на платформе Windows (#37).

  • 1.2.3 — исправление проблемы с поиском R, который не является зависимостью (#11, #35); больше не нужно добавлять compileOnly для зависимостей; значение по умолчанию для транзитивного изменения — false.

  • 1.1.11 — исправление проблемы, когда версия плагина Gradle могла быть неправильно оценена (#28); исправление предупреждений о сборке LibraryManifestMerger.java (#29); оптимизация правил слияния ресурсов, активов, jni... (#27).

  • 1.1.10 — исправление ошибки слияния jar при использовании плагина Gradle 3.0.1 (#24); исправление ошибки перестройки (./gradlew clean assemble) (#24).

  • 1.1.8 — адаптация нового интерфейса для избежания предупреждений (#10); оптимизация правил слияния AndroidManifest (#21, #23). Поддержка встраивания R-файла при загрузке Maven (#7)

v1.1.6:

  • адаптация Gradle-плагина 3.3.0, 3.4.0, 3.4.1 (#4, #9);
  • адаптация Gradle 4.10.1, 5.0, 5.1, 5.1.1 и далее (#8);
  • поддержка Flavor подмодуля;
  • исправление проблемы с несвоевременным обновлением класса подмодуля.

v1.0.3:

  • исправление слияния активов.

v1.0.1:

  • поддержка Gradle-плагинов 3.1.0–3.2.1;
  • поддержка слияния файлов классов R.

Известные дефекты или проблемы

  1. Примечание Proguard. При включённом Proguard появляется множество (возможно) сообщений «Note: duplicate definition of library class». Обходной путь — добавить -dontnote в proguard-rules.pro.
  2. Изменён порядок наложения слияния res. Встроенным зависимостям присваивается более высокий приоритет, чем другим зависимостям.
  3. Конфликты слияния res. Если папка библиотеки res и встроенные зависимости res имеют одинаковый идентификатор res (в основном string/app_name), будет выдано исключение сборки дублирующихся ресурсов. Чтобы избежать конфликтов res:
    • рассмотрите возможность использования префикса для каждого идентификатора res как в библиотеке res, так и в зависимостях aar, если это возможно;
    • добавление «android.disableResourceValidation=true» в «gradle.properties» может помочь пропустить исключение, но не рекомендуется.

Благодарности

  • android-fat-aar;
  • fat-aar-plugin.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wan7451-fat-aar-android.git
git@api.gitlife.ru:oschina-mirror/wan7451-fat-aar-android.git
oschina-mirror
wan7451-fat-aar-android
wan7451-fat-aar-android
master