All Projects → kezong → Fat Aar Android

kezong / Fat Aar Android

Licence: apache-2.0
A gradle plugin that merge dependencies into the final aar file works with AGP 3.+

Programming Languages

groovy
2714 projects
java
68154 projects - #9 most used programming language
kotlin
9241 projects

Projects that are alternatives of or similar to Fat Aar Android

RocketXPlugin
🔥🔥 android 端编译加速插件🚀 自动识别未改动 module 并在编译流程中替换为 aar ,只编译改动模块,加速 Android apk 的编译速度。
Stars: ✭ 408 (-80.35%)
Mutual labels:  gradle-plugin, aar
Gradle Build Properties Plugin
Keep your secrets secret. External build properties support for your Gradle scripts.
Stars: ✭ 110 (-94.7%)
Mutual labels:  gradle-plugin
Methodtraceman
用于快速找到高耗时方法,定位解决Android App卡顿问题。通过gradle plugin+ASM实现可配置范围的方法插桩来统计所有方法的耗时,并提供友好的界面展示,支持耗时筛选、线程筛选、方法名筛选等。(A Tool for Discovering High Time-consuming Methods for Android App)
Stars: ✭ 1,258 (-39.4%)
Mutual labels:  gradle-plugin
Gradle Changelog Plugin
Plugin for parsing and managing the Changelog in a "keep a changelog" style.
Stars: ✭ 102 (-95.09%)
Mutual labels:  gradle-plugin
Injector
Gradle plugin for android which makes easier to inject aar libraries into project
Stars: ✭ 87 (-95.81%)
Mutual labels:  gradle-plugin
Jenkins Pipeline Shared Libraries Gradle Plugin
Gradle plugin to help with build and test of Jenkins Pipeline Shared Libraries (see https://jenkins.io/doc/book/pipeline/shared-libraries/)
Stars: ✭ 103 (-95.04%)
Mutual labels:  gradle-plugin
Rambuild
A plugin to make builds in gradle run on ram instead of the hard drive
Stars: ✭ 84 (-95.95%)
Mutual labels:  gradle-plugin
Godot
Keep track of how much time you spend on Gradle builds
Stars: ✭ 113 (-94.56%)
Mutual labels:  gradle-plugin
Kotlin
The Kotlin Programming Language.
Stars: ✭ 39,664 (+1810.6%)
Mutual labels:  gradle-plugin
Android String Reference
This is a Gradle plugin for Android applications which resolves XML string references in other XML strings.
Stars: ✭ 102 (-95.09%)
Mutual labels:  gradle-plugin
Kordamp Gradle Plugins
A collection of Gradle plugins
Stars: ✭ 100 (-95.18%)
Mutual labels:  gradle-plugin
No Copy
A Kotlin compiler plugin that removes the `copy` method of data classes.
Stars: ✭ 90 (-95.66%)
Mutual labels:  gradle-plugin
Obfusesmalitext
smali文件,jar包字符串混淆,支持gradle插件
Stars: ✭ 105 (-94.94%)
Mutual labels:  gradle-plugin
Gradle Buildconfig Plugin
A plugin for generating BuildConstants for any kind of Gradle projects: Java, Kotlin, Groovy, etc. Designed for KTS scripts.
Stars: ✭ 85 (-95.91%)
Mutual labels:  gradle-plugin
Licensetoolsplugin
Gradle plugin to check library licenses and generate license pages for Android
Stars: ✭ 113 (-94.56%)
Mutual labels:  gradle-plugin
Androidanimationexercise
Android 动画各种实现,包括帧动画、补间动画和属性动画的总结分享
Stars: ✭ 1,254 (-39.6%)
Mutual labels:  gradle-plugin
Vertx Gradle Plugin
An opinionated Gradle plugin for Vert.x projects
Stars: ✭ 98 (-95.28%)
Mutual labels:  gradle-plugin
Koala
从 Java 字节码到 ASM 实践
Stars: ✭ 103 (-95.04%)
Mutual labels:  gradle-plugin
Jaop
jaop is a gradle plugin base on javassist&asm for android aop
Stars: ✭ 115 (-94.46%)
Mutual labels:  gradle-plugin
Audiovideocodec
一款视频录像机,支持AudioRecord录音、MediaCodec输出AAC、MediaMuxer合成音频视频并输出mp4,支持自动对焦、屏幕亮度调节、录制视频时长监听、手势缩放调整焦距等
Stars: ✭ 113 (-94.56%)
Mutual labels:  gradle-plugin

fat-aar-android

license Maven Central

The solution of merging aar works with AGP 3.0 and higher. (Tested in AGP 3.0 - 4.2.0, and Gradle 4.9 - 6.8)

Getting Started

Step 1: Add classpath

Add snippet below to your root build script file:

JCenter services will be deprecated on May 1st 2021, if you are using the version in JCenter, it is recommended to rename the group name and switch to Maven Central. Like this: 'com.kezong:fat-aar:x.x.x' => 'com.github.kezong:fat-aar:x.x.x'

For Maven Central (The lastest release is available on Maven Central):

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.github.kezong:fat-aar:1.3.6'
    }
}

