Skip to content

Commit

Permalink
adapt to new separate layoutlib-resources artifact
Browse files Browse the repository at this point in the history
  • Loading branch information
gabrielittner committed Feb 29, 2024
1 parent 214b4df commit a6122e8
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 9 deletions.
1 change: 1 addition & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ tools-common = { module = "com.android.tools:common", version.ref = "androidTool
tools-layoutlib-api = { module = "com.android.tools.layoutlib:layoutlib-api", version = "31.4.0-alpha10" }
tools-layoutlib = { module = "com.android.tools.layoutlib:layoutlib", version.ref = "layoutlib" }
tools-layoutlib-runtime = { module = "com.android.tools.layoutlib:layoutlib-runtime", version.ref = "layoutlib" }
tools-layoutlib-resources = { module = "com.android.tools.layoutlib:layoutlib-resources", version.ref = "layoutlib" }
tools-ninepatch = { module = "com.android.tools:ninepatch", version.ref = "androidTools" }
tools-sdkCommon = { module = "com.android.tools:sdk-common", version.ref = "androidTools" }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ public class PaparazziPlugin : Plugin<Project> {
private fun <T> setupPaparazzi(project: Project, variants: DomainObjectSet<T>) where T : BaseVariant, T : TestedVariant {
project.addTestDependency()
val nativePlatformFileCollection = project.setupNativePlatformDependency()
val layoutlibResourcesFileCollection = project.setupLayoutlibResourcesDependency()

// Create anchor tasks for all variants.
val verifyVariants = project.tasks.register("verifyPaparazzi") {
Expand Down Expand Up @@ -232,6 +233,8 @@ public class PaparazziPlugin : Plugin<Project> {
// They need special handling, so they're added as inputs.property above, and systemProperty here.
test.systemProperties["paparazzi.platform.data.root"] =
nativePlatformFileCollection.singleFile.absolutePath
test.systemProperties["paparazzi.resources.data.root"] =
layoutlibResourcesFileCollection.singleFile.absolutePath
test.systemProperties["paparazzi.test.record"] = isRecordRun.get()
test.systemProperties["paparazzi.test.verify"] = isVerifyRun.get()
}
Expand Down Expand Up @@ -282,6 +285,21 @@ public class PaparazziPlugin : Plugin<Project> {
.files
}

private fun Project.setupLayoutlibResourcesDependency(): FileCollection {
val layoutlibResourcesConfiguration = configurations.create("layoutlibResources")
layoutlibResourcesConfiguration.dependencies.add(
dependencies.create("com.android.tools.layoutlib:layoutlib-resources:$NATIVE_LIB_VERSION")
)
dependencies.registerTransform(UnzipTransform::class.java) { transform ->
transform.from.attribute(ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.JAR_TYPE)
transform.to.attribute(ARTIFACT_TYPE_ATTRIBUTE, ArtifactTypeDefinition.DIRECTORY_TYPE)
}

return layoutlibResourcesConfiguration
.artifactViewFor(ArtifactTypeDefinition.DIRECTORY_TYPE)
.files
}

private fun Project.addTestDependency() {
val dependency = if (isInternal()) {
dependencies.project(mapOf("path" to ":paparazzi"))
Expand Down
20 changes: 14 additions & 6 deletions paparazzi/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ java {
def artifactType = Attribute.of('artifactType', String)

configurations {
unzip {
layoutlibPlatform {
attributes.attribute(artifactType, ArtifactTypeDefinition.DIRECTORY_TYPE)
}
layoutlibResources {
attributes.attribute(artifactType, ArtifactTypeDefinition.DIRECTORY_TYPE)
}
}
Expand Down Expand Up @@ -63,15 +66,16 @@ dependencies {
if (osName.startsWith("mac")) {
def osArch = System.getProperty("os.arch").toLowerCase(Locale.US)
if (osArch.startsWith("x86")) {
unzip variantOf(libs.tools.layoutlib.runtime) { classifier("mac") }
layoutlibPlatform variantOf(libs.tools.layoutlib.runtime) { classifier("mac") }
} else {
unzip variantOf(libs.tools.layoutlib.runtime) { classifier("mac-arm") }
layoutlibPlatform variantOf(libs.tools.layoutlib.runtime) { classifier("mac-arm") }
}
} else if (osName.startsWith("windows")) {
unzip variantOf(libs.tools.layoutlib.runtime) { classifier("win") }
layoutlibPlatform variantOf(libs.tools.layoutlib.runtime) { classifier("win") }
} else {
unzip variantOf(libs.tools.layoutlib.runtime) { classifier("linux") }
layoutlibPlatform variantOf(libs.tools.layoutlib.runtime) { classifier("linux") }
}
layoutlibResources libs.tools.layoutlib.resources

testImplementation libs.truth

Expand Down Expand Up @@ -144,7 +148,11 @@ tasks.withType(Test).configureEach {
)
systemProperty(
"paparazzi.platform.data.root",
configurations.unzip.singleFile.absolutePath
configurations.layoutlibPlatform.singleFile.absolutePath
)
systemProperty(
"paparazzi.resources.data.root",
configurations.layoutlibResources.singleFile.absolutePath
)
// Uncomment to debug JNI issues in layoutlib
// jvmArgs '-Xcheck:jni'
Expand Down
10 changes: 7 additions & 3 deletions paparazzi/src/main/java/app/cash/paparazzi/internal/Renderer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,14 @@ internal class Renderer(
val platformDataRoot = System.getProperty("paparazzi.platform.data.root")
?: throw RuntimeException("Missing system property for 'paparazzi.platform.data.root'")
val platformDataDir = File(platformDataRoot, "data")
val fontLocation = File(platformDataDir, "fonts")
val nativeLibLocation = File(platformDataDir, getNativeLibDir())
val icuLocation = File(platformDataDir, "icu" + File.separator + "icudt72l.dat")
val keyboardLocation = File(platformDataDir, "keyboards" + File.separator + "Generic.kcm")

val resourcesDataRoot = System.getProperty("paparazzi.resources.data.root")
?: throw RuntimeException("Missing system property for 'paparazzi.resources.data.root'")
val resourcesDataDir = File(resourcesDataRoot, "data")
val fontLocation = File(resourcesDataDir, "fonts")
val icuLocation = File(resourcesDataDir, "icu" + File.separator + "icudt72l.dat")
val keyboardLocation = File(resourcesDataDir, "keyboards" + File.separator + "Generic.kcm")
val buildProp = File(environment.platformDir, "build.prop")
val attrs = File(platformDataResDir, "values" + File.separator + "attrs.xml")
val systemProperties = DeviceConfig.loadProperties(buildProp) + mapOf(
Expand Down

0 comments on commit a6122e8

Please sign in to comment.