Skip to content
Merged
Show file tree
Hide file tree
Changes from 16 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
19 changes: 3 additions & 16 deletions example/thirdparty/android-compose-samples/build.mill
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,6 @@ object Jetchat extends mill.api.Module {
mvn"org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2",
mvn"androidx.activity:activity-compose:1.10.1",
mvn"androidx.core:core-ktx:1.16.0",
mvn"androidx.appcompat:appcompat:1.7.0",
mvn"androidx.compose.runtime:runtime-livedata",
mvn"androidx.lifecycle:lifecycle-viewmodel-compose:2.9.0",
mvn"androidx.lifecycle:lifecycle-runtime-compose:2.9.0",
Expand All @@ -288,8 +287,7 @@ object Jetchat extends mill.api.Module {
mvn"androidx.databinding:viewbinding:8.13.0",
mvn"androidx.compose.ui:ui-tooling",
mvn"androidx.compose.ui:ui-tooling-preview",
mvn"androidx.compose.ui:ui-test-manifest",
mvn"com.google.android.material:material:1.6.0"
mvn"androidx.compose.ui:ui-test-manifest"
)

def androidSdkModule = mill.api.ModuleRef(androidSdkModule0)
Expand All @@ -298,12 +296,6 @@ object Jetchat extends mill.api.Module {

def androidMinSdk = Versions.androidMinSdk

/*
* FIXME Currently broken with
* Message 2) profileScreen_back_conversationScreen(com.example.compose.jetchat.NavigationTest)
* android.content.res.Resources$NotFoundException: String resource ID #0x7f0c002b
* Message android.content.res.Resources$NotFoundException: String resource ID #0x7f0c002b
*/
object androidTest extends AndroidAppKotlinInstrumentedTests, AndroidR8AppModule {
override def bomMvnDeps = super.mvnDeps() ++ Seq(
mvn"androidx.compose:compose-bom:2025.08.00"
Expand All @@ -317,9 +309,6 @@ object Jetchat extends mill.api.Module {
true
}

// FIXME: R8 should compile without missing classes errors
override def androidR8Args = Seq("--map-diagnostics", "error", "warning")

def mvnDeps = super.mvnDeps() ++ Seq(
mvn"junit:junit:4.13.2",
mvn"androidx.test:core:1.6.1",
Expand All @@ -330,10 +319,8 @@ object Jetchat extends mill.api.Module {
mvn"org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2",
mvn"androidx.compose.ui:ui-test",
mvn"androidx.compose.ui:ui-test-junit4",
mvn"androidx.collection:collection-ktx:1.5.0",
mvn"androidx.savedstate:savedstate-ktx:1.3.0",
mvn"androidx.appcompat:appcompat:1.7.0",
mvn"androidx.lifecycle:lifecycle-viewmodel-compose:2.9.0"
// FIXME temporary workaround to avoid linking error
mvn"androidx.appcompat:appcompat:1.7.0"
)

}
Expand Down
5 changes: 2 additions & 3 deletions example/thirdparty/androidtodo/build.mill
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ object app

def mvnDeps: T[Seq[Dep]] = super.mvnDeps() ++ Seq(
mvn"androidx.core:core-ktx:1.15.0",
mvn"androidx.appcompat:appcompat:1.7.0",
mvn"androidx.annotation:annotation:1.9.1",
mvn"org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0",
mvn"com.jakewharton.timber:timber:5.0.1",
Expand Down Expand Up @@ -145,7 +144,7 @@ object app

object androidTest
extends AndroidAppKotlinInstrumentedTests,
AndroidR8AppModule,
AndroidR8InstrumentedTestsModule,
AndroidHiltSupport {

def moduleDeps = super.moduleDeps ++ Seq(`shared-test`)
Expand All @@ -164,7 +163,6 @@ object app
}

override def androidProjectProguardFiles = Task.Sources(
"proguard-rules.pro",
"proguardTest-rules.pro"
)
override def androidDefaultProguardFileNames: Task[Seq[String]] = Task.Anon {
Expand All @@ -184,6 +182,7 @@ object app
// Dependencies for Android unit tests
mvn"junit:junit:4.13.2",
mvn"org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0",
mvn"androidx.appcompat:appcompat:1.7.0",
// AndroidX Test - Instrumented testing
mvn"androidx.test:core-ktx:1.6.1",
mvn"androidx.test.ext:junit-ktx:1.2.1",
Expand Down
26 changes: 10 additions & 16 deletions libs/androidlib/src/mill/androidlib/AndroidAppModule.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@ import mill.javalib.*
import os.{Path, RelPath, zip}
import os.RelPath.stringRelPathValidated
import upickle.*
import scala.concurrent.duration.*

import scala.concurrent.duration.*
import scala.jdk.OptionConverters.RichOptional
import scala.xml.*
import mill.api.daemon.internal.bsp.BspBuildTarget
import mill.api.daemon.internal.EvaluatorApi
import mill.javalib.testrunner.TestResult

import scala.util.Properties.isWin

/**
Expand Down Expand Up @@ -134,12 +135,13 @@ trait AndroidAppModule extends AndroidModule { outer =>
)

/**
* Collect files from META-INF folder of classes.jar (not META-INF of aar in case of Android library).
* Collect files from META-INF folder of [[androidPackagedDeps]] (not META-INF of aar in case of Android library).
* to include in the apk
*/
def androidLibsClassesJarMetaInf: T[Seq[PathRef]] = Task {
// ^ not the best name for the method, but this is to distinguish between META-INF of aar and META-INF
// of classes.jar included in aar
compileClasspath()
androidPackagedDeps()
.filter(ref =>
ref.path.ext == "jar" &&
ref != androidSdkModule().androidJarPath()
Expand Down Expand Up @@ -178,7 +180,6 @@ trait AndroidAppModule extends AndroidModule { outer =>
}
})
.map(PathRef(_))
.toSeq
}

/**
Expand All @@ -189,7 +190,7 @@ trait AndroidAppModule extends AndroidModule { outer =>
def androidPackageableExtraFiles: T[Seq[AndroidPackageableExtraFile]] =
Task { Seq.empty[AndroidPackageableExtraFile] }

def androidPackageMetaInfoFiles: T[Seq[AndroidPackageableExtraFile]] = Task {
def androidPackagedMetaInfFiles: T[Seq[AndroidPackageableExtraFile]] = Task {
def metaInfRoot(p: os.Path): os.Path = {
var current = p
while (!current.endsWith(os.rel / "META-INF")) {
Expand Down Expand Up @@ -239,7 +240,7 @@ trait AndroidAppModule extends AndroidModule { outer =>
(androidPackageableExtraFile.source.path, androidPackageableExtraFile.destination.asSubPath)
)

val metaInf = androidPackageMetaInfoFiles().map(asZipSource)
val metaInf = androidPackagedMetaInfFiles().map(asZipSource)

val nativeDeps = androidPackageableNativeDeps().map(asZipSource)

Expand Down Expand Up @@ -894,9 +895,6 @@ trait AndroidAppModule extends AndroidModule { outer =>

override def androidIsDebug: T[Boolean] = Task { true }

override def moduleDeps: Seq[JavaModule] = Seq.empty
override def compileModuleDeps: Seq[JavaModule] = Seq(outer)

override def resolutionParams: Task[ResolutionParams] = Task.Anon(outer.resolutionParams())

override def androidApplicationId: String = s"${outer.androidApplicationId}.test"
Expand Down Expand Up @@ -962,7 +960,7 @@ trait AndroidAppModule extends AndroidModule { outer =>
}

private def androidxTestManifests: Task[Seq[PathRef]] = Task {
androidUnpackArchives().flatMap {
androidUnpackRunArchives().flatMap {
unpackedArchive =>
unpackedArchive.manifest.map(_.path)
}.filter {
Expand Down Expand Up @@ -1040,8 +1038,8 @@ trait AndroidAppModule extends AndroidModule { outer =>
val device = androidTestInstall().apply()

val instrumentOutput = os.proc(
(
androidSdkModule().adbExe().path,
Seq(
androidSdkModule().adbExe().path.toString,
"-s",
device,
"shell",
Expand Down Expand Up @@ -1084,10 +1082,6 @@ trait AndroidAppModule extends AndroidModule { outer =>
.map(PathRef(_))
}

override def androidPackagedDeps: T[Seq[PathRef]] = Task {
androidResolvedRunMvnDeps()
}

/**
* The instrumented tests are packaged with testClasspath which already contains the
* user compiled classes
Expand Down
2 changes: 1 addition & 1 deletion libs/androidlib/src/mill/androidlib/AndroidModule.scala
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ trait AndroidModule extends JavaModule { outer =>
sources = androidLibsRClasses().map(_.path),
compileClasspath = Seq.empty,
javacOptions = jOpts.compiler,
incrementalCompilation = zincIncrementalCompilation()
incrementalCompilation = true
),
javaHome = javaHome().map(_.path),
javaRuntimeOptions = jOpts.runtime,
Expand Down
Loading
Loading