For JCenter (Deprecated, before 1.3.4):

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.kezong:fat-aar:1.3.3'
    }
}

Step 2: Add plugin

Add snippet below to the build.gradle of your main android library:

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

Step 3: Embed dependencies

Declare embed for the dependencies you want to merge in build.gradle.

The usage is similar to implementation, like this:

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 dependency
    embed project(path: ':lib-aar2', configuration: 'default')
    // local full aar dependency, just build in flavor1
    flavor1Embed project(path: ':lib-aar-local', configuration: 'default')
    // local full aar dependency, just build in debug
    debugEmbed(name: 'lib-aar-local2', ext: 'aar')
    // remote jar dependency
    embed 'com.google.guava:guava:20.0'
    // remote aar dependency
    embed 'com.facebook.fresco:fresco:1.12.0'
    // don't want to embed in
    implementation('androidx.appcompat:appcompat:1.2.0')
}

Transitive

Local Dependency

If you want to include local transitive dependencies in final artifact, you must add embed for transitive dependencies in your main library.

For example, mainLib depend on subLib1, subLib1 depend on subLib2, If you want include all dependencies in the final artifact, you must add embed for subLib1 and subLib2 in mainLib build.gradle

Remote Dependency

If you want to inlcude all of the remote transitive dependencies which are in POM file, you need change the transitive value to true in your build.gradle, like this:

fataar {
    /**
     * If transitive is true, local jar module and remote library's dependencies will be embed. (local aar module does not support)
     * If transitive is false, just embed first level dependency
     * Default value is false
     * @since 1.3.0
     */
    transitive = true
}

If you change the transitive value to true,and want to ignore a dependency in its POM file, you can add exclude keywords, like this:

embed('com.facebook.fresco:fresco:1.11.0') {
    // exclude all dependencies
    transitive = false
    // exclude any group or module
    exclude(group:'com.facebook.soloader', module:'soloader')
}

More usage see example.

About AAR File

AAR is a file format for android library. The file itself is a zip file that containing useful stuff in android. See anatomy of an aar file here.

support list for now:

  • Flavors
  • AndroidManifest merge
  • Classes merge
  • Jar merge
  • Res merge
  • Assets merge
  • Jni libs merge
  • R.txt merge
  • R.class merge
  • DataBinding merge
  • Proguard merge
  • Kotlin module merge

Gradle Version Support

Version 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.0 - 3.4.1 4.1 - 6.0
1.2.6 3.0.0 - 3.5.0 4.1 - 6.0
1.2.8 3.0.0 - 3.5.9 4.1 - 6.8
1.2.11 - 1.2.14 3.0.0 - 3.6.9 4.1 - 6.8
1.2.15 - 1.2.16 3.0.0 - 4.0.2 4.1 - 6.8
1.2.17 3.0.0 - 4.0.2 4.9 - 6.8
1.2.18+ 3.0.0 - 4.1.0 4.9 - 6.8
1.3.+ 3.0.0 - 4.1.0 4.9 - 6.8
1.3.4 - 1.3.5 3.0.0 - 4.1.0 4.9+
1.3.6 3.0.0 - 4.2.0 4.9+

The following link which version of Gradle is required for each version of the Android Gradle plugin. For the best performance, you should use the latest possible version of both Gradle and the plugin.

Plugin version and Required Gradle version

