Skip to content

Commit

Permalink
if minifyEnabled is true, libs/*.jar into classes.jar
Browse files Browse the repository at this point in the history
  • Loading branch information
kezong committed Aug 8, 2019
1 parent 1fa3dc6 commit 258c91e
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 28 deletions.
4 changes: 2 additions & 2 deletions source/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ dependencies {
implementation gradleApi()
implementation localGroovy()

implementation 'com.android.tools.build:gradle:3.2.1'
implementation 'com.android.tools.build:gradle:3.4.1'
}

//afterEvaluate {
Expand All @@ -37,7 +37,7 @@ publish {
userOrg = 'kezong'
groupId = 'com.kezong'
artifactId = 'fat-aar'
publishVersion = '1.2.4'
publishVersion = '1.2.5'
desc = 'Gradle plugin for merging dependencies applies to gradle plugin version 3.+'
website = 'https:/kezong/fat-aar-android'
}
Expand Down
2 changes: 1 addition & 1 deletion source/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
43 changes: 32 additions & 11 deletions source/src/main/groovy/com/kezong/fataar/ExplodedHelper.groovy
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.kezong.fataar

import com.google.common.base.Strings
import org.gradle.api.Project

/**
Expand All @@ -10,9 +9,9 @@ import org.gradle.api.Project
*/
class ExplodedHelper {

static void processIntoJars(Project project,
Collection<AndroidArchiveLibrary> androidLibraries, Collection<File> jarFiles,
File folderOut) {
static void processLibsIntoLibs(Project project,
Collection<AndroidArchiveLibrary> androidLibraries, Collection<File> jarFiles,
File folderOut) {
for (androidLibrary in androidLibraries) {
if (!androidLibrary.rootFolder.exists()) {
Utils.logInfo('[warning]' + androidLibrary.rootFolder + ' not found!')
Expand Down Expand Up @@ -44,23 +43,45 @@ class ExplodedHelper {
}
}

static void processIntoClasses(Project project,
static void processClassesJarInfoClasses(Project project,
Collection<AndroidArchiveLibrary> androidLibraries,
File folderOut) {
Utils.logInfo('Merge ClassesJar')
Collection<File> allJarFiles = new ArrayList<>()
for (androidLibrary in androidLibraries) {
if (!androidLibrary.rootFolder.exists()) {
Utils.logInfo('[warning]' + androidLibrary.rootFolder + ' not found!')
continue
}
allJarFiles.add(androidLibrary.classesJarFile)
}
for (jarFile in allJarFiles) {
project.copy {
from project.zipTree(jarFile)
into folderOut
exclude 'META-INF/'
}
}
}

static void processLibsIntoClasses(Project project,
Collection<AndroidArchiveLibrary> androidLibraries, Collection<File> jarFiles,
File folderOut) {
Utils.logInfo('Merge classes')
Utils.logInfo('Merge Libs')
Collection<File> allJarFiles = new ArrayList<>()
List<String> rPathList = new ArrayList<>()
for (androidLibrary in androidLibraries) {
if (!androidLibrary.rootFolder.exists()) {
Utils.logInfo('[warning]' + androidLibrary.rootFolder + ' not found!')
continue
}
Utils.logInfo('[androidLibrary]' + androidLibrary.getName())
allJarFiles.add(androidLibrary.classesJarFile)
String packageName = androidLibrary.getPackageName()
if (!Strings.isNullOrEmpty(packageName)) {
rPathList.add(androidLibrary.getPackageName())
allJarFiles.addAll(androidLibrary.localJars)
}
for (jarFile in jarFiles) {
if (!jarFile.exists()) {
continue
}
allJarFiles.add(jarFile)
}
for (jarFile in allJarFiles) {
project.copy {
Expand Down
35 changes: 21 additions & 14 deletions source/src/main/groovy/com/kezong/fataar/VariantProcessor.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -173,12 +173,17 @@ class VariantProcessor {
processManifestTask.finalizedBy manifestsMergeTask
}

private Task handleClassesMergeTask() {
private Task handleClassesMergeTask(final boolean isMinifyEnabled) {
final Task task = mProject.tasks.create(name: 'mergeClasses'
+ mVariant.name.capitalize())
task.doFirst {
def dustDir = mVersionAdapter.getClassPathDirFiles().first()
ExplodedHelper.processIntoClasses(mProject, mAndroidArchiveLibraries, mJarFiles, dustDir)
if (isMinifyEnabled) {
ExplodedHelper.processClassesJarInfoClasses(mProject, mAndroidArchiveLibraries, dustDir)
ExplodedHelper.processLibsIntoClasses(mProject, mAndroidArchiveLibraries, mJarFiles, dustDir)
} else {
ExplodedHelper.processClassesJarInfoClasses(mProject, mAndroidArchiveLibraries, dustDir)
}
}
return task
}
Expand All @@ -187,7 +192,7 @@ class VariantProcessor {
final Task task = mProject.tasks.create(name: 'mergeJars'
+ mVariant.name.capitalize())
task.doFirst {
ExplodedHelper.processIntoJars(mProject, mAndroidArchiveLibraries, mJarFiles, mVersionAdapter.getLibsDirFile())
ExplodedHelper.processLibsIntoLibs(mProject, mAndroidArchiveLibraries, mJarFiles, mVersionAdapter.getLibsDirFile())
}
return task
}
Expand All @@ -196,7 +201,8 @@ class VariantProcessor {
* merge classes and jars
*/
private void processClassesAndJars(Task bundleTask) {
if (mVariant.getBuildType().isMinifyEnabled()) {
boolean isMinifyEnabled = mVariant.getBuildType().isMinifyEnabled()
if (isMinifyEnabled) {
//merge proguard file
for (archiveLibrary in mAndroidArchiveLibraries) {
List<File> thirdProguardFiles = archiveLibrary.proguardRules
Expand All @@ -215,22 +221,23 @@ class VariantProcessor {
throw new RuntimeException("Can not find task ${taskPath}!")
}

Task mergeClasses = handleClassesMergeTask()
Task javacTask = mVersionAdapter.getJavaCompileTask()
Task mergeClasses = handleClassesMergeTask(isMinifyEnabled)
syncLibTask.dependsOn(mergeClasses)
mExplodeTasks.each { it ->
mergeClasses.dependsOn it
}
mergeClasses.dependsOn(javacTask)

Task mergeJars = handleJarMergeTask()
mergeJars.shouldRunAfter(syncLibTask)
bundleTask.dependsOn(mergeJars)
mExplodeTasks.each { it ->
mergeJars.dependsOn it
if (!isMinifyEnabled) {
Task mergeJars = handleJarMergeTask()
mergeJars.shouldRunAfter(syncLibTask)
bundleTask.dependsOn(mergeJars)
mExplodeTasks.each { it ->
mergeJars.dependsOn it
}
mergeJars.dependsOn(javacTask)
}

Task javacTask = mVersionAdapter.getJavaCompileTask()
mergeClasses.dependsOn(javacTask)
mergeJars.dependsOn(javacTask)
}

/**
Expand Down

0 comments on commit 258c91e

Please sign in to comment.