Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion libs/androidlib/src/mill/androidlib/AndroidAppModule.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1070,7 +1070,7 @@ trait AndroidAppModule extends AndroidModule { outer =>
def androidTransitiveTestClasspath: T[Seq[PathRef]] = Task {
Task.traverse(transitiveRunModuleDeps) {
m =>
Task.Anon(m.localRunClasspath())
m.localRunClasspath
}().flatten
}

Expand Down
67 changes: 59 additions & 8 deletions libs/androidlib/src/mill/androidlib/AndroidModule.scala
Original file line number Diff line number Diff line change
Expand Up @@ -192,14 +192,39 @@ trait AndroidModule extends JavaModule { outer =>
}

/**
* Gets all the compiled Android resources (typically in res/ directory)
* from the [[transitiveModuleRunModuleDeps]]
* Gets all the direct compiled android resources (typically in res/ directory)
* from the [[moduleDepsChecked]]
* @return a sequence of PathRef to the compiled resources
*/
def androidDirectCompiledResources: T[Seq[PathRef]] = Task {
Task.traverse(moduleDepsChecked) {
case m: AndroidModule =>
m.androidCompiledModuleResources
case _ =>
Task.Anon(Seq.empty)
}().flatten.distinct
}

/**
* The transitive module dependencies of this module.
* This does not include direct dependencies, meaning
* these are only the dependencies of the dependencies.
*/
def androidTransitiveModuleDeps: Seq[JavaModule] = {
val moduleDepsCheckedSet = moduleDepsChecked.toSet
val isDirectDependency = (m: JavaModule) => moduleDepsCheckedSet.contains(m)
transitiveModuleRunModuleDeps.filterNot(isDirectDependency)
}

/**
* Gets all the transitive compiled Android resources (typically in res/ directory)
* from the [[androidTransitiveModuleDeps]]
* @return a sequence of PathRef to the compiled resources
*/
def androidTransitiveCompiledResources: T[Seq[PathRef]] = Task {
Task.traverse(transitiveModuleRunModuleDeps) {
Task.traverse(androidTransitiveModuleDeps) {
case m: AndroidModule =>
Task.Anon(m.androidCompiledModuleResources())
m.androidCompiledModuleResources
case _ =>
Task.Anon(Seq.empty)
}().flatten.distinct
Expand Down Expand Up @@ -516,7 +541,7 @@ trait AndroidModule extends JavaModule { outer =>
def androidTransitiveLibRClasspath: T[Seq[PathRef]] = Task {
Task.traverse(transitiveModuleDeps) {
case m: AndroidModule =>
Task.Anon(m.androidLibRClasspath())
m.androidLibRClasspath
case _ =>
Task.Anon(Seq.empty[PathRef])
}().flatten
Expand Down Expand Up @@ -575,10 +600,35 @@ trait AndroidModule extends JavaModule { outer =>
PathRef(Task.dest)
}

/**
* If true, only direct module dependencies will be used to
* compile android resources for R class generation.
* Corresponds to `android.nonTransitiveRClass` in Gradle.
*
* Default is true.
*
* When overridden, make sure to override all modules
* in the project to have consistent behavior.
*/
def androidNonTransitiveRClass: Boolean = true

/**
* Gets the [[androidCompiledModuleResources]] from
* from dependencies based on
* [[androidNonTransitiveRClass]] setting.
* @return
*/
def androidDepCompiledResources: T[Seq[PathRef]] =
androidNonTransitiveRClass match {
case true => Task { androidDirectCompiledResources() }
case false =>
Task { androidDirectCompiledResources() ++ androidTransitiveCompiledResources() }
}

/**
* Gets all the android resources from this module,
* compiles them into flata files and collects
* transitive compiled resources from dependencies.
* compiled resources from dependencies.
* @return a sequence of PathRef to the compiled resources
*/
def androidCompiledModuleResources: T[Seq[PathRef]] = Task {
Expand All @@ -602,7 +652,8 @@ trait AndroidModule extends JavaModule { outer =>

os.call(aapt2Compile ++ aapt2Args)
}
androidTransitiveCompiledResources() ++ Seq(PathRef(Task.dest))

Seq(PathRef(Task.dest))
}

/**
Expand All @@ -613,7 +664,7 @@ trait AndroidModule extends JavaModule { outer =>
*/
def androidLinkedResources: T[PathRef] = Task {
val compiledLibResDir = androidCompiledLibResources().path
val moduleResDirs = androidCompiledModuleResources()
val moduleResDirs = (androidCompiledModuleResources() ++ androidDepCompiledResources())
.map(_.path)

val filesToLink = os.walk(compiledLibResDir).filter(os.isFile(_)) ++
Expand Down