android fat16,GitHub - Moriarty16/fat-aar-android: A gradle plugin that merge dependencies into the ...

fat-aar-android

687474703a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d417061636865322e302d627269676874677265656e2e7376673f7374796c653d666c6174

68747470733a2f2f6170692e62696e747261792e636f6d2f7061636b616765732f6b657a6f6e672f6d6176656e2f6661742d6161722f696d616765732f646f776e6c6f61642e737667

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

Getting Started

Step 1: Apply plugin

Add snippet below to your root build script file:

buildscript {

repositories {

jcenter()

}

dependencies {

classpath 'com.kezong:fat-aar:1.3.3'

}

}

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

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

Step 2: 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(':lib-java')

// aar dependency

embed project(':lib-aar')

// aar dependency

embed project(':lib-aar2')

// local full aar dependency, just build in flavor1

flavor1Embed project(':lib-aar-local')

// 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.11.0'

// don't want to embed in

implementation('androidx.appcompat:appcompat:1.2.0')

}

Transitive

Local Dependency

If you want to including 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 including all dependencies in final artifact, you must add embed for subLib1 and subLib2 in mainLib build.gradle

Remote Dependency

If you want to including all remote transitive dependencies which 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+

1.2.11 - 1.2.14

3.0.0 - 3.6.9

4.1+

1.2.15 - 1.2.16

3.0.0 - 4.0.2

4.1+

1.2.17

3.0.0 - 4.0.2

4.9+

1.2.18+

3.0.0 - 4.1.0

4.9+

1.3.+

3.0.0 - 4.1.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.

Version Log

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值