Version Log

  • 1.3.6
    • Support AGP 4.2.0 #290 #304
    • Copy 'navigation' along with other R.$ classes. #296
  • 1.3.5
    • Fix the bug that jar cannot be merged in some case. #255 #288
    • Fix build error when use gradle 6.0-6.8. #277
  • 1.3.4
    • Support Gradle 6.8 #274
  • 1.3.3
    • Fix bug that "Can not find task bundleDebugAar". #84
    • Fix bug that crash when module can not resolve.
    • Throw a runtime exception when manifest merge fail.
  • 1.3.1
    • Implement bytecode patching to process R class
    • Support merge consumerProguardFiles
    • Support merge *.kotlin_module, support kotlin top-level
    • Support flavor missingDimensionStrategy
    • Fix build error when flavor artifact renamed
    • Fix Jar merge error when use AGP 3.0 - 3.1
    • Fix AGP version not found in some cases
  • 1.2.20
    • Fix error that getName() in a null object. #214
    • Rename r-classes.jar with applicationId.
  • 1.2.19
    • Support embed aar that has no classes.jar #157
    • Support embed aar that has no AndroidManifest.xml #206
    • Fix bug that R.class not embed when publish to maven #200
  • 1.2.18
    • Adapt gradle plugin 4.1.0 #201
  • 1.2.17
    • Support databing merge #25 #67 #142
    • Use Gradle's configuration avoidance APIs #195
    • Support incremental build #199 #185
    • Fix wrong directory for aar's jar libs #154
  • 1.2.16
    • Search for android build plugin version in full classpath #172
    • Fixed a bug where resources might not be found when build in gradle version 4.0 #163
  • 1.2.15
    • adapt gradle plugin 4.0.0 #147
    • support that the module can be indexed in AS 4.0.0 #148
    • fix lint error #152
  • 1.2.12
    • Added support for specific build type and product flavor dependencies, like debugEmbed or flavorEmbed. #135 #137
    • Fix some build warning
  • 1.2.11
    • Fix build variants error in gradle plugin 3.6.+ #126
    • Fix bug that remote recources symbol can not found in R.class when build with gradle plugin 3.6.0+
  • 1.2.9
    • adapt gradle plugin 3.6.1 #120
  • 1.2.8
    • adapt gradle 6.0.0+ #97
  • 1.2.7
    • Fix manifest merge bug in gradle 3.5.0 #62 #65
  • 1.2.6
    • Adapt gradle plugin 3.5.0 #53 #58
  • 1.2.5
    • Fix task name repeat error #48
    • If minifyEnabled, jar files would build into classes.jar
  • 1.2.4
    • Fix jni and assets can't embed in windows platform #37
  • 1.2.3
    • Fix the problem that non-dependency R cannot be found #11 #35
    • No longer need to add compileOnly for dependencies
    • Default value of transitive change to false
  • 1.1.11
    • Fixed a problem where gradle plugin version might have misjudged #28
    • Fixed LibraryManifestMerger.java build warning #29
    • Optimize the merging rules of resource、assets、jni... #27
  • 1.1.10
    • Fixed jar merge bug when using gradle plugin 3.0.1 #24
    • Fixed rebuild(./gradlew clean assemble) error #24
  • 1.1.8
    • Adapt new interface to avoid the warning #10
    • Optimize AndroidManifest merge rules #21 #23
  • 1.1.7
    • Support embed R file when upload maven #7
  • 1.1.6
    • Adapt gradle plugin 3.3.0, 3.4.0, 3.4.1. #4 #9
    • Adapt gradle 4.10.1, 5.0, 5.1, 5.1.1... #8
    • Support sub-module's Flavor
    • Fix the problem that the class update of the sub-module is not timely
  • 1.0.3
    • Fix assets merge
  • 1.0.1
    • Support gradle plugin 3.1.0 - 3.2.1
    • Support R class file merge

Known Defects or Issues

  • Application cannot directly rely on embedded project: application cannot directly rely on your embedded project. It must rely on the AAR file compiled by your embedded project

    • For debugging convenience, you can use embed in the main library project when you choose to package aar. When you need to run the app directly, you can use implementation or api
  • Res merge conflicts. If the library res folder and embedded dependencies res have the same res Id(mostly string/app_name). A duplicate resources build exception will be thrown. To avoid res conflicts:

    • consider using a prefix to each res Id, both in library res and aar dependencies if possible.
    • Adding android.disableResourceValidation=true to gradle.properties can do a trick to skip the exception.
  • Proguard

    • If minifyEnabled is set to true, classes not referenced in the project will be filtered according to Proguard rules during compile, resulting in ClassNotFound during app compile. Most AAR is SDK that provide interfaces. It is recommended that you carefully comb Proguard files and add keep rules.

Thanks

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].